一个改变世界的“箱子”
作者 | 云希
来源|阿里巴巴云原生公众号
一个时代的变革往往始于一个微小的创新。
1956 年,对航运一窍不通的卡车大亨麦克莱恩第一次将集装箱用于货物运输时,恐怕连他自己也想象不到,一个普通的铁箱子将会引发一场全球的巨大变革。
集装箱尺寸一致,运输流程标准、系统。每个箱子只装一件货物,能在港口、火车、轮船间自由装卸。它大大提升效率的同时,也让运输成本降低了 90%,从实质上打破了各个国家、港口之间的物流壁垒。
这个箱子将世界就变成了一座大工厂,促使了全球分工和资源流通——苹果找到中国的富士康,丰田公司创造出“及时生产”,美国人吃到了巴西的牛肉……一个微不足道的创新让世界的经济和政治格局都为之改变。
在 IT 届,这个箱子被称为“容器”。
和集装箱一样,容器将应用封装好后,便可以在任意环境之下自由装卸、敏捷运行,提高研发效率的同时,大大降低了运维成本,从而掀起科技圈的新浪潮。
自 2013 年 Docker 出现以来,“容器”便成为云计算领域炙手可热的关键词。2019 年公开信息显示,Docker 开源版的下载次数超过 800 亿次,有约有三分之一的财富 100 强和五分之一的全球 500 强公司都使用 Docker 企业版。权威机构 Gartner 预测,2022 年将有 75% 的企业使用容器。
不同于以往追随硅谷的姿态, 国内的容器化实践早在 10 年前便已拉开帷幕。
性能危机
这其中,布局最早的是阿里。
2011 年,随着云计算的普及,阿里巴巴走过物理机时代,全面迈向虚拟机。
如果说物理机是家里的电脑,那虚拟机则是在电脑上模拟出的许多台小电脑,它拥有完整的软硬件功能,使用体验就跟电脑一致。但“虚拟化”有性能损耗。如果一台 100 个 CPU 的物理机能虚拟出来 100 台小电脑,那么只有 90 台真正干活,另外 10 台要额外做管理工作,损耗由此形成。
规模小时损耗无伤大雅,但阿里数万集群,光是虚拟化过程中耗损的算力就抵得过一家中型互联网公司。
2011 年,为了缓解巨大的虚拟化损耗,淘宝的第一个程序员蔡景现(花名:多隆)和第一代架构师林昊(花名:毕玄)在无心插柳中研发出了阿里第一代容器——T4。
T4 同样基于物理机而来。普通虚拟机将整个操作系统运行在虚拟的硬件平台上,进而提供运行环境供应用程序运行,而 T4 则直接在宿主平台上加载运行应用程序。
所以 T4 使用体验和虚拟机一致,却能减少性能损耗,一经推出便大受欢迎,并逐渐取代虚拟机,承担了集团整个交易系统的计算资源。
但它依然无法解决阿里高企的运维成本。
彼时,为了维系庞大集群的稳定,阿里运维团队超过 300 人,24 小时轮班,依然追不上逐年攀升的业务量。“双11” 期间,用户暴涨,应用激增,数以百计的工程师更要手动扩容,用人肉筑起堤坝才不至于被流量洪峰冲倒。
也是在这一年,大洋彼岸一家名不见经传的 Dotcloud 公司开源了其容器创建技术 Docker。
容器并不是 Dotcloud 公司的创新,但他们开源的 Docker 为容器引入了镜像机制。
镜像,简而言之是一个压缩包, 里面包含应用代码和所依赖的所有文件和目录。将镜像打包上传到镜像库后,无论在何种环境,工程师只需到库里下载镜像,便能重新创造出跟之前一摸一样的容器,无缝操作。
有了它,工程师就像拥有魔法,能在任意环境中,快速构建出需要的容器。
它完美地解决了传统 IT 流程下的两大难题——发布成功率低和运维压力。
传统的 IT 流程下, 业务、研发、运维职责不明晰,运维要一次次调整参数来保障应用运行稳定。
但用了 Docker,情况便大为不同。研发工程师在写应用代码的同时,便会交代清楚运行所依赖的环境,应用发布成功率自然能提高,也减小了运维压力。这也形成了一种 DevOps (研发运维一体化)的工作模式。
Docker 扇动翅膀,科技圈出现容器风暴。拥有了镜像后的容器,成为了 IT 届的“集装箱”,与之配套的技术、标准也纷纷上线。
微软、谷歌、亚马逊等巨头公司热烈拥抱,先前濒临淘汰的小公司 Dotcloud 成为炙手可热的新星,而后还直接将公司名字改成了大功臣 Docker,并利用 Docker 着手商业化。
大洋彼岸的阿里不遑多让。2015 年,林昊招募林轩加入团队,持续完善 T4。后者敏锐地捕捉到了这股容器化热浪。他和林昊、蔡景现一致决定将 T4 镜像化升级,以保持技术先进性。
在林轩的摇旗呐喊下, 杨育兵(花名:沈陵)、张振(花名:守辰)、一啸等人先后加入,成为最早的容器小分队。大半年后,他们成功将 T4 升级为 Alidocker。
一盆凉水
容器团队期望将 T4 全部替换成 Alidocker。原想一鸣惊人,没承想等来的却是冷板凳。
如先前所说,容器,作为封装业务应用的集装箱,如若替换便会带来一整条研发、运维链路的改变。而阿里的技术体系之复杂世所罕见,一个参数的改变都有可能引发故障,故而甚少业务部门愿意拿身家性命冒险。
但容器团队有自己的考虑。在技术迭代频仍的科技圈,即便是具有垄断地位的产品、技术和公司,也会骤然被时间的浪潮打翻,
危机感是科技公司的达摩克利斯之剑。
2015 年,Docker 正式成为了容器届的标准,但阿里却还在使用 T4。
不能再等了!容器团队夹着 PPT,奔走宣扬,为了让业务团队留下深刻印象,林轩介绍杨育兵“这是我们容器小王子”,而张振是“镜像小王子”,他还在内网写下长帖疾呼《阿里人请用 Alidocker !》
一番操作下,大家记住了 Alidocker 和两位王子,依然无动于衷。有主动找上门的,问的都是 T4,也有禁不住热情的,送上几个没有名字的边缘应用。
转眼来到 2016 年 6 月,团队只接到 30 多个应用。此时各业务已开始筹备 双11,说服其用 Alidocker 更是难上加难。
林轩急了,在一次会议中舌战百人,痛陈镜像化的必要性:“弓马再娴熟,迟早要换成火枪大炮原子弹。不接受先进的文明,总有一天像大清朝一样完蛋!”
事情陷入僵局,时任阿里集团 CTO 张建锋(花名:行癫)站了出来,“我支持 Alidocker,在线应用要 100% 容器化!”
张建锋
对于容器化,张建锋有完整的布局。容器的优势有目共睹,阿里业务逐年爆发,容器规模化后,跑在云服务器上是必然趋势。
阿里云的飞天操作系统已经可以成熟调度数万台物理机,但因为虚拟化损耗,容器依然只跑在物理机上,无法享受到上云便利。
为了给容器打造最合适的底座,在 2016 年 双11 复盘会上,张建锋点将张献涛(花名:旭卿)为首的弹性计算团队,打造神龙服务器,攻克云计算十数年的难题——将虚拟化损耗降低为零。
从上层的容器到下层的资源底座神龙,如此,阿里便能构建敏捷、高效的业务运行体系。
在张建锋的支持下,阿里容器化的进程按下“加速键”, 一场横跨了 5 个事业部,9 个团队,11 个业务域的容器化改革拉开帷幕。
初露锋芒
容器掀起的风暴继续在科技圈狂吹,若想将 Docker 进行大规模应用,编排、调度就显得尤为重要。
2015 年,谷歌的 K8s、Docker 的 Swarm、以及开源社区的 Mesos 在容器编排市场呈“三足鼎力”之势。
为了避免 Docker 一家独大,谷歌(Google)、红帽(RedHat)等开源玩家们,共同成立了一个名为 CNCF(Cloud Native Computing Foundation)的基金会,它本质上是以 K8s 为核心的开源社区。
容器编排市场进入长达两年的混战。期间,阿里容器化进程也如火如荼。
Alidocker 起初表现不稳定,发布卡单、响应延时、镜像下载慢、扩容难……每一个 Bug 的出现,都会带来一次业务方的跳脚。容器团队 7 乘 24 小时轮班值守,为了与不同的业务高度匹配,他们每周迭代十几个版本,杨育兵专门写了《Alidocker 的 1000 个细节》来答疑解惑。
2016 年 9 月,双11 进入全链路压测,容器团队一举一动都在聚光灯下。
第一次压测,Alidocker 因为发布链路慢,导致压测失利。为了解决问题,杨育兵把上下游相关系统全摸了一遍;张振做镜像到吐,直到 双11 所有交易业务都能跑通。
时间逼近,连阿里集团 CEO 逍遥子都忍不住过问:“毕玄,你觉得今年上 Alidocker 靠不靠谱?”
开弓没有回头箭,双11 如约而至。零点,大屏幕数字飞速翻滚。容器团队紧紧盯着屏幕。
17.5 万笔/秒,订单创建峰值再破记录。数百应用、20 万容器、100% 核心流量,Alidocker 成功扛住,数据处理能力提升 5 倍。
万重大山落地,容器团队露出久违的笑容。
突破瓶颈
容器编排市场的国际战局也逐渐清晰。
K8s 在开源社区 Github 上的各项指标一骑绝尘,将 Docker 原配 Swarm 远远甩在身后,2017 年底,随着 Docker 宣布支持 K8s。K8s 最终胜出,成为容器编排平台的标准。 有了 K8s 这个护城河,CNCF 社区迅速推出了一系列容器生态的知名工具和项目。大量的公司和创业团队开始围绕 CNCF 而非 Docker 制定容器化策略。社区日益繁荣,号召力贯彻中外。
AWS、Azure、阿里云、谷歌云和 IBM 云等前五大云厂商都已经成为了 CNCF 会员,并在自己的云平台中提供了 K8s 服务——国外媒体称“他们确认了云原生和容器是企业计算的未来”。
珠玉在前,国内公司也纷纷加快了容器化的步伐。华为从 2017 年开始,在内部支撑华为终端云服务等核心业务容器化。一年后, 腾讯自研业务开始上云,并计划完成云原生技术的改造。
阿里步子更大,在线业务于 2017 年实现全面容器化(Alidocker 正式更名为 PouchContainer),容器数量上升至百万。
带领团队完成这项工程的,正是丁宇(花名:叔同)。2017 年初,丁宇接手容器团队,阿里备战 双11 的制胜法宝——全链路压测,也是他的手笔。
丁宇
码头上的集装箱仅仅凭借箱子本身,并不能实现如此巨大的变革。麦克莱恩的伟大之处在于,围绕着集装箱提出了全新的货运体系,包括管理者、港口、货船、起重机、卡车和全新的交付流程等。
IT 行业同样如此,容器只是集装箱和简单吊装,背后的编排、调度等配套设施同样不可或缺。
为了让容器实现最佳性能,团队将 PouchContainer 融合整套设施,升级为 ASI 容器服务(Alibaba Serverless Infrastructure)。
使用 ASI 容器服务后,用户只需关心容器中的应用即可,至于容器的创建、调度、运维管控等一系列琐事,交给容器厂商即可。
为了能让阿里集团、阿里云及外部用户都享受到同样的容器服务,ASI 势必要兼容通用标准 K8s 和 Docker,但难度极大。
“你得保证几百万个容器迁移到 ASI 时运行稳定,不掉链子”,ASI 项目负责人黄涛(花名:智清)说,“这就像给一个百米冲刺的人移植心脏。”
而且 K8s 有一个致命弱点,当集群达到万级规模,便会出现延迟和拒绝访问,无法适应动辄上万的集群,这也是业界难以突破的瓶颈。
Docker 同样有弱点,创建容器时镜像下载慢,无法实现快速扩容。
黄涛不敢掉以轻心,选出3人组成突击队,为大部队探路。花了 2 个月时间,试遍了所有方法,依然想不出万全之策。
林昊远赴海外,请来张瓅玶(花名:谷朴)和李响。张瓅玶曾在谷歌管理着云原生资源池。李响则是 ETCD 分布式存储系统的作者,ETCD 一经问世,就成为了业界标准。2019 年,李响成为 CNCF 9 位委员之一,也是委员会有史以来首位中国委员。
引发 ASI 的性能瓶颈的重要原因之一,便是管理节点中的存储瓶颈。为了突破存储性能,阿里技术团队改进 ETCD 底层存储引擎的分配算法,将存储空间从原本的 2GB 提升为 100GB,且没有延时。除了存储,团队还通过提前加载节点所需数据,减少同步事件等方式,拓展了管理节点的各项性能。
与此同时,PouchContainer 也迎来喜讯。之前创建容器时,必须完整地拉取镜像,一旦遇到大规模的业务量,扩容速度甚至会飙升至 10 分钟。而团队研发出了秒级镜像技术,让镜像能够按需加载,实现了秒级下载扩容。
前排左一:黄涛,右二:张振 ;后排左四:杨育兵,右三:林昊,右二:林轩
突破两大瓶颈,ASI 打破业界难题,实现超万级节点稳定运行。阿里内外越来越多的业务方接入。
血的教训
现实总是在不经意间给予痛击。
“一个基础技术团队,在推动技术变革期间,万众瞩目下,捅出一个大篓子……”。回忆起曾经的一个大故障,总裁直接技术负责人打电话,团队成员们心有余悸。
那次事故后,原打算接入的业务方陆续退出,ASI 团队士气低落,有人顶不住压力离开。
痛定思痛后,丁宇在内网发帖,如此自省:“基础不牢,地动山摇。这一年跑得太快了,不停接入新业务,忽略了团队的承受能力,希望大家记住这个血的教训,引以为戒。”
不够成熟的调度,就像一个拥有“关键按钮”的顽皮孩子,后果不堪设想。有一次,调度系统误判,直接抹掉了一整个机房的容器,一秒钟,几万个容器不见了,“就像天塌了一样”。
黄涛不得不开始考虑最极端情况下的保障措施,比如阿里集群都挂了,容器如何恢复;又或者调度系统崩溃了,如何让业务不受影响......
为了打造一个固若金汤的“集装箱”, 他们苦修内功。
冲上云霄
与此同时,阿里集团开始了轰轰烈烈的上云之路。
2019 年初,时任阿里集团 CTO 兼阿里云智能总裁的张建锋召集阿里的技术骨干开会,“今年开始,阿里巴巴不再采购物理机,所有新增计算都上公共云。”
阿里终于迎来冲向云霄的时机。ASI 团队决定将让所有容器搭载在阿里自研的神龙服务器上,完成最关键的一步——上云。
神龙服务器将虚拟化损耗降低至几乎不计,可以让计算成本下降 50%,容器性能提升 30%,这是真正为容器而生的云服务器。
但 PouchContainer 下搭载着阿里用了十多年的物理机,运行着上万应用, 要从云下搬迁至云上,仅靠 ASI 团队,难以面面俱到。为了争取业务方的配合,丁宇带着所有人到一线技术团队宣讲如何上云。
与此同时,为了真正让阿里云、阿里集团内部以及开源社区享受到同样的容器服务,实现“三位一体”。李响带领团队与云产品 ACK(阿里云对外的容器服务产品)融合。团队熟读 ACK 代码,在阿里云飞天园区闭关数周,“做不出来不回西溪!”
历时近一年,这场集结了阿里 5 万名工程师的浩大工程,在 2019 年 双11 禁受住了全球最高流量洪峰的考验。阿里正式宣布,其核心系统已 100% 跑在阿里云上。
ASI 也成功实现了与云产品 ACK 的会师。如今的云产品 ACK,既保留了云上的各种能力,也能成功应对阿里集团复杂的业务环境。
少为人知的是,这同时是全球最大规模的云原生实践。
所谓云原生,便是以“天生就在云上”的理念打造的一整套 IT 体系,自容器开始,云原生中间件、数据库、服务器等基础系统也陆续出炉,共同构建出幅员辽阔的云原生版图。
正如集装箱的出现缔造了全新的航运体系,容器的出现也开启了云计算的新时代。
集装箱的威力
2019 和 2020 年,在云计算史上注定是两个热闹的年份。
谷歌推出了以 K8s 为核心的混合云/多云管理平台 Anthos;微软推出了开源的云原生服务网络 Open Service Mesh;华为云发布了第二代零损耗裸金属容器;阿里继 2019 年之后,在 2020 年实现了更彻底的最大规模云原生实践……
阿里集团 CTO 程立(花名:鲁肃)表示:阿里核心系统实现了全面云原生化,每万笔峰值交易的 IT 成本较四年前下降了 80%,规模化应用交付效率提升了一倍之多,可在 1 小时内扩展超百万容器,弹性伸缩性能提升 10 倍以上。
云原生大潮奔腾而来。
权威机构 Gartner 预测,到 2020 年,将有 50% 的传统老旧应用被以云原生化的方式改造,到 2022 年,将有 75% 的全球化企业将在生产中使用云原生的容器化应用。
没有人再怀疑——“云原生就是未来”。 2020 年 9 月的云栖大会上,阿里巴巴成立云原生技术委员会 ,负责人蒋江伟(花名:小邪)称将对外赋能数百万家企业进行云原生改造,提升 30% 研发效率的同时降低 30% IT 成本。
蒋江伟
云原生拓展商业边界,并将这股浪潮渗透到人类活动的每个角落。
-
中国移动使用容器取代虚拟机;网商银行已将 400 多个应用程序调整为云原生架构。
-
京东云也在进行微服务和容器化改造。
-
疫情爆发期,钉钉基于阿里云容器解决方案,在 2 小时内扩容一万台主机支撑 2 亿上班族线上工作。
-
申通快递将核心系统搬到云上,大规模部署阿里云容器,亿级包裹过境,系统稳如泰山,IT 成本还降低了 30%。
-
阿里自研云原生技术 Virtual Cluster、 Open kruise,在社区开源后,已经被领英、苹果等公司采用。
如果是 5 年前,你会看到“Docker 基础介绍”和“云原生是什么?”而今天,当你再次搜索时,“云原生”已是行业公认的“云计算的下一个时代”。
而这一切,都始于那个“箱子”。