2022 年底,InfoQ 发了一篇爆款文,《DevOps 已死,平台工程才是未来》,这里总结了一个太长不看版:
还提到 Gartner 的炒作周期图,将平台工程定义为正在上升期的技术,并且会在 2-5 年达到平台期。
其实这部分回答了我一直以来的一个小迷惑——所谓大一统的运维平台/工具,到底有没有存在的意义?是不是说假设 DevOps 团队成长起来了,就不需要这种集中产出的工具和规范了?
首先,我们来看看 DevOps,DevOps 是一种文化,而非一种角色。在 DevOps 文化中,开发和运维团队需要更紧密地协作,共同为业务提供更好的服务。但这并不意味着所有开发人员都需要成为运维专家,或者所有运维人员都需要成为开发专家。
在实践中,即使是 DevOps 团队,也需要有明确的职责划分和专业分工。大一统的运维平台/工具的存在意义就在于它可以提供一种标准化和自动化的方式,使得 DevOps 团队能更高效地进行日常工作,而不需要过度关注具体的运维细节。这并不是说 DevOps 团队成长起来就不需要这种工具了,相反,随着团队的成熟,这种工具的价值会更加明显。
再来看看高级工程师组成的 DevOps 梦之队。虽然有一些高级工程师在多个技术领域都有深厚的造诣,但是他们的存在并不能解决所有问题。专家本身的技术一定是有所侧重和偏爱的,而且在多个不同种类的工作之间进行频繁切换会严重影响效率。而且,聘用多个领域的专家组成全职能 DevOps 团队的成本非常高,这对于大多数公司来说是不切实际的。
最后,我们来看看平台工程。平台工程将复杂的运维任务抽象为平台服务,由专门的平台工程团队提供支持。这样,开发团队就可以将更多的精力投入到业务开发上,而不是被运维问题所困扰。平台工程团队一般由具有深厚运维经验和开发能力的高级工程师组成,他们可以为开发团队提供高质量的平台服务,从而提高整个组织的开发效率。因此,平台工程才是未来的趋势。
关于平台工程的文章中一般还会提到一本书:《Team Topologies》,这本书中,详细描述了通常被称为成本中心的平台团队的服务范围、交付模式、运营内容等做了一番阐述,建议 SRE 工具建设领域的朋友们阅读本书增强自信。根据本书描述,有四种基本的拓扑结构,团队应该围绕这些拓扑结构进行:
下面说点常见的场景。
首先说的是云原生,很多人都领略过 Cloudscope Landscape 的宏伟壮观。选型时无从下手,尤其是面对同类项目(例如 ELK 栈和 Loki 栈,Docker 和 Podman 等)时,社交网络定选型是个常态。
然而大家心里应该都清楚,引入一个“看上去不错”开源软件进入企业系统,是有很多需要考虑的内容的,例如:
软件选定之后还面临世界对接的问题,常见的问题包括认证、可观测性、存储等的对接,这些还是一些点状的功能,在云原生体系里,还有一个更严重的体系冲突问题。
我常用这张图来把“普通”开源软件和云原生软件的采用过程进行对比:
一个有一定规模的企业的 IT 体系,条条框框是相对固定的,软件规模不管大小,都可以服服帖帖、按部就班的落到代表体系规则的鱼骨图里,而以 Kubernetes 为代表的云原生生态则不同,其中自带了各种条条框框,不光是改了改你的部署运行方式,还对你的运维方式产生深远影响,甚至对你的应用架构指指点点。如果不照章办事,就可能和生态不兼容。因此云原生进入企业,通常会跟 IT 系统的现存规则交缠在一起,形成一种相互影响和制约的新体系。
以我熟悉的 Kubernetes 为例,一些用户的操作,可能造成各种奇怪的不良后果,例如:
Kubernetes 对象的易用性,随手可得的各种技巧,都给误操作和危险行为以可乘之机,然而实际情况是,如果是多个团队自行进行运维,可能就会产生五花八门的不同风格的集群,如下图所示:
很明显,不同团队因为各自的业务目标、技能水平等,会产生各种不同风格的集群,自然而然,不同的集群,有机会进行不同的“乱搞”,也会出现不同的问题。
根据流行定义:平台工程是一门设计和构建工具链和工作流的学科,在云原生时代为软件工程组织提供自助服务能力。平台工程师提供一个集成的产品,通常被称为 “内部开发者平台”,涵盖了应用程序整个生命周期的操作需要。
以我所见,平台工程面在三个方面为组织提供支持基础设施、规范和工具:
现代软件运行需要大量的基础设施,除了传统的 网络、计算、存储之外,还包括大量的服务化的中间件等能力,OpenStack、Kubernetes 等资源编排工具也属于是传统管控难题。平台团队可以综合基础设施自有的管控运维能力,使用 Terraform、Kubernetes CRD、等资源抽象和自动化手段,为开发团队及其产品,规划、搭建、自动化和优化可靠、安全、高性能的基础设施,以支持业务的运行和发展。
企业 IT 环境通常会有一系列的规范,例如设施命名、账号管理、IP 分配等等;另外操作系统、容器集群等具有极大灵活性的基础设施,也通常是需要有一定的规范化管理的,这里提到的规范至少包括:
平台工程的主要产出就是一个被称为 idp(内部开发平台)的工具,以此工具为开发团队提供支持,在实际工作中,工具部分的工作内容至少包括: