最近平台工程这个概念越来越火爆,Gartner 的预测,到 2026 年,80% 的软件工程组织将拥有平台工程团队,来提供内部服务、组件和应用程序交付工具,作为可重复使用的资源。
平台工程到底是什么?根据 Red Hat SRE 高级总监 Narayanan Raghavan 的说法,平台工程的主要功能是创建和提供一套通用的工具或构件,例如持续集成/持续部署(CI/CD)或开发工具链等软件组件,开发人员可以将其作为产品开发的基础。本文详细地阐述了为什么需要这个平台工程师这个新角色,真实世界的平台工程团队是做什么的 ,如何正确地实施平台工程,当然还有它与 DevOps 和云工程师的区别与联系,以及它是否真的取代了这些角色?
每当出现新的角色或概念时,第一个问题总是:我们为什么需要它?因为其背后一定存在着用现有的解决方案无法解决的问题。
在传统组织中,开发人员和运维人员归属于不同的团队。开发人员负责应用程序的编程,完成后将打包好的应用程序交给运维人员负责部署和运行。虽然有专门的运维团队来管理基础设施、维护全公司的 CI/CD 平台或其他平台,但整个流程仍然比较僵化和缓慢。例如,开发人员需要对基础设施进行任何变更或申请基础设施资源时,需要等待运维人员的操作。反过来,运维团队也需要等待开发人员的操作才能修复影响部署或应用程序运行的问题。
DevOps 的出现消除了僵化、充满限制的流程,加强了开发和运维之间的沟通,也消除了开发和运维这两个部分之间的通信挑战和知识孤岛。并构建了统一的 DevOps 团队,同时开发应用程序和管理底层基础设施。这种理念是对传统工作方式的巨大改进。虽然这种方式更灵活、更快速、更酷,但也带来了大量的责任和认知负担。
在一个 DevOps 团队中,每个人都开发应用程序并在应用程序下运行整个堆栈。这包括设置 CI/CD 平台、创建脚本、配置 Kubernetes 集群、添加安全扫描、维护 Helm 图表等。当团队规模扩大时,比如说你有十个这样的团队,如果每个团队都在构建自己的平台,将会非常低效,浪费并且会给工程师带来很高的认知负担。尤其像 Kubernetes 这样的复杂系统,管理基础设施的部分甚至变得比编写应用程序代码和生成业务逻辑本身更加困难。导致您的团队忙于构建平台,而没有时间在应用程序中构建业务价值。
如果团队必须管理应用程序下的整个基础设施堆栈,就需要大量的专业知识,这意味着需要雇佣更多经验丰富的工程师,也就是更高的人力资源成本。每个新项目团队在发布应用程序之前都会花费相同的时间和精力来设置基础设施。即使您让这些团队管理自己的基础设施和平台,他们可能没有足够的专业知识来正确完成所有事情。这可能导致 Kubernetes 配置错误,缺乏监控和日志记录,或者整个系统出现安全问题。当整个公司只有一个合规或安全团队,而数十个团队用不同的技术堆栈和方式运行应用程序时,合规或安全团队会很难形成对应用程序的见解,也很难帮助所有这些团队实施合适的安全措施。
SRE 提倡“谁构建,谁运行”的概念是在应用程序不像今天那么复杂并且底层运行环境也不像今天那么复杂时创建的。 在当今高度复杂的多云、多集群或者混合云的世界,有成千上万的微服务,以及为这些微服务提供服务的数百个服务,要求开发者将这个概念融入到他们的工作中就有点过分了,也并不能最有效地利用该工程师的技能。
因此,快速总结一下,如果我们拥有自主 DevOps 团队,会让整个流程快速和灵活,但也会导致单一团队承担过多责任,认知负荷高,以及组织范围内的不一致性。如果我们拥有的是传统的独立开发和运维团队,基础设施得到管理和保护,但流程极其缓慢,也限制了开发人员的工作。这就是平台工程可以拯救世界的地方,但只有在正确实施的情况下才能拯救世界。
那么平台工程是如何解决这些问题的呢?平台工程师采用部署和运行应用程序所需的工具,并在团队之间标准化其使用。因此,如果 10 个团队使用 10 种不同的 CI/CD 解决方案,平台工程师则制作一个标准的 CI/CD 产品。或者,每个团队都使用 Kubernetes,但方式不同,平台工程师则标准化 Kubernetes 的使用。因此,平台工程师标准化了应用程序非功能性需求的所有内容。那么我们需要的东西或者所谓的应用程序的非功能性需求怎么办?
非功能性需求基本上是指那些非业务逻辑,但却是将应用程序交付给最终用户所必需的部分。首先,每个应用程序都需要一个版本控制系统。每个应用程序都需要 CI/CD 管道。应用程序需要在某个地方运行,比如运行时环境、Kubernetes。当然,Kubernetes 集群需要底层基础设施,比如 AWS 云平台,甚至是多云平台。应用程序和底层基础设施也需要日志记录和监控。该应用程序还需要适当的安全性。正如您所看到的,需要设置很多内容才能使应用程序正常运行,并且每个类别都有许多不同的工具和技术,还有大量的 CI/CD 平台、不同的云平台等等。