作者 | 闲鱼技术 - 雨成
1.现状
-
用户反馈商品曝光异常,如何快速定位?
-
产品同学圈了一批商品,如何查看该样本的实时报表?
-
发现问题总是晚一步,如何在第一时间获取自定义的预警信息?
-
......
2.实时数仓调研
数仓调研
-
第一类:从无到有 -
当Apache Storm(开源的分布式实时计算系统)问世后,大数据不在依靠MapReduce这种单一的计算方式,拥有了当日数据当日处理的能力。 -
第二类:从有到全 -
以Lambda和Kappa为代表的架构,能够将实时与离线架构结合在一起,一套产品可以实现多种数据更新策略。 -
第三类:从全到简 -
以Flink为代表的支持窗口计算的流式框架出现,使离线和实时的逻辑能够统一起来,一套代码实现两种更新策略,避免了因为开发方式不统一导致的数据不一致问题。 -
第四类:架构走向工具 -
以Hologres为代表的HSAP(Hybrid Serving/Analytical Processing)引擎,用服务分析一体化的设计理念,统一分析型数据库和业务数据库,再配合Flink,真正实现数仓的彻底实时化。
数据模型

-
ODS(Operational Data Store): 贴源层
-
这一层又叫做贴源层,最为接近数据源的一层,需要存储的数据量是最大的,存储的数据也是最原始。对众多数据源而言,他们的数据格式基本不一致,经过统一规格化后可以得到规整的数据,将数据源中的数据经过抽取、清洗、传输后装入ODS层。
-
DWD(Data Warehouse Detail):数据明细层
-
业务层与数据仓库的隔离层,主要对ODS层做一些数据清洗和规范化的操作,并且可以按照不同的行为维度对数据进行划分,例如本文对数据源就进行了划分,主要分为浏览、曝光、点击、交易等不同的维度,这些不同的维度能够对上层调用方提供更细粒度的数据服务。
-
DWS(Data WareHouse Servce):数据服务层
-
对各个域进行了适度汇总,主要以数据域+业务域的理念建设公共汇总层,与离线数仓不同的是,实时数仓的汇总层分为轻度汇总层和高度汇总层,例如将轻度汇总层数据写入 ADS,用于前端产品复杂的OLAP查询场景,满足自助分析和产出报表的需求。
-
ADS(Application Data Store):应用数据服务层
-
主要是为了具体需求而构建的应用层,通过 RPC 框架对外提供服务,例如本文中提到的数据报表分析与展示、监控告警、流量调控、开放平台等应用。
-
DIM(Dimension):维表
-
在实时计算中非常重要,也是重点维护的部分,维表需要实时更新,且下游基于最新的维表进行计算,例如闲鱼的实时数仓维表会用到闲鱼商品表、闲鱼用户表、人群表、场景表、分桶表等。
3.技术方案
整体架构
数据源是整个实时数仓的底座,闲鱼拥有众多场景,例如首页推荐、猜你喜欢、搜索等,在这些场景中会有不同的用户行为,用户产生的曝光、点击、浏览等行为日志会被上层存储工具收集。如上图中的数据接入层,可以将数据源接入到UT[3]日志、黄金令箭、数据备库或服务端日志中存储。
数据清洗与规整是构建实时数仓的核心过程,数据计算层利用Blink的实时处理能力将不同格式的数据统一清洗、补充和规整后存入TT[4]中。数据服务层是实时数仓的网关层,将实时数据进行逻辑处理后对外提供数据服务和API网关能力。
应用层是最贴近用户的层次,这一层是为了具体需求而构建的,可以对各个维度数据进行实时报表展示,对线上异常流量监控告警,对商品域进行流量调控,还可供其他应用开放相关接口等。
技术难点
-
数据量大,需要处理的埋点数据以及服务器日志达百亿。
-
实时性能要求高,监控告警需要较高的实时性。
-
分析交互需求强,数据分析场景复杂且交互频繁。
-
异构数据源多,闲鱼各个系统模块产生各类格式的数据。
我们在做实时报表展示时结合性能和实际情况,会对实时数据进行分钟级别的数据聚合,通过Blink提供的滚动窗口聚合就能够高效地解决该问题。滚动窗口将每个元素分配到一个指定窗口大小的窗口中,滚动窗口有一个固定的大小,并且不会出现重叠。例如:如果指定了一个1分钟大小的滚动窗口,那么无限流的数据会根据时间划分成[0:00 - 0:01), [0:01, 0:02), [0:02, 0:03)... 等窗口,滚动窗口划分形式如下图所示。

GROUP BY TUMBLE(<time-attr>, <size-interval>)
-
Event Time:用户提供的事件时间(通常是数据的最原始的创建时间),event time一定是用户提供在表的schema里的数据。
-
Processing Time:表示系统对事件进行处理的本地系统时间,单位为毫秒。
Hologres是基于存储计算分离的设计模式而构建的,数据全部存在一个分布式文件系统中,存储引擎的总体架构如下图所示:


在设计异构数据源的解决方案时也考虑到后面打造开放平台的需求,所以将数据接入层抽象成不同领域的接口对外提供接入服务并且在应用层也开放了各个维度的统计接口。这样对有接入实时数仓的业务需求时可以通过数据层和应用层开放的抽象接口快速接入,不用考虑整个链路中间的细节,能够极大地减少开发周期。
4.阶段性成果
-
能够实时评估线上策略的最终效果;
-
能够快速排查定位用户反馈的曝光异常问题;
-
能够给产品同学提供圈品后的实时报表信息等等。
5.展望
-
与集团内的其他监控告警平台对接,使得在本平台内不仅能够更细粒度地监控各个场景的商品流量异常情况,而且能够收获一个拥有监控、预警、定位、自修复一站式的安保平台。
-
打造实时数仓的开放平台提供给其他团队使用,能够节约更多的人力资源和开发周期。
[1] Hologres: Hologres是阿里巴巴自主研发的一款交互式分析产品,兼容PostgreSQL 11协议,与大数据生态无缝连接,支持高并发和低延时地分析处理PB级数据。
浅谈 RSocket 与响应式编程
一种通用整形数组压缩方法

