阿里巴巴 Sigma 调度和集群管理系统架构详解

4,577 阅读11分钟

划重点

阿里巴巴 9 年双 11 经历下来,交易额增长了 280 倍、交易峰值增长 800 多倍、系统数呈现爆发式增长。系统在支撑双 11 过程中的复杂度和支撑难度以指数级形式上升。双 11 峰值的本质是用有限的成本最大化提升用户体验和集群吞吐能力,用合理的代价解决峰值。

本文将从阿里巴巴统一调度体系、混部架构、云化架构三个方面详解阿里是如何支撑如此庞大的系统。


统一调度体系

始于 2011 年建设的 Sigma 是服务阿里巴巴在线业务的调度系统,围绕 Sigma 有一整套以调度为中心的集群管理体系。

image.png | center | 684x385

Sigma 有 Alikenel、SigmaSlave、SigmaMaster 三层大脑联动协作,Alikenel 部署在每一台物理机上,对内核进行增强,在资源分配、时间片分配上进行灵活的按优先级和策略调整,对任务的时延,任务时间片的抢占、不合理抢占的驱逐都能通过上层的规则配置自行决策。SigmaSlave 可以在本机进行容器 CPU 分配、应急场景处理等。通过本机 Slave 对时延敏感任务的干扰快速做出决策和响应,避免因全局决策处理时间长带来的业务损失。SigmaMaster 是一个最强的中心大脑,可以统揽全局,为大量物理机的容器部署进行资源调度分配和算法优化决策。

整个架构是面向终态的设计理念,收到请求后把数据存储到持久化存储层,调度器识别调度需求分配资源位置,Slave识别状态变化推进本地分配部署。系统整体的协调性和最终一致性非常好。我们在 2011 年开始做调度系统,2016 年用 Go 语言重写,2017 年兼容了 kubernetes API,希望结合生态的力量,共同建设和发展。

混部架构

阿里巴巴在 2014 年开始推动混部架构,目前已在阿里巴巴内部大规模部署。在线服务属于长生命周期、规则策略复杂性高、时延敏感类任务。而计算任务生命周期短、调度要求大并发高吞吐、任务有不同的优先级、对时延不敏感。基于这两种调度的本质诉求的不同,我们在混合部署的架构上把两种调度并行处理,即一台物理机上可以既有 Sigma 调度又有 Fuxi 调度,实现基础环境统一。Sigma 调度是通过 SigmaAgent 启动 PouchContainer 容器。Fuxi 也在这台物理机上抢占资源,启动自己的计算任务。所有在线任务都在 PouchContainer 容器上,它负责把服务器资源进行分配并运行在线任务,离线任务填入其空白区,保证物理机资源利用达到饱和,这样就完成了两种任务的混合部署。

混部的关键技术

内核资源隔离上的关键技术

  • 在 CPU HT 资源隔离上,做了 Noise Clean 内核特性,解决在 / 离线超线程资源争抢问题。
  • 在 CPU 调度隔离上,CFS 基础上增加 Task Preempt 特性,提高在线任务调度优先级。
  • 在 CPU 缓存隔离上,通过 CAT,实现在、离线三级缓存 (LLC) 通道隔离 (Broadwell 及以上)。
  • 在内存隔离上,拥有 CGroup 隔离 /OOM 优先级;Bandwidth Control 减少离线配额实现带宽隔离。
  • 在内存弹性上,在内存不增加的情况下,提高混部效果,在线闲置时离线突破 memcg limit;需要内存时,离线及时释放。
  • 在网络 QoS 隔离上,管控打标为金牌、在线打标为银牌、离线打标为铜牌,分级保障带宽。

在线集群管理上的关键技术

  • 对应用的内存、CPU、网络、磁盘和网络 I/O 容量进行画像,知道它的特征、资源规格需求,不同的时间对资源真实使用情况,然后对整体规格和时间进行相关性分析,进行整体调度优化。
  • 亲和互斥和任务优先级的分配,哪种应用放在一起使整体计算能力比较少、吞吐能力比较高,这是存在一定亲和性。
  • 不同的场景有不同的策略,双 11 的策略是稳定优先,稳定性优先代表采用平铺策略,把所有的资源用尽,让资源层全部达到最低水位。日常场景需要利用率优先,“利用率优先” 指让已经用掉的资源达到最高水位,空出大量完整资源做规模化的计算。
  • 应用做到自动收缩、垂直伸缩、分时复用。
  • 整个站点的快速扩容缩容,弹性内存技术等。
    image.png | center | 684x385

混合部署指将计算任务引入在线服务集群以提升日常资源效率。把离线任务引入后,CPU 平均利用率从 10% 上升到 40% 以上,同时时延敏感类服务的延迟影响小于 5%,属于完全可接受范围。目前我们整个混部集群已达到数千台的规模,经过了交易核心链路双 11 大促的验证。这项优化可以为日常节省超过 30% 的服务器。今年会扩大 10 倍的部署规模,取得规模化收益。

image.png | center | 684x385

通过分时复用,达到进一步提升资源效率的效果。上图中的曲线是我们某个应用的流量曲线。它是非常有规律的 , 左边代表晚上波谷期,右边代表白天处于波峰期。正常的混部指占用图中蓝色阴影部分的资源把利用率提高到 40%,弹性分时复用技术是指对应用画像找到应用流量波谷期,对应用缩容,大量释放内存和 CPU,调度更多计算任务。通过这项技术,把平均 CPU 利用率提升到 60% 以上。

PouchContainer 容器和容器化的进展

全面容器化是提升运维能力、统一调度的关键技术。首先介绍一下阿里巴巴内部容器产品 PouchContainre。它从 2011 年开始建设和上线,基于 LXC,在 2015 年初开始吸收 Docker 镜像功能和并兼容容器标准。阿里巴巴的容器非常有特点,它结合了阿里内核,大幅度提高了安全隔离性,目前以百万级规模部署于阿里集团内部。

再来了解一下 PouchContainer 的发展路线。以前用的是虚拟机的虚拟化技术,虚拟化技术过渡到容器技术面临着很多运维体系的挑战。运维体系的迁移有很大的技术成本。我们做到了阿里内部运维和应用视角无缝迁移,有独立 IP,能够 ssh 登录,有独立的文件系统和资源隔离使用量可见性。2015 年以后,阿里巴巴引入容器标准,形成了新的一套容器 PouchContainer 并集成到整个运维体系。

PouchContainer 定位示意图

PouchContainer 的隔离性非常好,是富容器,可以登录,看到容器内进程自己占的资源量,有多少进程,进程挂了容器是不会挂的,可以运行很多的进程。兼容性很好, 旧版本内核也支持,对利旧很有帮助。同时经过了百万级容器部署的规模化验证,我们研发了一套 P2P 镜像分发机制,大幅度提升分发效率。同时兼容了业界更多标准,推动标准的建设,支持 RunC 、RunV 、RunLXC 等,经过百万级容器规模的考验,稳定高效,是企业全面容器化的最佳选择。

architecture.png | center | 748x421

PouchContainer 架构图

PouchContainer 的结构是比较清晰的,Pouchd 如何跟 kubelet、swarm、Sigma 交互。在存储上跟业界一起建设了 CSI 标准。支持分布式存储如 ceph、pangu。在网络上使用 lxcfs 增强隔离性,支持多种标准。

目前 PouchContainer 化覆盖了阿里的大部分 BU,2017 年达到百万级部署,在线业务达到 100% 容器化,计算任务也开始容器化,它拉平了异构平台的运维成本。覆盖运行模式,多种编程语言,DevOps 体系。PouchContainer 覆盖了阿里几乎所有业务板块如蚂蚁、交易、中间件等等。

PouchContainer 于 2017 年 10 月 10 号宣布开源,11 月 19 日正式开源,计划在 2018 年 03 月发布第一个大版本。我们希望通过 PouchContainer 的开源推动容器领域的发展和标准的成熟,给业界提供差异化有竞争力的技术选择。不仅方便传统 IT 企业利旧,老的基础设施也同样能够享受云源生技术带来的好处和优势,而且方便新的 IT 企业享受规模化稳定性和多标准兼容性带来的优势。

PouchContainer 开源地址:github.com/alibaba/pou…

云化架构

image.png | center | 684x385

双 11 云化架构运维体系

云化架构运维体系

将集群分为在线任务集群、计算任务集群和 ECS 集群。资源管理,单机运维、状况管理,命令通道、监控报警这类基础运维体系已经打通。在双 11 场景中,我们会在云上划出一个独立的区域与其他场景互通。在互通区域,Sigma 调度可以到计算集群服务器里申请资源,生产 Pouch 容器,也可以到 cloud open API 去申请 ECS,生产出容器的资源。在日常的场景中 Fuxi 可以到 sigma 里申请资源,创建需要的容器。

在双 11 场景中,利用规模化运维系统在容器上构建大量在线服务,包括业务层的混合部署,每个集群都有 online service 和有状态服务及大数据分析。阿里云的独占集群也部署了在线服务和有状态的数据服务,做到了 datacenter as a computer,多个数据中心像一台计算机一样来管理,实现跨多个不同的平台来调度业务的发展所需要的资源。构建了混合云用极低的成本拿到服务器,解决有没有的问题。

先有服务器规模,再通过分时复用和混合部署来大幅度提升资源利用率。真正实现了弹性资源平滑复用任务灵活混合部署,用最少的服务器最短的时间和用最优效率完成业务容量目标。通过这一套云化架构,我们在双 11 实现了新增 IT 成本降低 50%,使日常 IT 成本下降 30%,带来了集群管理和调度领域的技术价值爆发,也说明容器、编排调度技术的流行是一种必然。

阿里调度系统团队,致力于打造全球效率最优的调度和集群管理系统,通过企业级容器和容器平台建设最优云化解决方案。期待和业界同仁一起努力,降低整个行业的IT成本,加速企业的创新发展。

0120-叔同.png | center | 168x175.51807228915663

叔同(丁宇),阿里巴巴资深技术专家,8 次参与双 11 作战,阿里高可用架构、双 11 稳定性负责人,阿里容器、调度、集群管理、运维技术负责人。

阿里巴巴调度系统团队为阿里巴巴经济体提供调度、容器和集群管理基础设施,推动阿里巴巴全面云化效率成本最优,为阿里经济体和云业务提供充足的技术竞争力。致力于打造全球领先、效率最优的调度集群管理系统和高效稳定的企业级富容器引擎。

Pouch 容器团队为阿里巴巴经济体提供基础设施领域的容器技术,帮助阿里巴巴全面实现业务容器化,打好集团“云化”战略坚实的基础。团队致力于打造全球领先、高效稳定的企业级富容器引擎。

一个优秀的团队永远都在渴望人才的加入,如果你希望进入技术核心挑战计算机的极限,请加入我们;如果你希望和专注、优秀的人共事,请加入我们;如果你有一颗对优雅代码「执着」的内心,请加入我们!

以下岗位永久开放:Golang 工程师、Java 工程师、调度架构师、容器架构师、混部架构师、集群资源管理研发专家、容器 PaaS 平台技术专家、企业容器平台解决方案架构师等......

内推通道:xianshu.lj@alibaba-inc.com

开放职位介绍:alibaba.tupu360.com/social/inde…

关注 阿里系统软件技术 微信公众号获取更多信息