叔同(丁宇),阿里巴巴资深技术专家,8次参与双11作战,阿里高可用架构、双11稳定性负责人,阿里容器、调度、集群管理、运维技术负责人。
叔同:
双11推动了阿里技术的进步,它有哪些挑战?
阿里巴巴9年双11经历下来,交易额增长了280倍、交易峰值增长800多倍、系统数呈现爆发式增长。系统在支撑双11过程中的复杂度和支撑难度以指数级形式上升。双11的峰值的本质是用有限的成本最大化的提升用户体验和集群吞吐能力,用合理的代价解决峰值。面对增长如何发挥规模效应,持续降低单笔交易成本以提升峰值吞吐能力,为用户提供丝般顺滑的浏览和购物体验,是极大的挑战。
随着分布式架构、异地多活、限流降级、全链路压测等技术的突破,扩展性和稳定性问题得到了很好的解决。系统架构伴随9年双11的发展一代一代向后演进,每一年都有很大的提高。08年开始阿里巴巴着手系统从由集中式架构变成分布可扩展架构,其中沉淀了大量互联网中间件技术。13年通过异地多活的架构演进,把阿里完整的交易单元部署到全国各个城市站点,实现了地域级水平扩展。这两种技术的叠加解决了整个双11扩展性问题。
由于分布式架构的演进,系统稳定性问题开始凸显、系统复杂度急剧上升、多个系统间协同出现问题。我们建设了限流降级、预案体系、线上管理管控体系。在2013年时做了双11备战的核心武器——全链路压测。它能对整个系统的依赖关系里跟双11有关的部分进行完整的用户级的线上大流量真实场景读写压测,使系统提前经历几次“双11”,验证整个线上生产环境处理能力,及时发现问题并修复。
云化架构的演进
上图为阿里业务六个月的峰值数据表。表中两个最大的峰值依次代表双11和双12的交易峰值,其他较小的峰值是日常交易峰值,红线代表日常准备系统服务器资源的处理能力。
统一调度体系
始于2011年建设的Sigma是服务阿里巴巴在线业务的调度系统,围绕Sigma有一整套以调度为中心的集群管理体系。
整个架构是面向终态的设计理念,请求进来后把数据存储到持久化存储,调度器识别调度需求分配资源。系统整体的协调性和最终一致性是非常好的。我们在2011年开始做调度系统,2016年用Go语言重写,2017年兼容了kubernetesAPI,希望和开源社区共同建设和发展。
阿里巴巴在2014年开始推动混部架构,目前已在阿里巴巴内部大规模部署。在线服务属于长生命周期、规则策略复杂性高、时延敏感类任务。而计算任务生命周期短、调度要求大并发高吞吐、任务有不同的优先级、对时延不敏感。基于这两种调度的本质诉求的不同,所以我们在混合部署的架构上把两种调度并行处理,即一台NC物理机上可以既有Sigma调度又有Fuxi调度。Sigma调度是通过SigmaAgent调用OCI标准的RunC、RunV、RunLXC三种标准来启动Pouch容器。Fuxi也在这台NC物理机上抢占资源,启动自己的计算任务。所有在线任务都在Pouch容器上,它负责把服务器资源进行分配切割通过调度把在线任务放进去,离线任务填入其空白区,保证物理机资源利用达到饱和,这样就完成了两种任务的混合部署。
混部的关键技术
内核资源隔离上的关键技术
在线集群管理上的关键技术
计算任务调度+ODPS上的关键技术
有弹性内存分时复用、动态内存超卖、无损降级与有损降级三个关键混部技术。动态内存超卖指内存是可以超卖的,如果有在线任务要用,就快速归还。有损降级和无损降级的策略指的是对影响在可接受范围内的波动干扰进行无损降级,不增加新任务,慢慢把它降下来,对影响大的干扰直接杀掉任务属于有损降级。利用零层管控,管理每台NC上的在线任务和离线任务之间的关系。
通过分时复用,达到进一步提升资源效率的效果。上图中的曲线是我们某个应用的流量曲线。它是非常有规律的,左边代表晚上波谷期,右边代表白天处于波峰期。正常的混部指占用图中蓝色阴影部分的资源把利用率提高到40%,弹性分时复用技术是指对应用画像找到应用流量波谷期,对应用缩容,大量释放内存和CPU,调度更多计算任务。通过这项技术,把平均CPU利用率提升到60%以上。
在双11时,如何利用计算任务集群混合部署助力双11降低成本?
Pouch容器和容器化的进展
全面容器化是提升运维能力、拉通运维差异的关键的技术。首先介绍一下阿里巴巴内部容器技术产品Pouch。它从2011年开始建设和上线,基于LXC,在2015年初开始吸收Docker镜像功能和很多标准。阿里巴巴的容器非常有特点,它结合了阿里内核,大幅度提高了它的隔离性,目前以百万级规模部署于阿里集团内部。
Pouch的结构是比较清晰的,Pouchd如何跟kubelet、swarm、Sigma交互。在存储上跟业界一起建设了CSI标准。支持分布式存储如ceph、pangu。在网络上使用lxcfs增强隔离性,支持多种标准。
目前Pouch化覆盖了阿里的大部分BU,2017年达到百万级部署,在线业务达到100%容器化,计算任务也开始容器化,它拉平了异构平台的运维成本。覆盖运行模式,多种编程语言,DevOps体系。Pouch覆盖了阿里几乎所有业务板块如蚂蚁、交易、中间件等等。
在存储计算分离上,由于有状态任务需要复制状态,会严重影响分时复用运维自动化程度和调度效率。我们在云化过程中实现了存储计算分离技术。由于计算集群和在线服务不在一个机房,计算任务的数据需要先缓存到在线业务的集群上,所以我们搭了一个缓存桥头堡,然后进行计算。随着机房结构的调整和网络的优化,我们开始对在线计算同时进行存储计算分离。目前已经实现去桥头堡方案,不受网络长传带宽的限制,减少了大集群跨网络核心对穿流量,提升了调度的灵活性。存储计算分离技术不仅可以使用阿里盘古技术,同时也兼容业界这一套容器上的存储标准,这也是阿里实现云化架构的非常关键的技术。在网络架构的升级上,我们大规模使用25G网络,在公有云上使用VPC,overlay能云上、云下和数据集群整个网络打通,这也是阿里大规模混合部署的前提。
云化架构和双11未来技术路线
双11云化架构运维体系介绍
后期我们会通过阿里云平台把内部储备的技术对外输出。这套技术是内部调度容器运维领域的优势技术,具备调度、编排、应用管理、监控、混合云的快上快下构建、弹性伸缩、混合部署的能力,同时兼容KubernetesAPI,提供企业级容器应用管理能力,提高企业IT效率,进而提高企业竞争力和创新效率。混合部署和自动化混合云构建技术经过双11规模验证,成为一个非常成熟稳定的技术体系。在云上,我们和ACS、EDAS、EMR合作,提高了产品的完整性。