写点什么

美团 OCTO 万亿级数据中心计算引擎技术解析

  • 2020-05-05
  • 本文字数:4462 字

    阅读完需:约 15 分钟

美团OCTO万亿级数据中心计算引擎技术解析

美团自研的 OCTO 数据中心(简称 Watt)日均处理万亿级数据量,该系统具备较好的扩展能力及实时性,千台实例集群周运维成本低于 10 分钟。

本文将详细阐述 Watt 计算引擎的演进历程及架构设计,同时详细介绍其全面提升计算能力、吞吐能力、降低运维成本所采用的各项技术方案。希望能给大家一些启发或者帮助。

一、OCTO 数据中心简介

1.1 系统介绍

1.1.1 OCTO 系统介绍

OCTO 是美团标准化的服务治理基础设施,目前几乎覆盖公司所有业务的治理与运营。OCTO 提供了服务注册发现、数据治理、负载均衡、容错、灰度发布等治理功能,致力于提升研发效率,降低运维成本,并提升应用的稳定性。OCTO 最新演进动态细节可参考《美团下一代服务治理系统 OCTO2.0 的探索与实践》一文。

1.1.2 OCTO 数据中心业务介绍

OCTO 数据中心为业务提供了立体化的数字驱动服务治理能力,提供了多维度的精确时延 TP(Top Percent,分位数,最高支持 6 个 9)、QPS、成功率等一系列核心指标,粒度方面支持秒级、分钟级、小时级、天级,检索维度支持多种复杂查询(如指定调用端 IP + 服务端各接口的指标,指定主机 + 接口的指标等)。这些功能有效地帮助开发人员在复杂的分布式调用关系拓扑内出现异常时,能快速定位到问题,也有助于研发人员全方位掌控系统的稳定性状况。


目前 Watt 承载日均超万亿条数据的 10 余个维度精确准实时统计。而伴随着数据量的迅猛增长,其整个系统架构也经历了全面的技术演进。

1.1.3 OCTO 原架构介绍

OCTO 计算引擎在重构之前,也面临诸多的问题,其原始架构设计如下:



  1. 采集层 :每个业务应用实例部署一个采集代理,代理通过将采集数据用批量 RPC 的方式发送给路由节点。

  2. 路由层 :每个路由节点随机收到各服务的数据后,将同一服务的所有数据,用类似 IP 直连的方式通过 RPC 发送到计算层的同一个计算节点。同服务数据汇总到同计算节点才能进行特定服务各个维度的聚合计算。

  3. 计算层 :每个计算节点采用 Akka 模型,节点同时负责分钟、小时、天粒度的数据计算集。每个计算集里面又有 10 个子计算 actor,每个子计算 actor 对应的是一个维度。采用“先计算指标,再存储数据”的准实时模式。

  4. 存储层 :准实时数据使用 HBase 存储,元数据及较大数据采用 KV 存储(美团内部系统 Cellar)及 MySQL 存储。

1.2 问题、目标与挑战

1.2.1 原架构面临的问题

  1. 计算节点有状态,异常无法自动化迁移 。计算层部署的每个节点平均负责 200+服务的统计。一个节点 OOM 或宕机时,其管理的 200 个服务的数据会丢失或波动,报警等依托数据的治理功能也会异常。此外计算节点 OOM 时也不宜自动迁移受影响的服务,需人工介入处理(异常的原因可能是计算节点无法承载涌入的数据量,简单的迁移易引发“雪崩”),每周投入的运维时间近 20 小时。

  2. 系统不支持水平扩展 。计算节点的压力由其管理的服务调用量、服务内维度复杂度等因素决定。大体量的服务需单独分配高配机器,业务数据膨胀计算节点能力不匹配时,只能替换更高性能的机器。

  3. 系统整体稳定性不高 。数据传输采用 RPC,单计算节点响应慢时,易拖垮所有路由层的节点并引发系统“雪崩”。

  4. 热点及数据倾斜明显,策略管理复杂 。按服务划分热点明显,存在一个服务数据量比整个计算节点 200 个服务总数多的情况,部分机器的 CPU 利用率不到 10%,部分利用率在 90%+。改变路由策略易引发新的热点机器,大体量服务数据增长时需要纵向扩容解决。旧架构时人工维护 160 余个大服务到计算节点的映射关系供路由层使用。


旧架构日承载数据量约 3000 亿,受上述缺陷影响,系统会频繁出现告警丢失、误告警、数据不准、数据延迟几小时、服务发布后 10 分钟后才能看到流量等多种问题。此外,数据体量大的服务也不支持部分二级维度的数据统计。

1.2.2 新架构设计的目标

基于上述问题总结与分析,我们新架构整体的目标如下:


  1. 高吞吐、高度扩展能力 。具备 20 倍+的水平扩展能力,支持日 10 万亿数据的处理能力。

  2. 数据高度精确 。解决节点宕机后自愈、解决数据丢失问题。

  3. 高可靠、高可用 。无计算单点,所有计算节点无状态;1/3 计算节点宕机无影响;具备削峰能力。

  4. 延时低 。秒级指标延迟 TP99<10s;分钟指标延迟 TP99<2min。

1.2.3 新架构面临的挑战

在日计算量万亿级别的体量下,实现上述挑战如下:


  1. 数据倾斜明显的海量数据,数据指标的维度多、指标多、时间窗口多,服务间体量差异达百万倍。

  2. TP 分位数长尾数据是衡量系统稳定性最核心的指标,所有数据要求非采样拟合,实现多维度下精确的分布式 TP 数据。

  3. 架构具备高稳定性,1/3 节点宕机不需人工介入。

  4. 每年数据膨胀至 2.4 倍+,计算能力及吞吐能力必须支持水平扩展。

  5. TP 数据是衡量服务最核心的指标之一,但在万亿规模下,精确的准实时多维度分布式 TP 数据是一个难题,原因详细解释下:


常规的拆分计算后聚合是无法计算精确 TP 数据的,如将一个服务按 IP(一般按 IP 划分数据比较均匀)划分到 3 个子计算节点计算后汇总,会面临如下问题:


  • 假设计算得出 IP1 的 TP99 是 100ms、QPS 为 50;IP2 的 TP99 是 10ms、QPS 为 50;IP3 的 TP99 是 1ms,QPS 为 50。那么该服务整体 TP99 是(100ms x 50 + 10ms x 50 + 1ms x 50)/ (50 + 50 + 50) = 37ms 吗?并非如此,该服务的真实 TP99 可能是 100ms,在没有全量样本情况下无法保证准确的 TP 值。

  • 假设不需要服务全局精确的时延 TP 数据,也不可以忽略该问题。按上述方式拆分并合并后,服务按接口维度计算的 TP 数据也失去了准确性。进一步说,只要不包含 IP 查询条件的所有 TP 数据都失真了。分位数这类必须建立在全局样本之上才能有正确计算的统计值。

二、计算引擎技术设计解析

2.1 方案选型

大数据计算应用往往基于实时或离线计算技术体系建设,但 Flink、Spark、OLAP 等技术栈在日超万亿级别量级下,支持复杂维度的准实时精确 TP 计算,对资源的消耗非常较大,总结如下:


2.2 系统设计思路

  1. 解决稳定性问题,思路是(1)将计算节点无状态化(2)基于心跳机制自动剔除异常节点并由新节点承载任务(3)消息队列削峰。

  2. 解决海量数据计算问题,思路是(1)在线 &离线计算隔离,两者的公共子计算前置只计算一次(2)高并发高吞吐能力设计(3)理论无上限的水平扩展能力设计。

  3. 解决热点问题,思路是(1)优化计算量分配算法,如均衡 Hash(2)理论无上限的水平扩展能力设计。

  4. 解决水平扩展问题,思路(1)是将单节点无法承载的计算模式改为局部分布式子计算并汇总,但这种方式可能会对数据准确性造成较大影响,数据统计领域精确的分布式分位数才是最难问题,另外多维条件组织对分布式改造也相当不利。(备注:其中在 1.2.3 第五条有详细的解释)

  5. 解决海量数据分布式多维精确 TP 计算,采用局部分布式计算,然后基于拓扑树组织数据计算流,在前置的计算结果精度不丢失的前提下,多阶段逐级降维得到所有的计算结果。

2.3 技术方案详细解析

2.3.1 数据流解析

系统根据待统计的维度构建了一棵递推拓扑树,如下图所示。其中黄色的部分代表消息队列(每个矩形代表一个 topic),绿色部分代表一个计算子集群(消费前置 topic 多个 partition,统计自己负责维度的数据指标并存储,同时聚合压缩向后继续发)。除“原始采集数据 topic 外”,其他 topic 和 consumer 所在维度对应数据的检索条件(如标红二级 topic :主机+接口,代表同时指定主机和接口的指标查询数据),红色箭头代表数据流向。


拓扑树形结构的各个子集群所对应的维度标识集合,必为其父计算集群对应维度标识集合的真子集(如下图最上面链路,“主机+接口+远程服务”3 个维度一定包含“主机+接口”两个维度。“主机+接口”两个维度包含“主机”维度)。集群间数据传输,采用批量聚合压缩后在消息队列媒介上通信完成,在计算过程中实现降维。


2.3.2 计算模式解析

下面详细介绍数据拓扑树中分布式子集群的计算模式:


首先,维度值相同的所有数据会在本层级集群内落到同一计算节点。每个计算子集群中的各计算节点,从消息队列消费得到数据并按自身维度进行聚合(前置集群已经按当前集群维度指定分发,所以聚合率很高),得到若干计数卡表(计数卡表即指定维度的时延、错误数等指标与具体计数的映射 Map)。


其次,将聚合后的计数卡表与现有的相同维度合并计算,并在时间窗口存储指标。


若计算集群有后续的子计算集群,则基于后继集群的目标维度,根据目标维度属性做散列计算,并将相同散列码的计数卡表聚合压缩后发到后继 partition。


离线的天级计算复用了三级维度、二级维度的多项结果,各环节前面计算的结果为后面多个计算集群复用,任何一个服务的数据都是在分布式计算。此外,整个计算过程中维护着技术卡表的映射关系,对于 TP 数据来说就是精确计算的,不会失真。


整个计算过程中,前置计算结果会被多个直接及间接后续子计算复用(如三级聚合计算对二级和一级都是有效的),在很大程度上减少了计算量。


2.3.3 关键技术总结

1. 高吞吐 & 扩展性关键设计


  • 去计算热点:组织多级散列数据流,逐级降维。

  • 降计算量:前置子计算结果复用,分布式多路归并。

  • 降网络 IO,磁盘 IO:优化 PB 序列化算法,自管理 MQ 批量。

  • 去存储热点:消除 HBase Rowkey 热点。

  • 无锁处理:自研线程分桶的流批处理模型,全局无锁。

  • 全环节水平扩展:计算、传输、存储均水平扩展。


2. 系统高可靠、低运维、数据准确性高于 5 个 9 关键设计


  • 无状态化 + 快速自愈:节点无状态化,宕机秒级感知自愈。

  • 异常实时感知:异常节点通过心跳摘除,异常数据迁移回溯。

  • 故障隔离容灾:各维度独立隔离故障范围;多机房容灾。

  • 逐级降维过程中数据不失真,精确的 TP 计算模式。


3. 提升实时性关键设计


  • 流式拓扑模型,分布式子计算结果复用,计算量逐级递减。

  • 无锁处理:自研线程分桶的流批处理模型,全局无锁。

  • 异常实时监测自愈:计算节点异常时迅速 Rebalance,及时自愈。

  • 秒级计算流独立,内存存储。

三、优化效果

  1. 目前日均处理数据量超万亿,系统可支撑日 10 万亿+量级并具备良好的扩展能力;秒峰值可处理 5 亿+数据;单服务日吞吐上限提升 1000 倍+,单服务可以支撑 5000 亿数据计算。

  2. 最大时延从 4 小时+降低到 2min-,秒级指标时延 TP99 达到 6s;平均时延从 4.7 分+降低到 1.5 分-,秒级指标平均时延 6s。

  3. 上线后集群未发生雪崩,同时宕机 1/3 实例 2 秒内自动化自愈。

  4. 支持多维度的准实时精确 TP 计算,最高支持到 TP 6 个 9;支持所有服务所有维度统计。

  5. 千余节点集群运维投入从周 20 小时+降低至 10 分以下。

四、总结

本文提供了一种日均超万亿规模下多维度精确 TP 计算的准实时数据计算引擎方案,适用于在超大规模数字化治理体系建设中,解决扩展性、实时性、精确性、稳定性、运维成本等问题。美团基础研发平台欢迎业界同行一起交流、探讨。


作者介绍


继东,业祥,成达,张昀,均来自美团基础架构服务治理团队,研发工程师。


本文转载自公众号美团技术团队(ID:meituantech)。


原文链接


https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651751600&idx=2&sn=fc68d44065ede84318a95dd874776b95&chksm=bd125dfd8a65d4ebddd3a80bc24b01468b2dcffaaf03e95da8bd4b30b2863f8dc0f3b6583436&scene=27#wechat_redirect


2020-05-05 10:052262

评论

发布
暂无评论
发现更多内容

python 同时迭代多个序列,还没吃透内存缓存LruCache实现原理的看这篇文章

程序媛可鸥

Python 程序员 面试

Python代码报错看不懂?记住这些报错提示单词轻松解决bug,2021年Python开发陷入饱和,

程序媛可鸥

Python 程序员 面试

从硬件到软件,教你从零搭建智慧农业大脑

华为云开发者联盟

物联网 智慧农业 华为云IoT 小熊开发板 STM32L431芯片

python3 基础小练习: 判断闰年,2021最新Python算法相关面试大

程序媛可鸥

Python 程序员 面试

python中把列表中的字符串转成整型的3种方法,收割快手,字节,百度,美团的Offer之旅

程序媛可鸥

Python 程序员 面试

python回调函数之获取jenkins构建结果,Python编程零基础

程序媛可鸥

Python 程序员 面试

2021年【大学生Python学习】社区&&小博主,2021最新大厂高频微服务面试总结

程序媛可鸥

Python 程序员 面试

jQuery入门到精通学习教程,收藏我这篇就够了,Alibaba高并发业务实战文档

程序媛可鸥

Python 程序员 面试

龙蜥开发者说:从入坑到入门 | 第 2 期

OpenAnolis小助手

开源 龙蜥社区 开发者说 技术的力量

Python“鉴黄”小程序,我离职后面试收割小米等大厂offer

程序媛可鸥

Python 程序员 面试

Python中return和yield的区别,2021年Python笔试题总结

程序媛可鸥

Python 程序员 面试

大疆被制裁,请马上卸载postman!

Liam

程序员 Postman 开发工具 API swagger

阿里巴巴副总裁陈丽娟:我对阿里云产品生态的思考 | 云原生加速器观点

阿里巴巴云原生

Python GUI编程:关于 tkinter 怎么才能写出更好看的界面,华为架构师深入讲解Python开发

程序媛可鸥

程序员

Python 实现二叉树前序,中序,后序,零基础也能看得懂

程序媛可鸥

Python 程序员 面试

python函数练习题,万字长文

程序媛可鸥

Python 程序员 面试

飞桨助力动车3C车载智能识别,为动车组运行保驾护航

百度大脑

使用MASA.Blazor写一个标准的查询表格页

MASA技术团队

python DataFrame数据合并 merge()、concat()方法,拿下我人生中第7个Offer

程序媛可鸥

Python 程序员 面试

nginx5种负载策略的设置方法,看完直接怼产品经理

程序媛可鸥

Python 程序员 面试

浅谈NIO和Epoll实现原理

Linux服务器开发

网络编程 epoll Linux服务器开发 Linux后台开发 网络io

2022年中国在线音乐市场年度综合分析

易观分析

向工程腐化开炮|动态链接库so治理

阿里巴巴终端技术

android 动态链接库

Flutter 图片库高燃新登场

阿里巴巴终端技术

flutter

WorkPlus移动平台 | 如何建设“智慧校园”新样态?

BeeWorks

Python中用tuple作为key,写的太详细了

程序媛可鸥

Python 程序员 面试

Python 开发编码规范,阿里面试100%会问到的JVM

程序媛可鸥

Python 程序员 面试

python3的变量作用域规则和nonlocal关键字,Python面试及答案

程序媛可鸥

Python 程序员 面试

移动平台WorkPlus助力医院智慧信息化建设

BeeWorks

2022年中小企业数据安全如何保障?对比华为云与其他云计算大厂,15分钟的字节跳动视频面试

程序媛可鸥

Python 程序员 面试

Kafka 常用命令总结,高级Python面试题

程序媛可鸥

Python 程序员 面试

美团OCTO万亿级数据中心计算引擎技术解析_架构_继东_InfoQ精选文章