伏羲(Fuxi)是十年前创立飞天平台时的三大服务之一(分布式存储 Pangu,分布式计算 ODPS,分布式调度 Fuxi),当时的设计初衷是为了解决大规模分布式资源的调度问题(本质上是多目标的最优匹配问题)。
随着阿里经济体和阿里云业务需求(尤其是双十一)的不断丰富,伏羲的内涵也不断扩大,从单一的资源调度器(对标开源系统的YARN)扩展成大数据的核心调度服务,覆盖数据调度(Data Placement)、资源调度(Resouce Management)、计算调度(Application Manager)、和本地微(自治)调度等多个领域,并在每一个细分领域致力于打造超越业界主流的差异化能力。
过去十年来,伏羲在技术能力上每年都有新的进展和突破,2013年5K,2015年Sortbenchmark世界冠军,2017年超大规模离在/在离线混部能力,2019年的 Yugong 发布并且论文被VLDB2019接受等。随着 Fuxi 2.0 首次亮相2019双11,今年飞天大数据平台在混部侧支持和基线保障2个方面均顺利完成了目标。其中,混部支持了双十一 60%在线交易洪峰的流量,超大规模混部调度符合预期。在基线保障方面,单日数据处理 970PB,较去年增长超过60%。在千万级别的作业上,不需要用户额外调优,基本做到了无人工干预的系统自动化。
新的挑战
随着业务和数据的持续高速增长,MaxCompute 双十一的作业量和计算数据量每年的增速都保持在60%以上 。
2019双十一,MaxCompute 日计算数据量规模已接近EB级,作业量也到了千万量级,在如此大规模和资源紧张的情况下,要确保双十一稳定运行,所有重要基线作业按时产出压力相当之大。
在双十一独特的大促场景下,2019双11的挑战主要来自以下几个方面:
- 超大规模计算场景下,以及资源紧张的情况下,如何进一步提升平台的整体性能,来应对业务的持续高速增长。
- 双十一会给MaxCompute带来全方面超压力的极端场景,如几亿条的热点key、上千倍的数据膨胀等,这对集群磁盘IO的稳定性、数据文件读写性能、长尾作业重跑等各方面都是挑战。
- 近千万量级作业的规模下,如何做到敏捷、可靠、高效的分布式作业调度执行。
- 以及对高优先级作业(如重要业务基线)的资源保障手段。
- 今年也是云上集群首次参与双十一,并且开始支持混部。
如何应对挑战
为了应对上述挑战,与往年相比,除了常规的HBO等调整之外,飞天大数据平台加速了过去1-2年中技术积累成果的上线,尤其是 Fuxi 2.0 首次亮相双十一,最终在单日任务量近千万、单日计算量近千PB的压力下,保障了基线全部按时产出。
- 在平台性能优化方面,对于挑战#1和#2,StreamlineX + Shuffle Service 根据实时数据特征自动智能化匹配高效的处理模式和算法,挖掘硬件特性深度优化IO,内存,CPU等处理效率,在减少资源使用的同时,让全量SQL平均处理速度提升将近20%,出错重试率下降至原来的几十分之一,大大提了升MaxCompute 平台整体效能。
- 在分布式作业调度执行方面,对于挑战#3,DAG 2.0 提供了更敏捷的调度执行能力,和全面去阻塞能力,能为大规模的MR作业带来近50%的性能提升。同时DAG动态框架的升级,也为分布式作业的调度执行带来了更灵活的动态能力,能根据数据的特点进行作业执行过程中的动态调整。
- 在资源保障方面,为应对挑战#4,Fuxi 对高优先级作业 (主要是高优先级作业)采取了更严格、更细粒度的资源保障措施,如资源调度的交互式抢占功能,和作业优先级保障管控等。目前线上最高优先级的作业基本能在90s内抢占到资源。
- 其他如业务调优支持等:如业务数据压测配合,与作业调优等。
StreamlineX + Shuffle Service
挑战
上面提到今年双十一数据量翻倍接近EB级,作业量接近千万,整体资源使用也比较紧张,通过以往经验分析,双十一影响最关键的模块就是Streamline (在其他数据处理引擎也被称为Shuffle或Exchange),各种极端场景层出不穷,并发度超过5万以上的Task,多达几亿条的热点Key,单Worker数据膨胀上千倍等全方位覆盖的超压力数据场景,都将极大影响Streamline模块的稳定运行,从而对集群磁盘IO的稳定性,数据文件读写性能,机器资源竞抢性能,长尾Worker PVC(Pipe Version Control,提供了某些特定情况下作业失败重跑的机制)重跑等各方面产生影响,任何一个状况没有得到及时的自动化解决,都有可能导致基线作业破线引发故障。
Streamline 与 Shuffle Service 概述
- Streamline
在其他OLAP或MPP系统中,也有类似组件被称为Shuffle或Exchange,在MaxCompute SQL中该组件涉及的功能更加完善,性能更优,主要包含但不限于分布式运行的Task之间数据序列化,压缩,读写传输,分组合并,排序等操作。SQL中一些耗时算子的分布式实现基本都需要用到这个模块,比如join,groupby,win