建立成功平台工程的关键:自助式 IaC
从技术上讲,云一直都是自助式服务,但由于其在实践中的复杂性,许多开发人员并不喜欢。随着公司采用现代架构(云原生、无服务器等)和新的提供商(多云、SaaS 应用程序),以及云提供商发布更多服务,云变得更加难以使用。
这就是为什么有竞争力的工程团队现在都在想办法通过消除瓶颈来成倍提高其 DevOps、网站可靠性和基础设施工程师的产出,从而加快所有开发人员的工作效率。
平台工程提供了一种解决方案,它使开发团队能够自助构建、部署和管理自己的云基础设施,同时遵循最佳实践。
让我们来探讨一下平台工程的好处、成功的平台团队用于授权开发人员自助服务基础架构的三种主要方法,以及选择支持所用方法的基础架构即代码(IaC)框架的重要性。
平台工程的重要性
开发人员需要基础架构来运行他们的应用程序和服务。传统上,许多公司都由中央基础架构团队代表开发人员调配和管理基础架构,但这种模式很容易出现瓶颈,因为开发人员对基础架构的要求压得中心团队喘不过气来。
随着现代开发团队承担起拥有和运维自己基础架构的责任,他们也需要简单快捷的方法来配置基础架构。你可能会认为,随着这些转变,中心基础架构团队的需求减少了,但他们在助力开发人员和公司在这个该领域取得成功方面发挥着至关重要的作用。
从开发人员体验的角度来看,平台工程可以解决几个问题。
首先,云过于复杂和笨重,大多数开发人员在没有抽象和工具的情况下无法使用。微服务和无服务器等现代云架构增加了管理基础设施的复杂性。许多公司都在 Kubernetes 上运行应用程序。虽然开发人员需要负责对运行其应用程序的基础架构进行更多管理,但期望所有开发人员都深入了解云基础架构的复杂性是不切实际的。
其次,开发人员需要了解应配置哪些基础架构资源,以及如何遵守公司确定的最佳实践,如安全和成本问题、云区域、监管要求和经批准的云提供商。仅在 AWS 上就有 200 多种服务可供选择,因此确定正确的资源并非易事。
第三,开发人员需要一种简单的方法来调配、配置和管理基础设施。这可能会很复杂,因为许多架构使用来自一个云的多种资源,它们通常包括来自其他云或 SaaS 供应商的资源,而且在部署 Kubernetes 这样复杂的东西时可能会遇到挑战。
通过分散基础设施的管理,公司给开发人员带来了新的复杂问题。因此,将复杂问题抽象化,使开发人员能够专注于更快地发布功能的需求变得更加迫切。
这就是平台工程的用武之地。平台团队构建共享工具和服务,帮助开发团队自助开发、部署和运维云基础设施。这包括云基础设施、容器协调平台、数据库、网络、监控、代码库和部署流水线。
注意:高效的平台团队将其服务的应用程序开发人员视为客户,必须了解他们,并通过产品解决他们的问题。
建立自助式 IaC 的方法
成功的平台团队有几个特征。其中包括业务的转变,从仅仅将基础设施团队视为成本中心转变为业务的加速器。通常情况下,这意味着业务部门已赋予团队执行平台工程模型的权力和资源。高效的平台团队还采用客户驱动的思维方式,将所服务的应用开发人员视为客户,必须通过解决他们问题的产品来了解和赢得他们。
最后一点是,成功的平台团队都拥有才华横溢的工程师,他们具备多学科的技能、经验和同理心,能够在公司内部打造优秀的产品、满足开发人员的需求并 “走向市场”。通常,他们拥有基础设施或 DevOps 和软件工程等多个工程学科的经验,以及软件工程师、DevOps 工程师、网站可靠性工程师、云架构师、云工程师等各种职称。
平台工程师为开发人员提供基础设施和工具,帮助他们高效地部署和运行应用程序,使开发人员能够专注于构建优秀的软件。
概括地说,平台团队主要采用三种方法让开发人员能够自助服务基础设施。
第一种是创建基础架构库,表达基础架构资源和配置,用于使用部署工具配置基础架构。
第二种是创建基础架构命令行接口,允许开发人员通过熟悉的 CLI(类似于 Heroku)调配和管理基础架构。第三种是创建基础架构平台应用程序,为开发人员提供图形用户界面来配置和管理基础架构。
所有这些方法的共同点是采用标准化架构,其中包含平台团队定义的最佳实践、执行部署规则的机制以及统一的部署工作流程(代码审查、拉取请求、CI/CD、测试等)。
为了采用这些方法,平台团队需要一个支持其产品的部署框架。尽管构建自己的定制部署工具可能很诱人,但采用基础架构即代码框架是一种更高效、功能更强的方法。
IaC 允许工程师以管理代码的相同方式定义和管理基础架构。这种方法具有多种优势,包括版本控制、测试、可重用性和自动化。目前存在许多框架,有些是开源的,有些则不是,它们可能是特定于云的,也可能是多云的。大多数框架使用基于 YAML/JSON 的特定领域语言 (DSL),也有一些框架使用通用编程语言。
虽然每种方法各有利弊,但许多平台团队发现,采用通用语言进行 IaC 是最灵活、最强大、适应性最强的方法。这些语言更容易对复杂的基础设施进行建模,因为它们本机支持循环和条件等构造,并为抽象和重用提供了熟悉而成熟的模型。
而且,如果 IaC 是用开发人员已经掌握的语言编写的,他们使用起来就会容易得多。
Walrus 就是基于 IaC 采用平台工程技术的典范。它是一款开源应用平台,基于 IaC 工具如 Terraform 和 OpenTofu,采用双层抽象架构。其中包括 IaC 模板(如 Terraform 模块)和资源定义(Resource Definition)。IaC 模板允许运维人员创建可复用的基础设施配置,减少重复性工作。通过资源定义,运维人员可设定和执行公司策略,包括云资源的使用规则、配置标准及访问权限,确保资源使用的安全性和合规性。这使得开发人员能通过自助服务方式配置和部署资源,无需关注底层技术细节,专注于应用开发。同时,Walrus 遵循 DRY (Don't Repeat Yourself) 原则,保证跨平台和云环境的一致性,避免代码冗余。
另外,Walrus 可以编排整套应用系统,并提供统一的视图简化资源和环境管理。包括:
- 应用统一编排:以应用为中心,对应用服务集周边资源依赖(数据库、中间件、负载均衡、网络等)进行统一编排部署。并自动生成依赖图,直观展示底层模块、运行状态及依赖关系等。
- 动态环境管理:支持灵活的环境配置及管理,支持一键创建、克隆、停止整个应用环境或单个服务,满足各类环境管理需求。
- 统一视图:Walrus 在单一资源视图中提供针对资源详情各类操作的支持,如查看资源列表、管理资源及其底层组件,查看日志、进行终端调试故障、获取服务的URL等。用户无需切换界面即可完成资源管理。
可见,开发团队是可以独立配置基础架构,而不会给平台团队带来大量成本,并消除了配置瓶颈。同时,平台团队可以确保开发人员调配的是经过批准的基础设施,从而降低了错误配置的风险。
总结
平台工程是一门强大的新兴工程学科,可帮助企业提高开发人员的工作效率,并从云投资中获得更多价值。平台工程团队采用以客户为中心的方法,为开发人员提供自助式基础架构工具,满足他们的需求并提高他们的工作效率,从而使他们能够专注于构建优秀的软件。通过这种工具,开发人员可以为其应用程序配置正确的基础架构并对其进行管理。
选择 IaC 框架是平台工程战略的重要基础,因为它定义了如何在整个组织内对基础架构进行建模、测试、分布和部署。
特别是,IaC 语言的选择会影响基础设施的可用性、可重用性和扩展能力。通用语言具有很大的优势,因为它们已经被广泛采用,比 DSL 更灵活,表达能力更强,而且拥有丰富的工具和框架生态系统,可以提高工作效率。