|连载:阿里巴巴大数据实践—实时技术( 二 )


2.数据处理
数据被采集到中间件中后 , 需要下游实时订阅数据 , 并拉取到流式计算系统的任务中进行加工处理 。 这里需要提供流计算引擎以支持流式任务的执行 。
3.数据存储数据被实时加工处理(比如聚合、清洗等)后 , 会写到某个在线服务的存储系统中 , 供下游调用方使用 。 这里的写操作是增量操作 , 并且是源源不断的 。
4.数据服务
在存储系统上会架设一层统一的数据服务层(比如提供HSF接口、HTTP服务等) , 用于获取实时计算结果 。
整体技术架构如图所示:
|连载:阿里巴巴大数据实践—实时技术
本文插图

从图可以看出 , 在数据采集和数据服务部分实时和离线是公用的 , 因为在这两层中都不需要关心数据的时效性 。 这样才能做到数据源的统一 , 避免流式处理和离线处理的不一致 。
流式数据模型
在流式计算技术中 , 需要各个子系统之间相互依赖形成一条数据处理链路 , 才能产出结果最终对外提供实时数据服务 。 在实际技术选型时 , 可选的开源技术方案非常多 , 但是各个方案的整体架构是类似的 , 只是各个子系统的实现原理不太一样 。 另外 , 流式技术架构中的系统跟离线处理是有交叉的 , 两套技术方案并不是完全独立的 , 并且在业界中有合并的趋势 。
各个子系统按功能划分的话 , 主要分为以下几部分:
数据模型设计是贯通数据处理过程的 , 流式数据处理也一样 , 需要对数据流建模分层 。 实时建模跟离线建模非常类似 , 数据模型整体上分为五层(ODS、DWD、DWS、ADS、DIM) 。
由于实时计算的局限性 , 每一层中并没有像离线做得那么宽 , 维度和指标也没有那么多 , 特别是涉及回溯状态的指标 , 在实时数据模型中几乎没有 。
整体来看 , 实时数据模型是离线数据模型的一个子集 , 在实时数据处理过程中 , 很多模型设计就是参考离线数据模型实现的 。
1.数据分层
在流式数据模型中 , 数据模型整体上分为五层 。
ODS层:跟离线系统的定义一样 , ODS层属于操作数据层 , 是直接从业务系统采集过来的最原始数据 , 包含了所有业务的变更过程 , 数据粒度也是最细的 。 在这一层 , 实时和离线在源头上是统一的 , 这样的好处是用同一份数据加工出来的指标 , 口径基本是统一的 , 可以更方便进行实时和离线间数据比对 。 例如:原始的订单变更记录数据、服务器引擎的访问日志 。
DWD层:DWD层是在ODS层基础上 , 根据业务过程建模出来的实时事实明细层 , 对于访问日志这种数据(没有上下文关系 , 并且不需要等待过程的记录) , 会回流到离线系统供下游使用 , 最大程度地保证实时和离线数据在ODS层和DWD层是一致的 。 例如:订单的支付明细表、退款明细表、用户的访问日志明细表 。
DWS层:订阅明细层的数据后 , 会在实时任务中计算各个维度的汇总指标 。 如果维度是各个垂直业务线通用的 , 则会放在实时通用汇总层 , 作为通用的数据模型使用 。 比如电商网站的卖家粒度 , 只要涉及交易过程 , 就会跟这个维度相关 , 所以卖家维度是各个垂直业务的通用维度 , 其中的汇总指标也是各个业务线共用的 。 例如:电商数据的几大维度的汇总表(卖家、商品、买家) 。
ADS层:个性化维度汇总层 , 对于不是特别通用的统计维度数据会放在这一层中 , 这里计算只有自身业务才会关注的维度和指标 , 跟其他业务线一般没有交集 , 常用于一些垂直创新业务中 。 例如:手机淘宝下面的某个爱逛街、微淘等垂直业务 。
DIM层:实时维表层的数据基本上都是从离线维表层导出来的 , 抽取到在线系统中供实时应用调用 。 这一层对实时应用来说是静态的 , 所有的ETL处理工作会在离线系统中完成 。 维表在实时应用的使用中跟离线稍有区别 , 后面章节中会详细说明 。 例如:商品维表、卖家维表、买家维表、类目维表 。


推荐阅读