阿里经济体核心调度系统Fuxi( 二 )


2. 数据调度2.0 - 跨地域的数据调度
阿里巴巴在全球都建有数据中心 , 每个地区每天会产生一份当地的交易订单信息 , 存在就近的数据中心 。 北京的数据中心 , 每天会运行一个定时任务来统计当天全球所有的订单信息 , 需要从其他数据中心读取这些交易数据 。 当数据的产生和消费不在一个数据中心时 , 我们称之为跨数据中心数据依赖(下文简称跨中心依赖) 。
阿里经济体核心调度系统Fuxi
本文插图
图. 阿里巴巴全球数据中心
MaxCompute上每天运行着数以千万计的作业 , 处理EB级别的数据 。 这些计算和数据分布在全球的数据中心 , 复杂的业务依赖关系产生了大量的跨中心依赖 。 相比于数据中心内的网络 , 跨数据中心网络(尤其是跨域的网络)是非常昂贵的 , 同时具有带宽小、延迟高、稳定性低的特点 。 比如网络延迟 , 数据中心内部网络的网络延迟一般在100微秒以下 , 而跨地域的网络延迟则高达数十毫秒 , 相差百倍以上 。 因此 , 如何高效地将跨中心依赖转化为数据中心内部的数据依赖 , 减少跨数据中心网络带宽消耗 , 从而降低成本、提高系统效率 , 对MaxCompute这样超大规模计算平台而言 , 具有极其重要的意义 。
阿里经济体核心调度系统Fuxi
本文插图
图. MaxCompute平台数据及依赖增长趋势
为了解决这个问题 , 我们在数据中心上增加了一层调度层 , 用于在数据中心之间调度数据和计算 。 这层调度独立于数据中心内部的调度 , 目的是实现跨地域维度上存储冗余--计算均衡--长传带宽--性能最优之间的最佳平衡 。 这层调度层包括跨数据中心数据缓存、业务整体排布、作业粒度调度 。
首先是对访问频次高的数据进行跨数据中心缓存 , 在缓存空间有限的约束下 , 选择合适的数据进行换入换出 。 不同于其他缓存系统 , MaxCompute的数据(分区)以表的形式组织在一起 , 每张表每天产生一个或多个分区 , 作业访问数据也有一些特殊规律 , 比如一般访问的是连续分区、生成时间越新的分区访问概率越大 。
其次是业务的整体排布策略 。 数据和计算以业务为单位组织在一起(MaxCompute中称之为project) , 每个project被分配在一个数据中心 , 包括数据存储和计算作业 。 如果将project看做一个整体 , 可以根据作业对数据的依赖关系计算出project之间的相互依赖关系 。 如果能将有互相数据依赖的project放在一个数据中心 , 就可以减少跨中心依赖 。 但project间的依赖往往复杂且不断变化 , 很难有一劳永逸的排布策略 , 并且project排布需要对project进行整体迁移 , 周期较长 , 且需要消耗大量的带宽 。
最后 , 当project之间的互相依赖集中在极少数几个作业上 , 并且作业的输入数据量远大于输出数据量时 , 比起数据缓存和project整体迁移 , 更好的办法是将这些作业调度到数据所在的数据中心 , 再将作业的输出远程写回原数据中心 , 即作业粒度调度 。 如何在作业运行之前就预测到作业的输入输出数据量和资源消耗 , 另一方面当作业调度到remote数据中心后 , 如何保证作业运行不会变慢 , 不影响用户体验 , 这都是作业粒度调度要解决的问题 。
本质上 , 数据缓存、业务排布、作业粒度调度三者都在解同一个问题 , 即在跨地域多数据中心系统中减少跨中心依赖量、优化作业的data locality、减少网络带宽消耗 。
1.2.1 跨数据中心数据缓存策略
我们首次提出了跨地域、跨数据中心数据缓存这一概念 , 通过集群的存储换集群间带宽 , 在有限的冗余存储下 , 找到存储和带宽最佳的tradeoff 。 通过深入的分析MaxCompute的作业、数据的特点 , 我们设计了一种高效的算法 , 根据作业历史的workload、数据的大小和分布 , 自动进行缓存的换入换出 。


推荐阅读