2023年度CNCF 发布了《平台工程白皮书》,系统性介绍了如何构建云原生计算平台以及平台可能提供的能力,包括为什么需要平台、平台是什么、平台需要哪些能力,一个成功的平台所应该具备的特性等等。整个白皮书主要分为以下章节内容
- 为什么需要一个平台
- 什么是平台
- 成功平台所应具备的特性
- 成功的平台团队应具备的特性
- 实施平台的挑战
- 如何衡量平台的成功
- 平台的能力
- 词汇表
《平台工程白皮书》整个篇幅内容比较多,本节重点介绍一下白皮书中关于什么是平台以及成功平台所应具备的特性等方面内容:
- 什么是平台
云原生计算平台是根据平台用户的需求定义和呈现的功能的集成。它是一个跨领域的,可确保为广泛的应用程序和用例获取和集成典型功能和服务的一致体验。一个良好平台为使用和管理其功能和服务(如门户网站、项目模板和自助API)提供了一致的用户体验。
根据Atlassian的说法:“平台团队创建的功能可以被众多流对齐的产品团队使用,而几乎没有额外的开销..... 平台团队最大限度地减少资源和认知负担.....平台团队可以将不同产品的体验统一起来。”
Martin Fowler和Evan Bottcher说过:“数字平台是一组自助服务API、工具、服务、知识和支持的基础,它们都被组织到一个统一的内部产品中。自主交付团队可以利用该平台以更快的速度交付产品功能,减少协调。”
平台所支持的特定功能和场景应由利益相关者和用户的需求决定。虽然平台提供了这些所需的功能,但需要注意的是,平台团队不应该总是自己实现它们。可以让托管服务提供商或专门的内部团队来维护支持实现,而平台则是提供一致性的“最薄合理层”,可在所提供的实现之间提供一致性并满足组织的要求。例如,一个非常简单的“平台”可以是一个wiki页面,包含从提供商获取能力的方法和流程。
由于这些平台的目标用户,正是企业的内部使用者,因此我们通常将它们称为“内部”平台。
平台与云原生架构特别相关,因为它们比以前的范例更能将支持功能与应用特定逻辑分开。在类似云的环境中,资源和能力通常独立管理,并与业务紧密集成;这些资源可能是数据库和对象存储、消息队列和代理、可观察性收集器和仪表板、用户目录和认证系统、任务执行器和协调器等。内部平台以使企业团队更易于集成到他们的应用程序中的方式向他们提供这些。
- 平台成熟度
最初,内部平台能提供单一服务的能力和一致性体验,如 CI 流水线 runner、数据库或密钥 (secret) 存储。随着内部平台的成熟,它们还提供了此类服务的组合:如用于web应用程序开发或数据分析(MLOps)等关键场景的自助模板。
平台使用中可能会有以下处理:
1. 产品开发人员可以按需提供能力,并立即使用它们来运行系统,如计算、存储、数据库或身份认证信息。
2. 产品开发人员可以按需提供服务空间,并使用它们来运行任务,存储制品和配置,收集验证数据。
3. 第三方软件的管理员可以按需提供依赖项,如数据库,并轻松安装和运行该软件。
4. 产品开发人员可以从模板(包括运行时和开发时所需的服务)中按需配置完整的环境(如web开发或MLOps)。
5. 产品开发人员和经理可以通过自动化工具和标准仪表盘观察已部署服务的功能、性能和成本。
内部平台通过单个或能力组合,提供一致、合规的体验,最终使其用户更轻松、更高效地交付有价值的产品。
- 平台的特性
在定义了什么是平台以及为什么希望构建一个平台之后,让我们识别一些影响平台成功的关键特性。
1. 平台即产品(Platfrom as a Product):平台是为了满足其用户的需求而存在,它应该基于这些需求进行设计和演进,类似于任何其他软件产品。 平台应该提供必要的能力来优先支持产品团队中最常见的需求,而非优先考虑仅某个团队使用的具体能力,以价值最大化。
2. 用户体验:平台应该通过一致的界面提供其能力,并关注用户体验。平台应努力满足不同用户的需求,这可能意味着 GUI、API、命令行工具、IDE 和门户的组合。如:平台通常提供部署应用程序的能力,开发人员可以通过 IDE 来使用这种能力,测试人员可以使用命令行工具, 而产品经理可以使用基于 GUI 的 Web 门户。
3. 文档和快速入门:文档是成功软件产品的关键方面。为了能够使用平台的产品,用户需要文档和示例。 平台应随附文档一起交付,以满足其用户的需求。它还应提供工具来加速新项目的上手。 例如,平台可以提供一个可重用的工作流,用于在 Kubernetes 上构建、扫描、测试、部署和观测 Web 应用程序。 这样的工作流可以通过初始项目模板和文档来提供,这个组合通常被称为“黄金路径”。
4. 自助式:平台应是自助式的。用户必须能够自主和自动地请求和接收能力。 这是允许平台团队支持多个产品团队并根据需要进行扩展的关键。平台能力应按需提供,并仅需最少的手动干预。 例如,用户应能运行命令行工具或在 Web 门户上填写表单来申请一个数据库,并能看到它的 locator 和认证信息。
5. 减少认知负担:平台的一个基本目标是减少产品团队的认知负荷。平台应该封装实现细节,并隐藏其架构可能产生的任何复杂性。例如,平台可能会将某些服务委托给云提供商,但用户不应接触到此类详细信息。同时,平台应允许用户根据需要配置和观测某些服务。用户不负责运营平台提供的服务。例如,用户可能经常需要数据库,但他们不应该管理数据库服务器。
6. 可选可组合:平台旨在使产品开发更加高效,因此它们不能成为障碍。平台应该是可组合的,并使产品团队能够仅使用部分能力。当平台不具备某些能力时,产品团队还应能自己部署和使用外部组件。例如,如果一个平台不提供图形数据库,而它是产品所必需的,那么产品团队应该可以自己提供和运维图形数据库。
7. 默认安全:默认情况下,平台应该是安全的,并根据组织定义的规则和标准提供确保合规性和验证的功能。