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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 近日,阿里正式开源了基于 Apache 2.0 协议的容器技术 Pouch。Pouch 是一款轻量级的容器技术,拥有快速高效、可移植性高、资源占用少等特性,主要帮助阿里更快的做到内部业务的交付,同时提高超大规模下数据中心的物理资源利用率。


4f5afd63893a5b75026c7fcd2dbdd5b4c0275ba4

时至今日,全球范围内,容器技术在大多数企业中落地,已然成为一种共识。如何做好容器的技术选型,如何让容器技术可控,相信是每一个企业必须考虑的问题。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 与蜻蜓的使用架构图如下:

f17696b6f4bc71b6b01316b473eef7e68b33ba37

富容器技术

阿里巴巴集团内部囊括了各式各样的业务场景,几乎每种场景都对 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 的开源社区。随后,以开源版本的 Pouch 逐渐替换阿里巴巴集团内部的 Pouch,最终达成 Pouch 内外一致的目标。当然,在这过程中,内部 Pouch 的解耦工作,以及插件化演进工作同样重要。而在 Pouch 的开源计划中,明年 3 月底会是一个重要的时间点,彼时 Pouch 的 1.0 版本将发布。

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

9892a831cf6660228cb25396fc26d16964f328f6

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 主张“丰富”与“安全”。runC 的支持,可谓顺其自然。runV 的支持,则表现出了和生态的差异性。虽然 docker 默认支持 runV,然而在 docker 的 API 中并非做到对“容器”与“虚拟机”的兼容,从而 Docker 并非是一个统一的管理入口。而据我们所知,现有企业中仍有众多存量虚拟机的场景,因此,在迎接容器时代时,如何通过统一的运维入口,同时管理容器和虚拟机,势必会是“虚拟机迈向容器”这个变迁过渡期中,企业最为关心的方案之一。Pouch 的开源形态,很好的覆盖了这一场景。runlxc 是阿里巴巴自研的 lxc 容器运行时,Pouch 对其的支持同时也意味着 runlxc 会在不久后开源,覆盖企业内部拥有大量低版本 Linux 内核的场景。

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

ab84f172fd0edc722291a385e200ac2d46aa0a84

和传统的容器引擎方案相似,Pouch 也呈现出 C/S 的软件架构。命令行 CLI 层面,可以同时支持 Pouch CLI 以及 Docker CLI。对接容器 runtime,Pouch 内部通过 container client 通过 gRPC 调用 containerd。Pouch Daemon 的内部采取组件化的设计理念,抽离出相应的 System Manager、Container Manager、Image Manager、Network Manager、Volume Manager 提供统一化的对象管理方案。

写在最后

如今 Pouch 的开源,意味着阿里积累的容器技术将走出阿里,面向行业。而 Pouch 的技术优势,决定了其自身会以一个差异化的容器解决方案,供用户选择。企业在走云化之路,拥抱云原生(Cloud Native)时,Pouch 致力于成为一款强有力的软件,帮助企业的数字化转型做到最稳定的支持。

Pouch 目前已经在 GitHub 上开源,欢迎任何形式的开源参与。GitHub 地址为:

https://github.com/alibaba/pouch

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
业界新标杆!阿里开源自研高并发编程核心笔记(2023最新版)
提到并发编程很多人就会头疼了;首先就是一些基础概念:并发,并行,同步,异步,临界区,阻塞,非阻塞还有各种锁全都砸你脸上,随之而来的就是要保证程序运行时关键数据在多线程中的可见性、核心业务的原子性、多线程通信的有序性。虽然很多人工作可能接触不到这些的东西,但是面试就是得问。假如你跟一个有过高并发编程经验的人一起面试同一个岗位,你就是背了些面试题,而人家是确确实实有真东西的,那后续的录用结果想必就不用我多说了吧~
|
运维 Kubernetes Dubbo
服务网格技术开源、自研、商业化三位一体战略解读 | 学习笔记
快速学习 服务网格技术开源、自研、商业化三位一体战略解读
243 0
服务网格技术开源、自研、商业化三位一体战略解读 | 学习笔记
|
机器学习/深度学习 人工智能 运维
首届 TechoDay 腾讯技术开放日:云原生、大数据等基础产品一键配置,发布 7 款“轻量级”产品
首届 TechoDay 腾讯技术开放日:云原生、大数据等基础产品一键配置,发布 7 款“轻量级”产品
221 0
|
消息中间件 Cloud Native 容灾
阿里云中间件发展历程和开源现状
中间件已经发展多年,其目的主要为通过标准接口和协议解决异构网络环境下分布式应用软件互联和互操作问题。近几年,随着云原生技术的高速发展,云时代对中间件的定义又进行了扩充。2020 年由信通院牵头组织的云原生中间件白皮书对于云原生中间件又提出了 10 项新要求,主要分为底层资源、设计原则、运行时和呈现状态四个维度。阿里巴巴中间件已经有 15 年的发展历史,它与阿里业务一起成长,也是阿里巴巴云原生实践 15 年全程见证者。
阿里云中间件发展历程和开源现状
|
tengine 运维 Kubernetes
云原生网关开源、自研、商业化三位一体战略背后的思考
10月26日下午15:00,云原生网关技术负责人--如葑在直播间等您。
1087 0
云原生网关开源、自研、商业化三位一体战略背后的思考
|
消息中间件 Prometheus Cloud Native
阿里云原生中间件首次实现自研、开源、商用“三位一体”,技术飞轮效应显现
阿里云在探索中一直存在的苦恼,是内部的自研体系、商业化的产品技术与开源的项目,三方的技术路线一直没有机会融为一体。然而,就在今年阿里云提出了“三位一体”理念,即将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系,最大化技术的价值。
阿里云原生中间件首次实现自研、开源、商用“三位一体”,技术飞轮效应显现
|
Kubernetes 安全 Cloud Native
蚂蚁王旭:开源协作如何提升业界的安全?
开发者、组织、业界机构的共同努力,让开源项目和社区,乃至整个世界变得更加安全。
蚂蚁王旭:开源协作如何提升业界的安全?
|
应用服务中间件 Dubbo Java
2017年阿里开源了14个核心技术,你了解哪些?
阿里妹导读:自从2011年宣布第一波开源项目以来,阿里技术人一直积极参与开源社区共建。开源项目数量每年都有所增长,目前阿里巴巴已经有150+个开源项目,其中数个项目 star 破万。相关的 GitHub 2017年数据统计显示,阿里巴巴是唯一一家入围 GitHub 顶尖贡献名单的中国公司。
10589 0
2017年阿里开源了14个核心技术,你了解哪些?
2017年阿里开源了14个核心技术,你了解哪些?- 测试
在开源中国举行的“2017年度最受欢迎中国开源软件Top20”的评选中,阿里巴巴占据五席位。
774 0

热门文章

最新文章