http://www.infoq.com/cn/news/2017/12/Cloud-Sigma-Pouch-Alibaba
阿里巴巴9年双11经历下来,交易额增长了280倍、交易峰值增长800多倍、系统数呈现爆发式增长。系统数据突飞猛进,用户还能一次次如丝般顺滑的秒杀毫无违和,这背后,是阿里技术团队经历数年时间的系统打磨,技术架构优化而呈现出来的结果。今年,天猫双11以1682亿的成交额再破记录,令人惊奇的是,其双11大促IT成本的增长相较于去年足足减少的一半,而这一切,都源于阿里巴巴云化架构的战略。
在12月8日ArchSummit 阿里技术专场上,来自阿里巴巴的四位技术专家们围绕“云化架构的创新实践”主题,就阿里的Sigma调度与集群管理系统、混部、Pouch容器和弹性混合云快速构建等云化架构技术亮点展开了深入分享,本文整理了其中的精彩部分,感兴趣的读者可以下载讲师演讲PPT进行深入了解。
阿里巴巴调度与集群管理系统Sigma
Sigma集群管理系统是阿里巴巴集团云化战略的关键系统。Sigma通过和离线任务的伏羲调度系统深度集成,突破了若干CPU、内存和网络资源隔离的关键技术,实现了在线和离线任务的混合部署。阿里巴巴调度系统首席架构师张瓅玶,围绕Sigma调度系统整体架构和历史演进、架构和实现的特点、调度及资源优化等内容对阿里巴巴调度与集群管理系统展开了深入的讲解与剖析。
张瓅玶表示,阿里巴巴最初做调度的时候,各个部门技术架构相对比较独立,有各自的资源池,也能够比较垂直的从上至下做一整套技术栈。不过,这样也有一个比较大的缺点:在大规模资源使用的情况下如双11,一些没有直接参与双11交易链路的资源可能比较空闲,而双11直接相关的系统又背负着较大的资源压力,资源的使用率不均衡导致资源严重浪费。
在这样的情况下,需要一个调度系统去整合各部分资源,逻辑上要统一资源池,更充分的分配和使用各部分资源。Sigma调度系统由此而生,下图为Sigma调度系统的整理架构,有Alikenel、SigmaSlave、SigmaMaster三层大脑联动合作。
- Alikenel部署在每一台NC上,对内核进行增强,在资源分配、时间片分配上进行灵活的按优先级和策略调整,对任务的时延,任务时间片的抢占、不合理抢占的驱逐都能通过上层的规则配置自行决策。
- SigmaSlave可以在本机上进行CPU的分配、应急场景的处理。通过本机Slave对时延敏感任务快速做出决策和响应,避免因全局决策处理时间长带来的业务损失。
- SigmaMaster是一个最强的大脑,它可以统揽全局,为大量物理机的容器部署进行资源调度分配和算法优化决策。
整个架构是面向终态的设计理念,请求进来后把数据存储到持久化存储,调度器识别调度需求分配资源。这个系统采用阿里Pouch容器(兼容OCI标准),兼容Kubernetes API,张瓅玶表示,阿里巴巴这样做的目的是希望和开源社区共同建设和发展。
双11等大促场景也给Sigma系统的调度任务带来了各种各样的挑战,包括复杂约束下的批量调度优化、精确高水位排布、大规模快速建站、混合云+弹性等。张瓅玶以调度优化和大规模建站为例,讲解了Sigma系统真对双11等大促场景做的系列优化策略。
在调度优化上,阿里通过模拟器和线上数据回放,对批量建站请求进行仿真模拟,来优化方案;而在大规模快速建站方面,阿里一方面将一些热门应用的镜像提前预热,另外结合建站的批量仿真模拟的结果提前预测哪些应用在什么地方去做预热,然后在P2P镜像分发的基础上再做优化,加快整体建站的速度。
那么,阿里如何通过调度集群管理系统,实现资源的效率的提升呢?张瓅玶表示,这里有一个非常关键的技术叫做混部。将一种对于资源的使用可以随时去避让的业务如计算任务,和一种对资源使用要求很高的延时敏感的任务如在线服务部署在一起。当发生紧急情况时,将资源分配给对延时敏感的紧急任务,实现资源的有效分配。
阿里混部技术最佳实践
阿里巴巴2015年开始实践混部技术,如前面所讲,把延时要求低,计算量更大的计算任务和延时敏感高,但请求量大的在线服务混合在了一起运行。可以极大地提高在线服务集群的资源利用率,在刚过去的双11中,有超过10%的流量是通过样的方式支撑的,那么阿里的混部技术具体是如何实现的呢?阿里巴巴高级技术专家吕奇,现场着重讲解了阿里混部技术的最佳实践。
“在线服务的容器就像砖块,而计算任务就像沙子和水。当在线服务压力小的时候,计算任务就占住那些空隙,把空闲的资源都使用起来,而当在线服务忙的时候,计算任务便立即退出空隙,把资源还给在线服务。”通过吕奇的生动描述,笔者可以很形象生动地了解混部技术的部署和实现原理。
下图为阿里基于Sigma与Fuxi混布架构。Sigma调度是通过SigmaAgent调用OCI标准的RunC 、RunV、 RunLXC 三种标准来启动Pouch容器。Fuxi也在这台NC物理机上抢占资源,启动自己的计算任务。所有在线任务都在Pouch容器上,它负责把服务器资源进行分配切割通过调度把在线任务放进去,离线任务填入其空白区,保证物理机资源利用达到饱和,这样就完成了两种任务的混合部署。
通过混部,系统在平时可以极大地提升服务器资源利用率,而在双 11 这样的大促活动需要突增在线服务能力的时候,又可以通过在线服务占用计算任务资源的方式,来顶住短暂的超高峰值压力。
混部技术的实现首要解决资源的抢占问题,即何种情况应该让那些任务有限抢占资源,要解决这个问题,离不开两大核心:调度和内核。调度主要在竞争之前,通过资源画像,尽量减少资源竞争的可能性;内核是在发生资源竞争的极端情况时,优先保障高优先级任务。阿里在这两方面做了大量的优化实践。
在资源调度上,将对应用的内存、CPU、网络、磁盘和网络I/O容量进行画像,知道它的特征和资源规格,不同的时间对资源真实使用情况如何,然后对整体规格和时间进行相关性分析,进行整体调度优化。一方面,在任务调度到机器上之前,会提前感知机器当时的实际剩余能力,然后智能化的挑选任务,让资源在最大化利用的同时,本身的竞争降到最低。另一方面,也通过分时复用,如日常情况下,在线任务凌晨1-6点为低峰,而此时离线是高峰,然后智能挑选空闲在线容器进行offline处理。而在白天的时候,又反过来,让资源使用达到一个最佳的平衡。
而在大促情况下,比如针对双11这种大促场景,离线在短时间内降级的,空出大最的计算资源以供在线应对脉冲高峰,而高峰一过,在线又反哺离线,形成互补,大大提高了集群应对压力的弹性能力,降低了整体的成本。
在服务器的内核层面,主要将内核资源隔离,对 CPU、内存、IO和网络等多方面进行优先级的划分,做到对相关任务的毫秒级自适性调度或限制,以保证高优先级的任务不受影响。具体如下:
- 在CPU调度隔离上,CFS基础上增加Task Preempt特性,提高在线任务调度优先级。
- 在CPU 缓存隔离上,通过CAT,实现在、离线三级缓存(LLC)通道隔离(Broadwell及以上)。
- 在内存隔离上,拥有CGroup隔离/OOM优先级;Bandwidth Control减少离线配额实现带宽隔离。
- 在内存弹性上,在内存不增加的情况下,提高混部效果,在线闲置时离线突破memcg limit;需要内存时,离线及时释放。
- 在网络QoS隔离上,管控打标为金牌、在线打标为银牌、离线打标为铜牌,分级保障带宽。
在资源隔离与存储计算分离两大技术难题得到突破后,经过 2 年多的试验论证、架构调整和优化,混部调度方案已走向大规模生产环境,并已服务于电商核心应用和大数据计算服务 ODPS 业务。在对未来的展望上,吕奇认为,混部技术将会应用于更大规模的场景,实现更精细化的调度与隔离。
Pouch容器和阿里容器化的进展
全面容器化是提升运维能力、拉通运维差异的关键技术。阿里巴巴从2011年开始研发适合于阿里内部场景的容器技术。在今年10月份的云栖大会上,阿里启动了Pouch项目的开源孵化工作,目标是将阿里内部Pouch容器逐渐开源到社区并做新的增强。开源Pouch项目已在11月19日的中国开源年会上正式发布。阿里巴巴系统软件部资深技术专家侯前明就阿里Pouch容器及其发展历程和方向做了全面阐述。
据侯前明介绍,截止今年双 11,阿里已在集团范围实现在线服务全部 Pouch 容器化,内部已达到百万级容器部署规模。阿里巴巴和蚂蚁金服的大部分BU,都或多或少采用了Pouch容器技术,这其中部署最多的就是交易和电商平台,包括蚂蚁&交易&中间件,以及搜索广告、数据库,还有一些合作的公司,合一集团、高德等,还有集团内部的测试环境等等,应用领域非常之广泛。
阿里的容器技术经历了一个从集中式到分布式架构上的演化,最开始是直接跑在物理机上,之后引入了虚拟化技术,但整体的资源使用率不高,因而过渡到了容器技术,虚拟化技术过渡到容器技术的过程中面临着很多运维体系的挑战,但阿里在迁移的过程中并没有影响到业务的使用,这得益于阿里内部运维和应用视角,如独立IP阿里使用的是虚拟网卡,每个容器里面有一个sshd的进程,并且有独立的文件系统和资源隔离使用量可见性。2015年以后,阿里巴巴引入Docker 标准,形成一套新的容器技术--Pouch,并集成到整个运维体系。
Pouch容器的优势主要体现在隔离性、P2P镜像分发、富容器、规模化考验和内核兼容性强这五点上。首先,Pouch容器隔离性非常好;其次,Pouch是富容器,可以登录容器,看到容器内进程资源量占比,有多少进程,进程挂了容器是不会挂的,可以运行很多的进程;兼容性上, 旧版本和以后的版本都支持,对旧有基础设施利用率很有帮助;Pouch也经过了百万级容器部署的规模化验证,阿里研发了一套P2P镜像分发机制,可以大幅提升分发效率;兼容了业界更多标准,推动标准的建设,支持RunC 、RunV 、RunLXC等标准。
下图为Pouch容器的开源版本结构,可以看出,Pouch的结构是比较清晰的,Pouch跟kubernetes、Sigma、Swarm交互。在存储上跟业界一起建设了CSI标准。支持分布式存储如ceph、pangu。在网络上使用lxcfs增强隔离性,支持多种标准。
关注过阿里Pouch容器的读者知道,这项技术已于11月19日正式开源,谈到Pouch技术的开源原因,侯前明兴奋的说到,阿里非常希望通过Pouch的开源,推动容器领域的发展和标准的成熟,给业界和开发者提供差异化,有竞争力的技术选择。Pouch容器技术在Github上的链接如下https://github.com/alibaba/pouch 感兴趣的读者可以点击了解详情。
云上双十一技术发展与挑战
阿里双十一交易峰值每年被不断大幅刷新,计算、网络和大数据等产品在支撑双十一场景中也被不断地被打磨和提升,云产品如何满足大促场景的需求?阿里云高级解决方案架构师杨旭,结合阿里云上的架构演进,为现场观众分享了一些对未来技术发展的思考和规划。
对于双11来说,云上的挑战主要集中在两个方面:一是计算需求,即在大数据的场景下,如何保障大规模的资源快速地、以最优成本的方式交付给业务;二是脉冲计算,今年双11的最大交易峰值是是32.5万笔/秒,即在这种高并发的场景下,如何保证系统的可靠性。
面对这两个问题,天猫跟阿里云是怎么做的呢?首先,阿里会对下一年云上资源做规划,根据今年的售卖情况,预估明年在哪些点卖的比较好,同时,天猫采用了异地多活的方式,除了中心有比较大的资源池以外,还将这些业务拆成一小块,拨到全球各个地方,通过这样一种方式,跟需求进行匹配。当云上的售卖需求和本身业务需求匹配后,下一年就可以知道按照哪一种部署架构在全国或者是全球进行资源的分布。
阿里云飞天平台,它分以下几个部分,调度控制器与数据分析平台主要是用来实现快速扩容、弹性调度以及数据链路的分析;下面是一些底层的计算平台,这里除了要兼容直接使用VM业务的,还要兼容直接在Docker跑的一些系统等;左侧的是混合云网关以及云服务网关,这两种应用部署在云上主要是通过链路将公有云的资源跟阿里集团内部网络打通;最后是一些通用的网关系统如Internet网关、负载均衡网关、VPN网关等。
下图是阿里今年双十一在混合云上的一个部署架构,阿里在华南、华东、华北三个核心机房里面做了混合云专线的接入,在线下阿里也部署了很多自己的机房,这样在发生脉冲计算或者有一些常规性的业务需求时,可以快速将私有云和公有云进行链接互通。针对一些特殊的海外需求,阿里也通过混合云专线的方式,让一些公网链路质量非常差的地方通过内网进行交互,保证海外网络访问质量。
除了对于数据的存储和展现,今年阿里云也在尝试怎么把这个数据从冰冷的数据变得“有感情”,杨旭表示,阿里今年在做的非常有意义的一件事就是感知零售,传统的店面无法根据用户进店行为进行统计分析,如是否有购买行为、通常会购买哪些物品等。
今年阿里把每个商品都贴上电子标签,用户进店后通过电子店铺的识别,可以形成一张热力图,在这张图上店主可以清晰看到用户在哪个区域停留的时间比较多、哪个地方热力明显一些,甚至可以观测用户看到该商品可能会有一些开心的反映,然后根据这些数据调整商品部署,使其更加适应消费者的消费习惯,让用户能够快速、精准找到自己想要的商品。相信未来,阿里也会通过更多的技术尝试,让整个生活变得更美好!