12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的《2017阿里巴巴双11技术十二讲》顺利结束,集中为大家分享了2017双11背后的黑科技。本文是《阿里巴巴云化架构创新之路》演讲整理,主要讲解了双11的技术挑战与突破、云化架构演进的背景、统一调度和混部的挑战、Pouch容器和容器化的进展、双11的未来技术发展路线。内容如下。
分享嘉宾:
叔同(丁宇),阿里巴巴资深技术专家,8次参与双11作战,阿里高可用架构、双11稳定性负责人,阿里容器、调度、集群管理、运维技术负责人。
叔同:
双11推动了阿里技术的进步,它有哪些挑战?
互联网级规模,每天有数亿人在阿里网站上进行交易;
企业级复杂度,每完成一笔交易都需要数百个系统的服务支撑;
金融级的稳定性,每一笔交易都必须保证其完整性和正确性;
双11存在数十倍的业务峰值,要求系统绝对稳定。
阿里巴巴9年双11经历下来,交易额增长了280倍、交易峰值增长800多倍、系统数呈现爆发式增长。系统在支撑双11过程中的复杂度和支撑难度以指数级形式上升。双11的峰值的本质是用有限的成本最大化的提升用户体验和集群吞吐能力,用合理的代价解决峰值。面对增长如何发挥规模效应,持续降低单笔交易成本以提升峰值吞吐能力,为用户提供丝般顺滑的浏览和购物体验,是极大的挑战。
随着分布式架构、异地多活、限流降级、全链路压测等技术的突破,扩展性和稳定性问题得到了很好的解决。系统架构伴随9年双11的发展一代一代向后演进,每一年都有很大的提高。08年开始阿里巴巴着手系统从由集中式架构变成分布可扩展架构,其中沉淀了大量互联网中间件技术。13年通过异地多活的架构演进,把阿里完整的交易单元部署到全国各个城市站点,实现了地域级水平扩展。这两种技术的叠加解决了整个双11扩展性问题。
由于分布式架构的演进,系统稳定性问题开始凸显、系统复杂度急剧上升、多个系统间协同出现问题。我们建设了限流降级、预案体系、线上管理管控体系。在2013年时做了双11备战的核心武器——全链路压测。它能对整个系统的依赖关系里跟双11有关的部分进行完整的用户级的线上大流量真实场景读写压测,使系统提前经历几次“双11”,验证整个线上生产环境处理能力,及时发现问题并修复。
云化架构的演进
由于双11本身峰值增长很快,当我们做好了系统的稳定性后,发现硬件、时间、人力成本的消耗很大。成本挑战的出现推动我们解决IT成本的问题,即服务器资源问题。首先来看云化架构演进背景。
上图为阿里业务六个月的峰值数据表。表中两个最大的峰值依次代表双11和双12的交易峰值,其他较小的峰值是日常交易峰值,红线代表日常准备系统服务器资源的处理能力。
在13年之前,我们采购大量的服务器资源以支撑双11流量高峰。高峰过去后,长时间低效运行产生很大的资源浪费,这是非常粗放的预算和资源管理模式。阿里的多种业务形态产生了多种集群,每个集群之间运维体系差异较大、各个板块无法互用、资源整体弹性能力不足导致双11无法借用这些资源。每个板块的资源池有不同的buffer,每个资源池的在线率、分配率和利用率无法统一。我们通过云化架构提高整体技术效率和全局资源的弹性复用能力。例如某个不做双11的集群把资源贡献出来给双11的交易使用。由于云能提供双11正需要的弹性能力,所以我们也开始大量使用阿里云来解决双11成本问题,通过拉通技术体系来降低大促和日常整体成本,提出通过云化架构来实现双11单笔交易成本减半的目标。
先来梳理一下整个运维体系现状。我们将集群大致分在线服务集群、计算任务集群、ECS集群三类。这三种集群上的资源管理和基础运维、调度都是独立的。它们有各自的调度编排能力,在线服务Sigma调度、计算任务的Fuxi调度、ECS的Cloud Open API;它们在生产资源、资源供给、分配方式上也是不同的。在线服务用的是容器、计算任务调度最后生产的是LXC的轻量级隔离封装容器、云生产的是ECS;它们在应用层上运维集群管理也是不一样的。最上层业务层跑的任务也不一样。在线服务器跑的是在线业务如交易搜索广告、有状态的存储。计算集群跑的是大数据分析的任务,云集群跑的是各式各样的外部客户的任务。
通过技术全面云化逐层进行重构升级,建设弹性复用的能力实现全局统一调度。在线任务和计算任务混合部署,通过统一运维部署和资源分配的标准化提高调度效率,以此来实现容量的自动交付。所以我们需要做全面容器化,利用公有云,发挥云的弹性能力,减小自采基础设施的投入。通过混合云弹性架构和一键建站复用阿里云的能力,降低双11的成本。利用阿里云做到以前一年的资源持有时间缩减到只需1-2个月。
统一调度体系
始于2011年建设的Sigma是服务阿里巴巴在线业务的调度系统,围绕Sigma有一整套以调度为中心的集群管理体系。
Sigma是有Alikenel、SigmaSlave、SigmaMaster三层大脑联动合作,Alikenel部署在每一台NC上,对内核进行增强,在资源分配、时间片分配上进行灵活的按优先级和策略调整,对任务的时延,任务时间片的抢占、不合理抢占的驱逐都能通过上层的规则配置自行决策。SigmaSlave可以在本机上进行CPU的分配、应急场景的处理。通过本机Slave对时延敏感任务快速做出决策和响应,避免因全局决策处理时间长带来的业务损失。SigmaMaster是一个最强的大脑,它可以统揽全局,为大量物理机的容器部署进行资源调度分配和算法优化决策。
整个架构是面向终态的设计理念,请求进来后把数据存储到持久化存储,调度器识别调度需求分配资源。系统整体的协调性和最终一致性是非常好的。我们在2011年开始做调度系统,2016年用Go语言重写,2017年兼容了kubernetes API,希望和开源社区共同建设和发展。
发挥统一调度,集中管理的优势,释放了规模效益下的一些红利。在线服务的调度和计算任务调度下有各种业务形态,它们在一层调度上进一步细分成二层调度,通过合并资源池提升利用率和分配率,合并buffer进行空间维度的优化实现全局打通。全局打通后进行弹性分时复用、时间维度的优化,共节省超过5%的资源。由于基数大,这个优化效果是非常可观的。
阿里巴巴在2014年开始推动混部架构,目前已在阿里巴巴内部大规模部署。在线服务属于长生命周期、规则策略复杂性高、时延敏感类任务。而计算任务生命周期短、调度要求大并发高吞吐、任务有不同的优先级、对时延不敏感。基于这两种调度的本质诉求的不同,所以我们在混合部署的架构上把两种调度并行处理,即一台NC物理机上可以既有Sigma调度又有Fuxi调度。Sigma调度是通过SigmaAgent调用OCI标准的RunC 、RunV、 RunLXC 三种标准来启动Pouch容器。Fuxi也在这台NC物理机上抢占资源,启动自己的计算任务。所有在线任务都在Pouch容器上,它负责把服务器资源进行分配切割通过调度把在线任务放进去,离线任务填入其空白区,保证物理机资源利用达到饱和,这样就完成了两种任务的混合部署。
混部的关键技术
内核资源隔离上的关键技术
在CPU HT 资源隔离上,做了Noise Clean内核特性,解决在/离线超线程资源争抢问题。
在CPU调度隔离上,CFS基础上增加Task Preempt特性,提高在线任务调度优先级。
在CPU 缓存隔离上,通过CAT,实现在、离线三级缓存(LLC)通道隔离(Broadwell及以上)。
在内存隔离上,拥有CGroup隔离/OOM优先级;Bandwidth Control减少离线配额实现带宽隔离。
在内存弹性上,在内存不增加的情况下,提高混部效果,在线闲置时离线突破memcg limit;需要内存时,离线及时释放。
在网络QoS隔离上,管控打标为金牌、在线打标为银牌、离线打标为铜牌,分级保障带宽。
在线集群管理上的关键技术
对应用的内存、CPU、网络、磁盘和网络I/O容量进行画像,知道它的特征、资源规格是什么,不同的时间对资源真实使用情况如何,然后对整体规格和时间进行相关性分析,进行整体调度优化。
亲和互斥和任务优先级的分配,哪种应用放在一起使整体计算能力比较少、吞吐能力比较高,这是存在一定亲和性。
不同的场景有不同的策略,双11的策略是稳定优先,稳定性优先代表采用平铺策略,把所有的资源用尽,让资源层全部达到最低水位。日常场景需要利用率优先,“利用率优先”指让已经用掉的资源达到最高水位,空出大量完整资源做规模化的事。
应用做到自动收缩,分时复用。
整个站点的快速扩容缩容,弹性内存技术。
计算任务调度+ODPS上的关键技术
有弹性内存分时复用、动态内存超卖、无损降级与有损降级三个关键混部技术。动态内存超卖指内存是可以超卖的,如果有在线任务要用,就快速归还。有损降级和无损降级的策略指的是对影响在可接受范围内的波动干扰进行无损降级,不增加新任务,慢慢把它降下来,对影响大的干扰直接杀掉任务属于有损降级。利用零层管控,管理每台NC上的在线任务和离线任务之间的关系。
混合部署指将计算任务引入在线服务集群以提升日常资源效率。把离线任务引入后,CPU平均利用率从10%上升到40%以上,同时敏感类应用的延迟影响时间小于5%,属于完全可接受范围。目前我们整个混部集群已达到数千台的规模,经过了交易核心链路双11大促的验证。这项优化可以为日常节省超过30%的服务器。由于涉及到硬件的迭代和网络的迭代,需要一个很长的准备周期,所以我们预计明年会扩大10倍的部署规模。
通过分时复用,达到进一步提升资源效率的效果。上图中的曲线是我们某个应用的流量曲线。它是非常有规律的,左边代表晚上波谷期,右边代表白天处于波峰期。正常的混部指占用图中蓝色阴影部分的资源把利用率提高到40%,弹性分时复用技术是指对应用画像找到应用流量波谷期,对应用缩容,大量释放内存和CPU,调度更多计算任务。通过这项技术,把平均CPU利用率提升到60%以上。
在双11时,如何利用计算任务集群混合部署助力双11降低成本?我们把计算任务集群分成三种状态:完全没有在线服务的状态、在线服务和计算任务共同存在的过渡状态、双11时在线服务占主流计算任务短时间降级状态。集群混合部署后资源分配三七开,计算任务可以抢占在线任务分配的资源;在压测和大促非峰值时资源分配五五开;在大促峰值到来时,计算任务短时间降级,空闲资源支持支撑双11峰值。通过一小时快速建站拉起完整交易站点,大幅度降低了双11的单笔交易成本。
Pouch容器和容器化的进展
全面容器化是提升运维能力、拉通运维差异的关键的技术。首先介绍一下阿里巴巴内部容器技术产品Pouch。它从2011年开始建设和上线,基于LXC,在2015年初开始吸收Docker镜像功能和很多标准。阿里巴巴的容器非常有特点,它结合了阿里内核,大幅度提高了它的隔离性,目前以百万级规模部署于阿里集团内部。
再来了解一下Pouch的发展路线。以前用的是虚拟机的虚拟化技术,虚拟化技术过渡到容器技术面临着很多运维体系的挑战。运维体系的迁移是一个很大的技术成本。我们做到了阿里内部运维和应用视角,有独立IP,能够ssh登录,有独立的文件系统和资源隔离使用量可见性。2015年以后,阿里巴巴引入Docker 标准,形成了新的一套容器Pouch并集成整个运维体系。
Pouch的隔离性非常好,是富容器,可以登录容器,看到容器内进程自己占的资源量,有多少进程,进程挂了容器是不会挂的,可以运行很多的进程。兼容性很好, 旧版本和以后的版本都支持,对利旧很有帮助。同时他经过了百万级容器部署的规模化验证,我们研发了一套P2P镜像分发机制,大幅度提升分发效率。同时兼容了业界更多标准,推动标准的建设,支持RunC 、RunV 、RunLXC等标准。
Pouch的结构是比较清晰的,Pouchd如何跟kubelet、swarm、Sigma交互。在存储上跟业界一起建设了CSI标准。支持分布式存储如ceph、pangu。在网络上使用lxcfs增强隔离性,支持多种标准。
目前Pouch化覆盖了阿里的大部分BU,2017年达到百万级部署,在线业务达到100%容器化,计算任务也开始容器化,它拉平了异构平台的运维成本。覆盖运行模式,多种编程语言,DevOps体系。Pouch覆盖了阿里几乎所有业务板块如蚂蚁、交易、中间件等等。
Pouch于2017年10月10号宣布开源,11月19日正式开源,把代码放到https://github.com/alibaba/pouch上,计划在2018年03月发布第一个大版本。我们希望通过Pouch的开源推动容器领域的发展和标准的成熟,给业界提供差异化有竞争力的技术选择。不仅方便传统IT企业利旧,老的基础设施也同样能够享受容器化带来的运维层的好处和优势,而且方便新的IT企业享受规模化稳定性和多标准兼容性带来的优势。
在存储计算分离上,由于有状态任务需要复制状态,会严重影响分时复用运维自动化程度和调度效率。我们在云化过程中实现了存储计算分离技术。由于计算集群和在线服务不在一个机房,计算任务的数据需要先缓存到在线业务的集群上,所以我们搭了一个缓存桥头堡,然后进行计算。随着机房结构的调整和网络的优化,我们开始对在线计算同时进行存储计算分离。目前已经实现去桥头堡方案,不受网络长传带宽的限制,减少了大集群跨网络核心对穿流量,提升了调度的灵活性。存储计算分离技术不仅可以使用阿里盘古技术,同时也兼容业界这一套容器上的存储标准,这也是阿里实现云化架构的非常关键的技术。在网络架构的升级上,我们大规模使用25G网络,在公有云上使用VPC,overlay能云上、云下和数据集群整个网络打通,这也是阿里大规模混合部署的前提。
云化架构和双11未来技术路线
这是阿里混合云弹性架构,是基于编排的一套技术体系,也是面向动态的架构。它可以分钟级进行单元的扩容和缩容,快速在云上或大数据集群上建立交易单元,实现秒级巡检,确保交付的可靠性。这套体系能持续降低资源持有时间和服务器的非ONLINE时间,降低损耗时间,提升了弹性的效率。双11超过60%的峰值流量都跑在阿里云上,全面使用阿里云弹性基础设施,8个小时快速构建全球最大混合云。
这是双11云化架构运维体系介绍。将资源分为在线任务集群、计算任务集群和ECS集群。资源管理,单机运维、状况管理,命令通道、监控报警这类基础运维体系已经打通。在双11场景中,我们会在云上划出一个独立的区域与其他场景互通。在互通区域,Sigma调度可以到计算集群服务器里申请资源,生产Pouch容器,也可以到cloud open API去申请ECS,生产出容器的资源。在日常的场景中Fuxi可以到sigma里申请资源,创建需要的容器。在双11场景中,利用应用和规模化运维在容器上构建大量在线服务,包括业务层的混合部署,每个集群都有online service和有状态服务及大数据分析。阿里云的独占集群也部署了在线服务和有状态的数据服务,做到了datacenter as a computer,多个数据中心像一台计算机一样来管理,实现跨多个不同的平台来调度业务的发展所需要的资源。构建了混合云用极低的成本拿到服务器,解决有没有的问题。先有服务器规模,再通过分时复用和混合部署来大幅度提升资源利用率。真正实现了弹性资源平滑复用任务灵活混合部署,用最少的服务器最短的时间和用最优效率完成业务容量目标。通过这一套云化架构,我们在双11实现了新增IT成本降低50%,使日常IT成本下降30%,带来了集群管理和调度领域的技术价值爆发,也说明容器、编排调度技术的流行是一种必然。
后期我们会通过阿里云平台把内部储备的技术对外输出。这套技术是内部调度容器运维领域的优势技术,具备调度、编排、应用管理、监控、混合云的快上快下构建、弹性伸缩、混合部署的能力,同时兼容Kubernetes API,提供企业级容器应用管理能力,提高企业IT效率,进而提高企业竞争力和创新效率。混合部署和自动化混合云构建技术经过双11规模验证,成为一个非常成熟稳定的技术体系。在云上,我们和ACS 、EDAS 、EMR合作,提高了产品的完整性。
未来云化架构和双11有哪些技术的发展方向?在双11场景下利用技术解决了大促成本的问题,找到了一个正确的方向,通过长期建设和发展,有更大的优化效率的提升。未来我们希望通过云化架构提升阿里云IDC资源利用率、通过扩大调度规模和混部形态扩大效益。继续推进面向终态的体系结构和运维体系的提升,资源持有时间优化30%以上,持续降低大促的交易成本。对双11本身,成本的问题已经得到了比较好的优化,未来着手于效率的提升,减少时间和人力成本,通过双11技术变量的采集、分析、预测微观视角的剖析和数据算法驱动,用智能决策进行处理。通过数据化、智能化、人与机器智能协同指挥,提升双11准备和作战效率,减少人力投入。通过加速基础技术的迭代,在体验、效率、成本和最大吞吐能力上找到新的平衡点,为整个行业和消费者带来一个更加完美的双11。
本文由云栖社区志愿者小组zengzengzeng整理,王殿进校审,编辑:刁云怡。
网友评论