前言

背景概述

从DataCenter as One Computer开始,大规模集群调度和管理就拉开了序幕,曾经一度类似于Borg这样的系统,被誉为互联网公司的“核武器”,不轻易对外分享。随着技术的演进与发展,特别是近十年来云计算的蓬勃发展,集群调度和管理技术再一次走进大众的视野,典型的代表就是Google开源、CNCF孵化的开源集群调度和管理系统Kubernetes。Kubernetes被称为分布式操作系统,对标Linux单机操作系统,相关描述如:“Kubernetes is the new Linux”“Kubelet is the new Kernel”“Kubectl is the new GNU base system”“Helm is the new Yum”“Operators are the new Config Management tools”[1]。从商业化角度来看,Kubernetes只提供了分布式操作系统的“内核态”,商业化所需要的“用户态”的内容,正依托社区吸纳全世界程序员来共建共享。从技术和商业两个角度来看,作为操作系统级别的系统程序,毫无疑问,业务抽象、架构设计、接口定义会奠定这个系统的基础,提高其生命力,特别是生态发展的生命力,以及商业化盈利的概率。今天,以Kubernetes为代表的集群调度和管理系统不再神秘,就像搜索引擎技术不再神秘一样。如果集群调度和管理是企业内部的“节流”,那么搜索引擎广告技术就是企业的“开源”。企业要生存,开源、节流必须是并存的,特别是大规模的集群调度和管理,在未来很长一段时间内会是大型数字化企业的必备基建能力,这个领域的发展仍然值得我们继续探索。

本书适合的读者

本书作为集群调度和管理实践的入门书籍,旨在帮助系统开发和运维工程师快速了解偏IaaS、PaaS这层“资源”的调度和管理的基础性、实践性的内容,尤其适合从事开发、运维、管理大规模集群的读者阅读。对于从事集群调度和管理的专业人员,会区分两个业务重点:一是不再有机会从0到1经历架构设计和实现,但是需要全面了解既有集群调度和管理系统的特征、接口服务能力,以进行贴合业务的二次应用开发;二是正在经历集群规模扩大的过程,处理各种意想不到的在线问题时,需要深入理解既有集群调度和管理的设计与实现细节。本书的内容融合了这两者的实践经验,立足根本问题,探讨多种架构实现背后的Why,帮助大家更透彻地理解集群调度和管理的IaaS或分布式操作系统的业务,更好地根据实际需求进行架构取舍和平衡,从而以最合适的架构、最低的投入,获取最好的实践落地结果。

本书内容特点

本书内容源于作者在阿里巴巴集团的工作经验,有其特有的业务场景和背景,在梳理集群调度和管理知识的过程中,尽量总结、抽象出一般性的特征和解法。这些总结更偏重工程实践的“语言”,距离“学术”的严谨性尚存明显的差距。限于个人有限的经验,一些强业务、强专业性、偏垂直性的领域,例如大数据、搜索、IoT边缘计算等领域的资源调度和管理内容超出本书范围。此外,当下最大的集群调度和管理系统是各大云服务厂商提供云产品的操作系统,例如阿里云的飞天操作系统。关于云产品调度和管理不一样的或者有特色的地方,本书会遵循阿里巴巴信息披露安全性的原则,在相关章节中做总结、抽象的介绍,以期能对读者有所启发和帮助。

本书内容聚焦于资源侧:集群调度和管理,非一般性的应用集群调度和管理。本书按集群调度和集群管理两大部分来组织内容,从不同的侧重点出发,集群调度部分侧重调度,集群管理部分侧重管理,但实质上这两部分是相辅相成的。集群管理是为了保障集群系统被更好地调度,集群调度是集群管理的重要内容和抓手。

本书内容源于作者在阿里巴巴集团内部的资源调度和管理的实践经验,同时,作者也广泛阅读了网络上的相关技术文档、开源代码。本书在修改、完善的过程中,得到了阿里巴巴集群调度和管理领域的同事的指导。全书分两部分,共7章。对于已有相关经验的读者,建议直接阅读第2章,其中会给出指标的含义,并给出提升指标的实践经验;对于未来计划从事集群调度和管理的读者,可以从第1、3章学习基本调度算法开始,快速掌握集群调度的基本概念和调度算法的基本原理;对于架构师,建议阅读第4章;对于SRE工程师,特别是负责基础设施的管理运维人员,建议阅读集群管理部分的第5~7章。

整体上,内容按问题抽象、解决策略、架构设计、案例分析来组织,并假设读者有一定的互联网应用开发经验,对Kubernetes、Hadoop、Messos、Borg等系统有所了解,并阅读过相关文章。

同时,本书也穿插介绍了Kubernetes的调度算法、标签设计、一致性更新等内容,可以帮助正在从事云原生服务开发的人员,从资源调度、资源管理的视角理解Kubernetes的架构设计和特性。

调度评测是连接学术和工程的重要桥梁。第3章的最后一节,系统地介绍了相关评测系统、评测数据,以及一般生产环境中评测系统的构建和实现。期望这部分内容能对负责调度质量、调度算法优化的人员有所启发和帮助。

在大规模集群实践过程中,管理百万级别的服务器,单靠人工经验已经很难高效、准确应对。数据驱动是唯一的途径。那么,在大规模集群调度和管理系统中,如何构建数据体系,如数据的采集、处理、交互、联动等,在第7章中有整体性介绍。这部分对于组织、系统负责人而言,是集群调度和管理的业务决策“心脏”,也是整个集群调度和管理体系中建设周期最长、建设投入巨大的部分。毫无疑问,数据是重要纽带,成为调度和管理的重要基础。在互联网上,大规模数据实践一是围绕用户展开的;二是围绕服务器展开的。这部分数据安全、数据主权的重要性也是显而易见的。所以,对于从事财务、安全、算法推荐的人员,也建议关注这部分内容。

章节概述

第1章介绍集群任务与集群资源调度。集群任务调度是集群资源调度的“前置”依赖项。在定义问题域部分,介绍本书中所描述的聚焦于资源侧的集群调度解决什么问题,以及资源的定义是什么。

第2章介绍本质问题和衡量。在资源调度这个领域,本质问题和衡量指标是什么。

第3章介绍调度算法的基本原理。从一般性的问题抽象算法原理到开源系统的算法,再到典型业务实践“双11”的算法,围绕算法实践,进一步介绍单机调度、调度评测的基本内容。

第4章介绍调度架构设计和实践。作为基础设施系统,架构设计得合理,将从架构层面事先规避很多风险和问题。尤其是基础设施侧,因处于应用的下游,任何变更迭代都需要兼顾对上的透明,可以说是开着飞机的同时换引擎。这部分内容值得花一定的时间来不断探讨和优化。

第5章介绍集群管理的问题抽象。这里仍然用聚焦于资源和集群调度的管理来界定问题域。

第6章介绍管理问题的衡量。通过一些指标度量来衡量管理的效果,或者说指导集群管理的迭代优化方向。

第7章介绍管理策略。聚焦于调度管理,抽取高频、全局性的关键问题。之所以将一些原本很“技术”的东西纳入管理部分,是因为这部分内容的挑战来自“管理”的东西要多于“技术”——偏横向、跨组织、跨团队的协同。

本书最后给出了本领域顶会关注、重要术语、重要论文的列表。这部分旨在帮助读者更广泛地扩充知识,紧跟最前沿技术动态。

读者可能会发现,全书聚焦于Online Service Workload的资源,很少涉及Batch Job Service Workload的资源,例如与混部相关的内容稍有介绍。而且,在一些指标的定义上,和我们惯用的概念有所不同。例如,2.6节针对资源利用率提出的思想和内容,源自张利平老师(花名:谷朴)多年大规模集群调度和管理实践经验,并在Google取得了重要成果。另外,单机调度这部分内容对于很多一线开发人员来说显得有些陌生,主要是因为在追求集群高利用率的场景下,它才凸显必要性,才需要从中心精细化到单机。优化集群利用率,技术是重要手段,集群商业模式(是租用的还是自建的)等其他优化手段对利用率提升可起到辅助作用;集群资源的运营模式对利用率提升有影响(是一次性交付资源,还是持续性交付算力);费用管理方式(企业内部是否考核资源利用率,以及是在什么范围进行费用考核的)是利用率提升的关键影响因素,尤其是在大规模资源池被广泛应用于租用场景的今天。在最后章节中简要介绍了收费系统的作用和构建。

提示:本书中提到的“链接1”至“链接108”,请从http://www.broadview.com.cn/40822下载“参考资料.pdf”进行查询。

免责声明

本书从开始构思、初稿撰写到最终出版经过一年半多的时间,而计算机相关技术的发展一日千里,所以客观上,本书一定存在部分内容滞后、不匹配最新的业务场景需求的情况。而且,本书内容聚焦于资源侧的集群调度和管理,从工程实践的角度来分享、探讨,与学术前沿显然存在距离。本书中的实践案例,多源自作者在阿里巴巴的集群调度和管理的实践经验,带有明显的“电商”大背景的业务属性,并非任意场景都匹配。如今,随着云计算的普及,多云或者混合云背景下的资源调度和管理将会成为主流技术场景。典型的如在IoT、新制造场景下,云+边+端结合、面向算力的调度技术,本书并没有进行系统的介绍和探讨。总之,本书仅建议作为生产实践的参考,而关于具体生产实践的问题,则应立足于场景,针对具体问题进行具体分析。盲目地运用本书内容,对生产环境所造成的影响均由读者自行负责,与本书作者无关。

本书内容与作者在阿里巴巴的工作实践分不开,在撰写本书的过程中也得到了阿里巴巴同事的帮助和指导。全书内容的梳理、总结由作者发起并负责,书中任何内容错误或者引用不规范、遗漏的地方,均由作者个人承担责任。本书内容不代表阿里巴巴的官方技术,但是本书的所有知识产权,均遵循阿里巴巴知识产权管理办法的要求。

致谢

感谢张春雨编辑的多次联系,才使我萌发了写书的冲动,并尝试开始写书。写书的过程正值我转岗到阿里云库存调度系统期间——从阿里巴巴交易体系的集群调度和管理转为阿里云的集群调度和管理。其间一方面要快速熟悉飞天操作系统的各项技术,一方面要放空自己,重新开始融入云的技术产品服务中,只能利用周末的时间,梳理、总结过去的经验和文档,感谢家人对此的支持。

2020年新冠肺炎疫情爆发,当时我正在湖北黄冈老家居家隔离。在面临各种压力的情况下,一度有过放弃写书的念头。感谢阿里巴巴的防护物资支援,感谢阿里云智能库存调度团队Leader(徐海弘、田政雄)的工作关怀,使我很快回归相对正常的工作、生活,并在周末继续进行梳理、总结。

我广泛学习了阿里巴巴内部技术在线文档,阅读了互联网上各位同仁的总结分享文章,站在巨人的肩膀上,才有了本书。感谢互联网时代的知识共享渠道,感谢本领域的前辈、同仁的无私贡献。

感谢阿里巴巴集团研究员张利平(花名:谷朴)老师,本书2.6节内容就源自他的分享。在实践过程中,我也曾得到张利平老师的专业指导,如对单机调度、数据驱动等的理解和设计。

感谢曾经合作的同事何颖(花名:浣碧)、黄涛(花名:智清)、丁海洋(花名:临石),本书调度评测部分就吸纳和汇总了他们的经验与技术文档。

感谢同事吕舜(花名:任啸)、程耀伟(花名:梦跃)等,在实践过程中,与他们有过深入的讨论和验证。本书单机调度部分的总结就是基于这部分经验。

在统一资源池、数据驱动部分,感谢曾经合作的同事胡伟琪(花名:白慕)、黄涛(花名:智清)、梁耀斌(花名:追源)、陈杰(花名:韩堂)、梁啟成(花名:啟成)、张利平(花名:谷朴)、宋毅(花名:义送)、张顺德(花名:孟宏)、周正茂(花名:峯华)等。正是在大家的协同合作下,才有了一线规模化场景下的实践经验。

在计费管理部分,吸纳了技术评审过程,感谢陈泽汉(花名:杨仪)、刘久轶(花名:克行)、曲小军(花名:弥空)、陈喻(花名:亚松)等的分享。

在基础设施镜像化部分,吸纳了技术评审过程,感谢梁耀斌(花名:追源)、张利平(花名:谷朴)的分享。

最后,感谢丁宇(花名:叔同)的邀请,我从专注7年的Lucene、Solr搜索引擎转战集群调度和管理,并有幸在丁宇的帮助下,能够持续地在集群调度和管理领域工作接近5年的时间,经历从0到1地构建大规模系统架构和设计的过程,管理百万台服务器,才有了集群资源调度和管理的点滴总结与经验。感谢引路人。

有幸进入云计算场景后,我继续围绕集群调度和管理做一些设计与研发。在阿里云智能事业群下的弹性计算库存调度、云产品售卖、云产品运营推荐新的赛道上,全链路地参与和编码,收获了不一样的技术经验和业务能力的成长。云管理的服务器规模更大,需要满足产品化要求、更苛刻的SLA要求,云环境下大规模集群调度和管理更具挑战性。感谢时代、感谢公司给予我参与构建社会数字基础设施的机会。

在本书从初稿到出版的过程中,得到了许多资深人士的审阅和指导。例如,感谢丁宇对本书内容的组织、概念的统一、更广泛的受众等方面提出宝贵的建议,感谢张春雨编辑一开始就指导全书章节、内容格式、排版等,并给出样例参考。

本书中任何内容错误或者引用不规范、遗漏的地方,请大家及时反馈和纠正,所有疑问、反馈、互动等内容均公开展示在GitHub[2]上对应于本书的project中。感谢认识的或者不认识的你们,感谢你们的支持和爱心。本书稿酬所得,将公益性捐赠给支付宝的爱心捐赠项目:彩虹助学 筑梦高原。


[1]见参考资料[3]。

[2]见参考资料[76]。