App Lifecycle Manager 功能标志概览

借助 App Lifecycle Manager 功能标志,您可以控制应用中功能的可用性和行为,而无需部署新代码或更改基础架构。

您可以通过两种主要方式使用标志:

  1. 集成式: 将标志管理与 App Lifecycle Manager 管理的应用部署相结合。
  2. 独立式: 即使您的 应用基础架构在其他位置进行管理,也可以通过将系统 组件建模为 App Lifecycle Manager 单元,独立使用强大的标志系统。

功能标志与 App Lifecycle Manager 的核心概念(如单元和发布)集成。这样,您就可以在管理应用基础架构的同时管理标志配置(集成方法)。

如果您不熟悉 App Lifecycle Manager 单元或发布,请查看主要 App Lifecycle Manager 概览

为何要使用 App Lifecycle Manager 功能标志?

将功能标志与 App Lifecycle Manager 结合使用时,可以为 SaaS 开发和运营生命周期带来以下优势:

  • 将功能发布与代码部署分离: 将新代码发布到生产环境,并默认停用功能。为特定用户启用功能,或在准备就绪后逐步发布功能,从而降低与大规模部署相关的风险。
  • 提高安全性、速度和可靠性
    • 在生产环境中面向有限的受众群体测试功能(金丝雀发布)。
    • 使用 App Lifecycle Manager 发布功能执行逐步发布,最大限度地减少潜在问题的影响。
  • 启用许可名单和租户自定义: 为可以代表租户、服务或环境的单元启用或停用功能。
  • 简化回滚: 停用功能标志通常比部署应用的先前版本更快,干扰更少。借助此工作流,您无需回滚二进制文件即可停用存在问题的的功能。
  • 统一管理标志配置: 管理功能标志定义,并使用这些定义来配置发布。借助此工作流,您可以通过创建功能标志发布来更改应用的功能,从而提高运营可靠性。

App Lifecycle Manager 功能标志的工作原理

在 App Lifecycle Manager 中使用功能标志涉及两个主要方面:管理平面(定义和发布标志)和数据平面(在应用中访问标志值)。

与 App Lifecycle Manager 集成使用

如果您使用 App Lifecycle Manager 来管理应用部署(例如,使用 Terraform 蓝图部署基础架构):

  1. 定义标志: 在 App Lifecycle Manager 中创建功能标志资源,指定唯一的 Flag key(例如 enable-new-dashboard),并将其与单元种类相关联。系统支持布尔标志。
  2. 预配标志更改: 只有在您启动 App Lifecycle Manager 发布后,对标志的更改(创建或更新)才会生效。这样,您就可以使用批量处理、监督和安全检查等功能进行标志部署。 发布会更新与目标单元相关联的标志配置。
  3. 在应用中访问标志: 在预配的单元(例如,在 Cloud Run 或 Google Kubernetes Engine 上的容器中)内运行的应用代码使用配置了 flagd 提供程序的 OpenFeature SDK。此提供程序连接到 saasconfig.googleapis.com 服务端点。使用 App Lifecycle Manager 将必要的单元标识符注入到应用环境中,让 SDK 为该特定单元提取正确的标志值。

这种深度集成可让您在管理基础架构生命周期的同时管理功能生命周期。如需实际示例,请参阅部署功能标志快速入门

管理平面

您可以通过与管理平面互动来定义和控制标志。您可以使用 控制台、gcloud CLI 或 App Lifecycle Manager API 来执行以下操作: Google Cloud

  • 创建或更新标志:如需定义标志,您需要指定 Flag key,将其与单元种类相关联,并设置其类型和默认值。
  • 创建发布:您可以启动发布,将标志更改(创建或更新)分发给属于标志单元种类的目标单元。发布可确保根据您配置的政策安全可靠地应用更改。

数据平面

您的应用代码与数据平面互动以使用标志值:

  • OpenFeature SDK: 将与供应商无关的 OpenFeature SDK 集成到您的应用中。
  • flagd 提供程序: 将 OpenFeature SDK 配置为使用 flagd 提供程序。
  • 配置: 将 flagd 提供方指向 App Lifecycle Manager 功能标志服务端点:saasconfig.googleapis.com:443
  • 定位: 提供 provider_id 以标识标志配置。此值通常对应于 App Lifecycle Manager 单元的完整资源名称(例如 projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID)。
  • 身份验证:提供方使用应用默认凭据 (ADC) 安全地对向 Google Cloud 服务端点发出的请求进行身份验证。使用的服务帐号需要 roles/saasconfig.viewer Identity and Access Management 角色。
  • 标志评估: 在代码中使用 标准 OpenFeature 方法 (client.get_boolean_value(...)) 检查标志值。提供程序负责从服务中提取最新发布的配置。

App Lifecycle Manager 提供了与数据平面集成的参考实现和示例:

功能标志值类型

App Lifecycle Manager 功能标志支持的不仅仅是标准的开/关布尔值评估。您可以使用 STRINGINTEGERDOUBLE 值定义标志,以控制复杂的运营变量,例如运行时阈值、主题参数或配置限制。

与布尔标志不同,您需要在创建非布尔标志时明确定义它们,以确定可能的返回类型范围。

字符串标志

字符串标志将配置标识符直接传递给连接的客户端。

gcloud beta app-lifecycle-manager flags create "feature-mode" \
  --key="feature-mode" \
  --flag-value-type=STRING \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "standard", "stringValue": "STANDARD"}, {"id": "advanced", "stringValue": "ADVANCED"}]' \
  --evaluation-spec='{"defaultTarget": "standard"}'

整数标志

整数标志用于控制确切的数值限制和有效载荷边界。

gcloud beta app-lifecycle-manager flags create "max-retry-count" \
  --key="max-retry-count" \
  --flag-value-type=INTEGER \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "low", "integerValue": 3}, {"id": "high", "integerValue": 10}]' \
  --evaluation-spec='{"defaultTarget": "low"}'

双精度浮点数标志

双精度浮点数标志用于传递概率阈值或浮点参数使用的高精度值。

gcloud beta app-lifecycle-manager flags create "sampling-rate" \
  --key="sampling-rate" \
  --flag-value-type=DOUBLE \
  --location="global" \
  --unit-kind="demo-test-unitkind" \
  --variants='[{"id": "minimal", "doubleValue": 0.01}, {"id": "full", "doubleValue": 1.0}]' \
  --evaluation-spec='{"defaultTarget": "minimal"}'

使用发布预配功能标志

App Lifecycle Manager 通过使用发布来预配功能标志更新,确保大规模安全更改或更新。

如果没有分阶段发布,则对标志配置的微小更改(例如,为 1% 的用户启用功能)会立即在所有应用实例中传播。如果此功能引入了回归,则整个基础架构可能会同时出现问题。这种全局传播会显著提高大范围服务中断的风险。

App Lifecycle Manager 发布通过逐步控制地分发标志更改来降低此风险,从而限制任何意外问题的潜在范围。

功能标志集

功能标志集将多个功能标志分组在一起,让您可以将它们作为单个逻辑资源进行管理。这对于发布需要协调多个标志的功能非常有用。

详细了解标志集

清单

借助清单,您可以使用 JSON 文件定义和管理功能标志。您可以将这些定义推送到 App Lifecycle Manager API,也可以拉取现有配置,为应用生成类型安全的访问器。

详细了解清单

复杂定位

您可以使用通用表达式语言 (CEL) 基于用户或请求属性创建复杂的定位规则,以便精确控制哪些用户看到哪些功能。

详细了解复杂定位

多租户架构

如果您将标志定位到特定单元或单元组(使用标签或租户),则可以将多租户部署与 App Lifecycle Manager 结合使用。您还可以在整个租户舰队中实现逐步发布。

详细了解多租户架构

分配功能标志

定义 分配(例如 实验性基准),并使用流量 拆分执行测试或随机发布。

详细了解功能标志分配

后续步骤