美团网■美团OCTO万亿级数据中心计算引擎技术解析( 三 )

2.3 技术方案详细解析
2.3.1 数据流解析
系统根据待统计的维度构建了一棵递推拓扑树 , 如下图所示 。 其中黄色的部分代表消息队列(每个矩形代表一个 topic) , 绿色部分代表一个计算子集群(消费前置 topic 多个 partition , 统计自己负责维度的数据指标并存储 , 同时聚合压缩向后继续发) 。 除“原始采集数据 topic 外” , 其他 topic 和 consumer 所在维度对应数据的检索条件(如标红二级 topic :主机+接口 , 代表同时指定主机和接口的指标查询数据) , 红色箭头代表数据流向 。
拓扑树形结构的各个子集群所对应的维度标识集合 , 必为其父计算集群对应维度标识集合的真子集(如下图最上面链路 , “主机+接口+远程服务”3个维度一定包含“主机+接口”两个维度 。 “主机+接口”两个维度包含“主机”维度) 。 集群间数据传输 , 采用批量聚合压缩后在消息队列媒介上通信完成 , 在计算过程中实现降维 。
美团网■美团OCTO万亿级数据中心计算引擎技术解析
本文插图
2.3.2 计算模式解析
下面详细介绍数据拓扑树中分布式子集群的计算模式:
首先 , 维度值相同的所有数据会在本层级集群内落到同一计算节点 。 每个计算子集群中的各计算节点 , 从消息队列消费得到数据并按自身维度进行聚合(前置集群已经按当前集群维度指定分发 , 所以聚合率很高) , 得到若干计数卡表(计数卡表即指定维度的时延、错误数等指标与具体计数的映射 Map) 。
其次 , 将聚合后的计数卡表与现有的相同维度合并计算 , 并在时间窗口存储指标 。
若计算集群有后续的子计算集群 , 则基于后继集群的目标维度 , 根据目标维度属性做散列计算 , 并将相同散列码的计数卡表聚合压缩后发到后继 partition 。
离线的天级计算复用了三级维度、二级维度的多项结果 , 各环节前面计算的结果为后面多个计算集群复用 , 任何一个服务的数据都是在分布式计算 。 此外 , 整个计算过程中维护着技术卡表的映射关系 , 对于 TP 数据来说就是精确计算的 , 不会失真 。
整个计算过程中 , 前置计算结果会被多个直接及间接后续子计算复用(如三级聚合计算对二级和一级都是有效的) , 在很大程度上减少了计算量 。
美团网■美团OCTO万亿级数据中心计算引擎技术解析
本文插图
2.3.3 关键技术总结
1. 高吞吐 & 扩展性关键设计

  • 去计算热点:组织多级散列数据流 , 逐级降维 。
  • 降计算量:前置子计算结果复用 , 分布式多路归并 。
  • 降网络IO , 磁盘IO:优化 PB 序列化算法 , 自管理 MQ 批量 。
  • 去存储热点:消除 HBase Rowkey 热点 。
  • 无锁处理:自研线程分桶的流批处理模型 , 全局无锁 。
  • 全环节水平扩展:计算、传输、存储均水平扩展 。
2. 系统高可靠、低运维、数据准确性高于5个9关键设计
  • 无状态化 + 快速自愈:节点无状态化 , 宕机秒级感知自愈 。
  • 异常实时感知:异常节点通过心跳摘除 , 异常数据迁移回溯 。
  • 故障隔离容灾:各维度独立隔离故障范围;多机房容灾 。
  • 逐级降维过程中数据不失真 , 精确的 TP 计算模式 。
3. 提升实时性关键设计
  • 流式拓扑模型 , 分布式子计算结果复用 , 计算量逐级递减 。
  • 无锁处理:自研线程分桶的流批处理模型 , 全局无锁 。
  • 异常实时监测自愈:计算节点异常时迅速 Rebalance , 及时自愈 。
  • 秒级计算流独立 , 内存存储 。
三、优化效果
  1. 目前日均处理数据量超万亿 , 系统可支撑日10万亿+量级并具备良好的扩展能力;秒峰值可处理5亿+数据;单服务日吞吐上限提升1000倍+ , 单服务可以支撑5000亿数据计算 。