Who limits the resource efficiency of my datacenter: an analysis of Alibaba datacenter traces
这篇文章发在 IWQoS 2019,是包云岗老师团队的工作,是 Jing Guo 和 Zihao Chang 在阿里巴巴实习期间发表的文章。本文对阿里巴巴 2018 年公布的第二版开源数据进行了详细的分析,主要聚焦在数据中心资源使用效率上。
阿里巴巴在 2018 年 12 月公布了其第二版混部集群的开源数据,这版数据包含了4000+台机器的 8 天运行时数据,包括 4K 台机器、9K 个在线任务和 4M 个离线任务的静态和运行时数据。
需要注意的是,2017、2018 这两版数据,均是阿里巴巴内部私有云的集群数据,并不是阿里云的数据。
开源数据传送门:https://github.com/alibaba/clusterdata
论文传送门:https://dl.acm.org/citation.cfm?doid=3326285.3329074
本文对阿里巴巴 2018 年的公开数据集进行了详细的分析,从在线任务和离线任务资源分配方式的不同切入,揭示了三个 insight:
- 在阿里巴巴的混部集群中,内存似乎成为了新的瓶颈,限制了资源使用效率的进一步提升。
- 离线任务在阿里巴巴的混部集群中优先顺序低于延迟敏感型任务,同时具有相对较低的资源 QoS 要求,被限制了在混部集群的可调度时间、资源使用等,同时部分任务也出现了重调度等问题
- 在这版数据集中,90%以上的在线应用为 Java 应用,大量封装在虚拟机中的 JVM,使集群中资源管理更加复杂,同时进一步限制了资源使用效率。
建议对本文感兴趣的小伙伴可以阅读一下论文原文,以下内容只是论文中的一小部分。
阿里巴巴混部集群架构
看过这篇文章(《集群调度框架的架构演进过程》)的小伙伴应该了解到,目前的集群作业调度框架有几种主流形式:单体式、两层架构、共享状态、分散式(具体可参考以上文章)。
因为一些历史原因,阿里巴巴的混部集群中,为了将在线任务和离线任务混合在一起运行,他们没有重新设计一个调度器,而是使用了一种共享状态和两层调度相混合的调度框架。如下图所示,Sigma 负责调度集群内的在线任务,Fuxi 负责调度集群内的离线任务。因为本身这两个调度框架是独立的,但为了实现混部和统一在离线资源池的目的,使用了一个协调的方式来解决调度的问题。Level-0(零层)就扮演了这么一个协调的角色,它负责两个调度器之间的数据传输、通信等等,通过这种方式来将两个独立的资源池合并起来。Level1 中有两个调度器(Sigma 和 Fuxi),每个调度器的 Master 节点都可以看到整个统一资源池中机器节点的状态,每台机器上都有这两个调度器的 agent。同时在调度器的上一层(Level2)是各个不同的业务,如搜索、资料库、MaxCompute 等。
这种共享状态和两层调度相结合的调度框架,在 2017 与 2018 年两年的双十一都得到了成功的验证。