平台工程的优势,以及成功团队用于赋予开发人员自主管理基础设施的三种主要方法的介绍。
翻译自 The Key to Successful Platform Engineering: Self-Service IaC 。
云计算一直在技术上实现了自助式服务,但在实践中,由于其复杂性,对许多开发人员而言并非如此。随着公司采用现代架构(云原生、无服务器等)和新的提供商(多云、SaaS 应用程序)以及云服务提供商发布更多的服务,使用云计算变得越来越困难。
因此,有竞争力的工程团队现在正在研究如何通过消除瓶颈,加快所有开发人员的生产力,从而将 DevOps 、站点可靠性和基础设施工程师的产出成倍增加。
平台工程提供了一种解决方案,它使开发团队能够按照最佳实践构建、部署和管理他们自己的云基础设施,并且可以按照自助服务的方式进行操作。
让我们探讨一下平台工程的优势以及成功的平台团队用于赋予开发人员自主管理基础设施的三种主要方法,以及选择一个支持所采用方法的基础设施即代码(IaC)框架的重要性。
开发人员需要基础设施来运行其应用程序和服务。传统上,许多公司都有中央基础设施团队来代表开发人员进行基础设施的供应和管理,但这种模式容易出现瓶颈,因为开发人员对基础设施的请求超过了中央团队的处理能力。
随着现代开发团队开始承担拥有和运营自己基础设施的责任,他们还需要简单且快速的方式来供应基础设施,同时遵循最佳实践。你可能会认为随着这些转变,中央基础设施团队的需求减少了,但他们在使开发人员和公司在这个新世界中取得成功方面扮演着至关重要的角色。
虽然开发人员日益更多的负责管理基础设施,但期望所有开发人员深入了解云基础设施是不切实际的。
平台工程从开发人员体验的角度解决了几个问题。
首先,云计算对于大多数开发人员来说过于复杂和笨重,没有抽象和工具支持很难使用。现代的云架构,如微服务和无服务器,增加了管理基础设施的复杂性。许多公司正在在 Kubernetes 上运行应用程序。虽然开发人员日益负责管理运行其应用程序的基础设施,但期望所有开发人员深入了解云基础设施的复杂细节是不现实的。
其次,开发人员需要了解哪些基础设施资源需要供应,以及如何遵循公司确定的最佳实践,比如安全和成本问题、云区域、法规要求和批准的云提供商。在 AWS 上有超过 200 种可供选择的服务,确定正确的资源并非简单任务。
第三,开发人员需要一种简便的方式来供应、配置和管理基础设施。由于许多架构使用来自一个云的多个资源,通常还包括来自其他云或 SaaS 供应商的资源,当部署类似 Kubernetes 等复杂内容时可能会遇到挑战。
通过将基础设施管理分散到公司中,公司为开发人员带来了相当大的新复杂性。为了让开发人员能够专注于更快地发布功能,摆脱这些复杂性的需求变得更加迫切。
这就是平台工程的作用。平台团队构建共享工具和服务,帮助开发团队在自助服务的基础上开发、部署和运营云基础设施。这包括云基础设施、容器编排平台、数据库、网络、监控、代码库和部署流水线。
有效的平台团队将其服务的应用程序开发人员视为客户,通过解决他们的问题来理解和赢得他们的支持。
成功的平台团队有一些特征。其中一点是从将基础设施团队仅视为成本中心转变为业务的助推器。通常,这意味着业务授权团队执行平台工程模式的权威和资源。有效的平台团队还采用以客户为导向的思维方式,将其服务的应用程序开发人员视为必须通过解决问题的产品来理解和赢得的客户。
最后,但同样重要的是,成功的平台团队由具有多学科技能、经验和同理心的优秀工程师组成,以构建出色的产品,满足开发人员的需求,并在公司内部“上市”(推广)。通常,他们在许多工程学科上都有经验,如基础设施或 DevOps 和软件工程,以及各种职称,如软件工程师、 DevOps 工程师、站点可靠性工程师、云架构师、云工程师等。
通过为开发人员提供高效的基础设施和工具来部署和运行他们的应用程序,平台工程师使开发人员能够专注于构建优秀的软件。
广泛来说,有三种主要方法可供平台团队使用,以使开发人员可以自助式地使用基础设施。第一种是创建表示基础设施资源和配置的基础设施库,用于使用部署工具进行基础设施供应。
第二种是创建基础设施命令行界面,允许开发人员通过类似 Heroku 的熟悉 CLI 进行基础设施的供应和管理。第三种是创建基础设施平台应用程序,为开发人员提供图形用户界面来进行基础设施的供应和管理。
这些方法的共同点是标准化的架构,其中包含由平台团队定义的最佳实践,以及用于强制实施部署规则和部署的统一工作流程(代码审查、拉取请求、持续集成/持续交付、测试等)。主要区别在于开发人员与基础设施交互的
界面,所选择的方法通常取决于实现平台团队目标的最佳方式。
为了实现这些方法,平台团队需要一个支持其产品的部署框架。虽然构建自定义的部署工具可能会诱人,但更高效和功能强大的方法是采用基础设施即代码(IaC)框架。
IaC 允许工程师以与管理代码相同的方式定义和管理基础设施。这种方法带来了多种好处,包括版本控制、测试、可重用性和自动化。许多框架可供选择,有些是开源的,有些不是,可能是特定于云计算提供商的,也可能是多云的。大多数使用基于 YAML/JSON 的领域专用语言(DSL),而有些使用通用编程语言。
尽管每种方法都有其优缺点,但许多平台团队发现采用通用编程语言作为 IaC 提供了最灵活、功能强大和适应性强的方法。这些语言使得建模复杂基础设施更容易,因为它们原生支持循环和条件等结构,同时提供了熟悉和成熟的抽象和重用模型。
最后但同样重要的是,当 IaC 使用开发人员已经熟悉的语言编写时,他们更容易使用。
一个很好的采用平台工程的公司例子是 Elkjøp Nordic ,北欧地区领先的消费电子产品零售商。该公司采取了现代化策略,通过让开发团队对其服务和基础设施拥有所有权,来增加开发团队的灵活性。同时,它还希望创建安全和合规性的防护措施,以防止问题发生,同时保持开发人员的自由。
为了实现这一目标,他们建立了一个基础设施平台应用程序,使开发人员能够在 Azure 上供应基于 Kubernetes 运行的基础设施。
开发人员可以通过 Web 界面指定所需的基础设施,例如环境类型和访问权限。该应用程序将配置和供应所有必要的基础设施资源,包括为该项目设置的 GitHub 代码库。该应用程序采用了 React、TypeScript 和 Pulumi 作为 IaC 框架。Pulumi 使得公司可以在 TypeScript 中定义可重用的基础设施架构。该应用程序还使用了 Pulumi 的自动化 API ,将 IaC 功能嵌入到应用程序中,例如在 Azure 和 GitHub 上供应、配置和销毁基础设施。
结果是,开发团队可以独立供应基础设施,而无需在平台团队上产生显著的成本,并消除供应瓶颈。同时,平台团队可以确保开发人员供应已批准的基础设施,从而降低配置错误的风险。您可以在这篇博文中了解更多关于 Elkjøp 平台工程的信息。
平台工程是一门强大且新兴的工程学科,它正在帮助公司提高开发人员的生产力,并从云计算投资中获得更多价值。通过采用以客户为中心的方法,平台工程团队使开发人员可以专注于构建优秀的软件,为他们提供满足实际需求、提高生产力的自助式基础设施工具。这些工具使得开发人员能够供应适合其应用程序的正确基础设施,并进行管理。
选择一种基础设施即代码(IaC)框架是平台工程策略的重要基础,因为它定义了如何在组织中对基础设施进行建模、测试、分发和部署。
特别是,IaC 语言的选择会影响基础设施的可用性、可重用性和扩展能力。通用编程语言提供了重大优势,因为它们已经广泛应用,比 DSL 语言更具灵活性和表达能力,并且附带了丰富的工具和框架生态系统,提高了生产力。