沸腾!阿里又开源了一项自研核心技术!

2017 年 12 月 5 日 互联网架构师 阿里技术


相关阅读:

我为什么建议你发年终奖前跳槽?

多隆:从工程师到阿里合伙人 | 阿里技术人纪录片

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

阿里妹导读:近日,阿里正式开源了基于 Apache 2.0 协议的容器技术 Pouch。Pouch 是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。开源之后,Pouch 成为一项普惠技术,人人都可以在 GitHub 上获取,GitHub 项目地址:

https://github.com/alibaba/pouch


时至今日,全球范围内,容器技术在大多数企业中落地,已然成为一种共识。如何做好容器的技术选型,如何让容器技术可控,相信是每一个企业必须考虑的问题。Pouch 无疑使得容器生态再添利器,在全球巨头垄断的容器开源生态中,为中国技术赢得了一块阵地。



  Pouch 技术现状


此次开源 Pouch,相信行业中很多专家都会对阿里目前的容器技术感兴趣。到底阿里玩容器是一个侠之大者,还是后起之秀呢?以过去看未来,技术领域尤其如此,技术的沉淀与积累,大致可以看清一家公司的技术实力。



 Pouch 演进


追溯 Pouch 的历史,我们会发现 Pouch 起源于 2011 年。当时,Linux 内核之上的 namespace、cgroup 等技术开始成熟,LXC 等工具也在同时期诞生不久。阿里巴巴作为一家技术公司,即基于 LXC 研发了容器技术 t4,并在当时以产品形态给集团内部提供服务。此举被视为阿里对容器技术的第一次探索,也为阿里的容器技术积淀了最初的经验。随着时间的推移,两年后,Docker 横空出世,其镜像技术层面,极大程度上解决了困扰行业多年的“软件封装”问题。镜像技术流行开来后,阿里没有理由不去融合这个给行业带来巨大价值的技术。于是,在 2015 年,t4 在自身容器技术的基础上,逐渐吸收社区中的 Docker 镜像技术,慢慢演变,打磨为 Pouch。

带有镜像创新的容器技术,似一阵飓风,所到之处,国内外无不叫好,阿里巴巴不外如是。2015 年末始,阿里巴巴集团内部在基础设施层面也在悄然发生变化。原因很多,其中最简单的一条,相信大家也不难理解,阿里巴巴体量的互联网公司,背后必定有巨大的数据中心在支撑,业务的爆炸式增长,必定导致基础设施需求的增长,也就造成基础设施成本的大幅提高。容器的轻量级与资源消耗低,加上镜像的快速分发,迅速让阿里巴巴下定决心,在容器技术领域加大投入,帮助数据中心全面升级。



 阿里容器规模


经过两年多的投入,阿里容器技术 Pouch 已经在集团基础技术中,扮演着极其重要的角色。2017 年双 11,巨额交易 1682 亿背后,Pouch 在“超级工程”中做到了:

  • 100% 的在线业务 Pouch 化

  • 容器规模达到百万级

回到阿里集团内部,Pouch 的日常服务已经覆盖绝大部分的事业部,覆盖的业务场景包括:电商、广告、搜索等;覆盖技术栈包括:电商应用、数据库、大数据、流计算等;覆盖编程语言:Java、C++、NodeJS 等。



 Pouch 技术优势


阿里巴巴容器技术如此之广的应用范围,对行业来说实属一大幸事,因为阿里已经用事实说明:容器技术已经在大规模生产环境下得到验证。然而,由于 Pouch 源自阿里,而非社区,因此在容器效果、技术实现等方面,两套体系存在差异。换言之,Pouch 存在不少独有的技术优势。



 隔离性强


隔离性是企业走云化之路过程中,无法回避的一个技术难题。隔离性强,意味着技术具备了商用的初步条件;反之则几乎没有可能在业务线上铺开。哪怕是阿里巴巴这样的技术公司,实践容器技术伊始,安全问题都无法幸免。众所周知,行业中的容器方案大多基于 Linux 内核提供的 cgroup 和 namespace 来实现隔离,然后这样的轻量级方案存在弊端:

  • 容器间,容器与宿主间,共享同一个内核;

  • 内核实现的隔离资源,维度不足。

面对如此的内核现状,阿里巴巴采取了三个方面的工作,来解决容器的安全问题:

  • 用户态增强容器的隔离维度,比如网络带宽、磁盘使用量等;

  • 给内核提交 patch,修复容器的资源可见性问题,cgroup 方面的 bug;

  • 实现基于 Hypervisor 的容器,通过创建新内核来实现容器隔离。


容器安全的研究,在行业中将会持续相当长时间。而阿里在开源 Pouch 中,将在原有的安全基础上,继续融合 lxcfs 等特性与社区共享。同时阿里巴巴也在计划开源“阿里内核”,将多年来阿里对 Linux 内核的增强回馈行业。


 P2P 镜像分发


随着阿里业务爆炸式增长,以及 2015 年之后容器技术的迅速普及,阿里容器镜像的分发也同时成为亟待解决的问题。虽然,容器镜像已经帮助企业在应用文件复用等方面,相较传统方法做了很多优化,但是在数以万计的集群规模下,分发效率依然令人抓狂。举一个简单例子:如果数据中心中有 10000 台物理节点,每个节点同时向镜像仓库发起镜像下载,镜像仓库所在机器的网络压力,CPU 压力可想而知。

基于以上场景,阿里巴巴镜像分发工具“蜻蜓”应运而生。蜻蜓是基于智能 P2P 技术的通用文件分发系统。解决了大规模文件分发场景下分发耗时、成功率低、带宽浪费等难题。大幅提升发布部署、数据预热、大规模容器镜像分发等业务能力。目前,“蜻蜓”和 Pouch 同时开源,项目地址为:

https://github.com/alibaba/dragonfly 

Pouch 与蜻蜓的使用架构图如下:




 富容器技术


阿里巴巴集团内部囊括了各式各样的业务场景,几乎每种场景都对 Pouch 有着自己的要求。如果使用外界“单容器单进程”的方案,在业务部门推行容器化存在令人难以置信的阻力。阿里巴巴内部,基础技术起着巨大的支撑作用,需要每时每刻都更好的支撑业务的运行。当业务运行时,技术几乎很难做到让业务去做改变,反过来适配自己。因此,一种对应用开发、应用运维都没有侵入性的容器技术,才有可能大规模的迅速铺开。否则的话,容器化过程中,一方面得不到业务方的支持,另一方面也需要投入大量人力帮助业务方,非标准化的实现业务运维。


阿里深谙此道,内部的 Pouch 技术可以说对业务没有任何的侵入性,也正是因为这一点在集团内部做到 100% 容器化。这样的容器技术,被无数阿里人称为“富容器”。


“富容器”技术的实现,主要是为了在 Linux 内核上创建一个与虚拟机体验完全一致的容器。如此一来,比一般容器要功能强大,内部有完整的 init 进程,以及业务应用需要的任何服务,当然这也印证了 Pouch 为什么可以做到对应用没有“侵入性”。技术的实现过程中,Pouch 需要将容器的执行入口定义为 systemd,而在内核态,Pouch 引入了 cgroup namespace 这一最新的内核 patch,满足 systemd 在富容器模式的隔离性。从企业运维流程来看,富容器同样优势明显。它可以在应用的 Entrypoint 启动之前做一些事情,比如统一要做一些安全相关的事情,运维相关的 agent 拉起。这些需要统一做的事情,倘若放到用户的启动脚本,或镜像中就对用户的应用诞生了侵入性,而富容器可以透明的处理掉这些事情。



 内核兼容性


容器技术的井喷式发展,使得不少走在技术前沿的企业享受到技术红利。然后,“长尾效应”也注定技术演进存在漫长周期。Pouch 的发展也在规模化进程中遇到相同问题。


但凡规模达到一定量,“摩尔定律”决定了数据中心会存有遗留资源,如何利用与处理这些物理资源,是一个大问题。阿里集团内部也是如此,不管是不同型号的机器,还是从 2.6.32 到 3.10+ 的 Linux 内核,异构现象依然存在。倘若要使所有应用运行 Pouch 之中,Pouch 就必须支持所有内核版本,而现有的容器技术支持的 Linux 内核都在 3.10 以上。不过技术层面万幸的是,对 2.6.32 等老版本内核而言,namespace 的支持仅仅缺失 user namespace;其他 namespace 以及常用的 cgroup 子系统均存在;但是 /proc/self/ns 等用来记录 namespace 的辅助文件当时还不存在,setns 等系统调用也需要在高版本内核中才能支持。而阿里的技术策略是,通过一些其他的方法,来绕过某些系统调用,实现老版本内核的容器支持。


当然,从另一个角度而言,富容器技术也很大程度上,对老版本内核上的其他运维系统、监控系统、用户使用习惯等实现了适配,保障 Pouch 在内核兼容性方面的高可用性。

因此综合来看,在 Pouch 的技术优势之上,我们不难发现适用 Pouch 的应用场景:传统 IT 架构的的迅速容器化,企业大规模业务的部署,安全隔离要求高稳定性要求高的金融场景等。



 Pouch 架构


凭借差异化的技术优势,Pouch 在阿里巴巴大规模的应用场景下已经得到很好的验证。然而,不得不说的是:目前阿里巴巴内部的 Pouch 与当前开源版本依然存在一定的差异。

从计划开源的第一刻开始,Pouch 在生态中的架构图就设计如下:


Pouch 的生态架构可以从两个方面来看:第一,如何对接容器编排系统;第二,如何加强容器运行时。

容器编排系统的支持,是 Pouch 开源计划的重要板块。因此,设计之初,Pouch 就希望自身可以原生支持 Kubernetes 等编排系统。为实现这点,Pouch 在行业中率先支持 container 1.0.0。目前行业中的容器方案 containerd 主要停留在 0.2.3 版本,新版本的安全等功能还无法使用,而 Pouch 已经是第一个吃螃蟹的人。当前 Docker 依然是 Kubernetes 体系中较火的容器引擎方案,而 Kubernetes 在 runtime 层面的战略计划为使用 cri-containerd 降低自身与商业产品的耦合度,而走兼容社区方案的道路,比如 cri-containerd 以及 containerd 社区版。另外,需要额外提及的是,内部的 Pouch 是阿里巴巴调度系统 Sigma 的重要组成部分,同时支撑着“混部”工程的实现。Pouch 开源路线中,同样会以支持“混部”为目标。未来,Sigma 的调度(scheduling)以及混部(co-location)能力有望服务行业。

Pouch 对接生态的架构如下,而 Pouch 内部自身的架构可参考下图:




https://github.com/alibaba/pouch


看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,这里是聚集了10W+技术的架构师圈子,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

登录查看更多
0

相关内容

大数据安全技术研究进展
专知会员服务
95+阅读 · 2020年5月2日
【人大】大规模知识图谱补全技术的研究进展
专知会员服务
87+阅读 · 2020年5月2日
新时期我国信息技术产业的发展
专知会员服务
71+阅读 · 2020年1月18日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
107+阅读 · 2020年1月2日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
83+阅读 · 2019年12月14日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
98+阅读 · 2019年12月14日
阿里技术大牛:一份架构师成神路线图!
51CTO博客
30+阅读 · 2019年7月6日
推荐10个技术公众号
架构文摘
5+阅读 · 2019年4月24日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
18+阅读 · 2018年12月21日
解读2018:13家开源框架谁能统一流计算?
AI前线
3+阅读 · 2018年12月17日
推荐10个优质科技类公众号!
机器学习算法与Python学习
10+阅读 · 2018年3月22日
2018,这9个优质技术公众号,你不能私藏!
码农翻身
9+阅读 · 2018年1月31日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
Arxiv
7+阅读 · 2018年4月24日
Arxiv
10+阅读 · 2018年2月17日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关资讯
阿里技术大牛:一份架构师成神路线图!
51CTO博客
30+阅读 · 2019年7月6日
推荐10个技术公众号
架构文摘
5+阅读 · 2019年4月24日
蚂蚁金服微服务实践(附演讲PPT)
开源中国
18+阅读 · 2018年12月21日
解读2018:13家开源框架谁能统一流计算?
AI前线
3+阅读 · 2018年12月17日
推荐10个优质科技类公众号!
机器学习算法与Python学习
10+阅读 · 2018年3月22日
2018,这9个优质技术公众号,你不能私藏!
码农翻身
9+阅读 · 2018年1月31日
一篇文章读懂阿里企业级数据库最佳实践
阿里巴巴数据库技术
5+阅读 · 2017年12月20日
Top
微信扫码咨询专知VIP会员