写点什么

想了解阿里巴巴的云化架构 看这篇就够了

  • 2017-12-26
  • 本文字数:5202 字

    阅读完需:约 17 分钟

阿里巴巴 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 网关等。

下图是阿里今年双十一在混合云上的一个部署架构,阿里在华南、华东、华北三个核心机房里面做了混合云专线的接入,在线下阿里也部署了很多自己的机房,这样在发生脉冲计算或者有一些常规性的业务需求时,可以快速将私有云和公有云进行链接互通。针对一些特殊的海外需求,阿里也通过混合云专线的方式,让一些公网链路质量非常差的地方通过内网进行交互,保证海外网络访问质量。

除了对于数据的存储和展现,今年阿里云也在尝试怎么把这个数据从冰冷的数据变得“有感情”,杨旭表示,阿里今年在做的非常有意义的一件事就是感知零售,传统的店面无法根据用户进店行为进行统计分析,如是否有购买行为、通常会购买哪些物品等。

今年阿里把每个商品都贴上电子标签,用户进店后通过电子店铺的识别,可以形成一张热力图,在这张图上店主可以清晰看到用户在哪个区域停留的时间比较多、哪个地方热力明显一些,甚至可以观测用户看到该商品可能会有一些开心的反映,然后根据这些数据调整商品部署,使其更加适应消费者的消费习惯,让用户能够快速、精准找到自己想要的商品。相信未来,阿里也会通过更多的技术尝试,让整个生活变得更美好!

2017-12-26 18:028308
用户头像

发布了 24 篇内容, 共 10.5 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

究竟要找什么样的工作?

escray

学习 面试

联邦学习初识

soolaugust

学习

一文读懂jar包的小秘密

程序那些事

Java jar jar包的小秘密 java解密

星火PLUS交易所打造无边界数字经济联盟,掀起币圈追捧热潮

InfoQ_967a83c6d0d7

搞一搞Elasticsearch

北漂码农有话说

对于结果不同程度的追求,决定了这个人的身价

非著名程序员

程序员 个人成长 思维模型 结果思维

公司想要大龄程序员么?

escray

学习 面试

我是合适的人选么?

escray

学习 面试

简单交互式页面的思考(C)

Alex

指针 C语言 交互设计

如何通过技术面试?

escray

学习 面试

Flink的2种部署模式-2

小知识点

scala 大数据 flink

如何使 Grafana as code

郭旭东

翻译 Grafana

Week 11命题作业

Jeremy

性能全开的十代酷睿,造就惠普光影精灵 6 的电竞燃魂

最新动态

【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察

华为云开发者联盟

接口 软件开发 API 华为云 API Explorer平台

MySQL系列(一):MySQL深入学习先导篇之基础架构

z小赵

MySQL 数据库

a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z站?

程序员生活志

我喜欢的工作,喜欢我么?

escray

学习 面试

大数据技术发展(三):Spark 代替 Hadoop ? Spark Or Flink ?

cristal

Java 大数据 flink hadoop spark

Docker 的前世今生

哈喽沃德先生

Docker 容器 微服务 虚拟化

【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?

程序员小航

elasticsearch ELK 倒排索引 ES 技术分享

四十不惑,准备面试

escray

学习 面试

Week 11 学习总结

Jeremy

一个@Transaction哪里来这么多坑?

程序员DMZ

spring 事务 读写分离

3 分钟生成一个单元测试报告,这个样式爱了

程序员小富

Java 测试

再见C++

Sunny.

c++ 踩坑

终于可以职业规划了么?

escray

学习 面试

一看就懂的三次握手

书旅

TCP 三次握手 操作系统 协议族

我以后去做什么,技术还是业务?

escray

学习 面试 职业规划

Centos7下service配置知识

SpreadJS 应用案例:电力自动化在线数据采集报表系统

葡萄城技术团队

SpreadJS 电力 报表

想了解阿里巴巴的云化架构 看这篇就够了_DevOps & 平台工程_江柳_InfoQ精选文章