借助 App Lifecycle Manager 功能标志,您可以控制应用内功能的可用性和行为,而无需部署新代码或更改基础架构。
您可以通过以下两种主要方式使用标志:
- 集成:将标志管理与由 App Lifecycle Manager 管理的应用部署相结合。
- 独立:即使您的应用基础架构在其他地方管理,您也可以通过将系统组件建模为 App Lifecycle Manager 单元,独立使用强大的标记系统。
功能标志与 App Lifecycle Manager 的核心概念(例如单元和发布)集成。这样,您就可以将标志配置与应用基础设施一起管理(集成方法)。
如果您不熟悉 App Lifecycle Manager 单元或发布,请查看主要的 App Lifecycle Manager 概览。
为什么要使用 App Lifecycle Manager 功能标志?
使用 App Lifecycle Manager 实现功能标志可为您的 SaaS 开发和运维生命周期带来多项好处:
- 将功能发布与代码部署解耦:将新代码发布到生产环境,但默认停用相关功能。为特定用户启用功能,或在准备就绪后逐步部署功能,从而降低与大规模部署相关的风险。
- 提高安全性、速度和可靠性:
- 在生产环境中面向有限的受众群体测试功能(Canary 版本)。
- 使用 App Lifecycle Manager 发布功能执行逐步发布,最大限度地减少潜在问题的影响。
- 启用许可名单和租户自定义:为可代表租户、服务或环境的单元启用或停用功能。
- 简化回滚:停用功能标志通常比部署应用的先前版本更快,且中断更少。此工作流可让您停用有问题的特征,而无需回滚二进制文件。
- 统一管理标志配置:管理功能标志定义,并使用它们来配置发布。此工作流可让您通过创建功能标志发布来更改应用的功能,从而提供运营可靠性。
App Lifecycle Manager 功能标志的工作原理
在 App Lifecycle Manager 中使用功能标志主要涉及两个方面:管理平面(定义和部署标志)和数据平面(在应用中访问标志值)。
与 App Lifecycle Manager 集成使用
如果您使用 App Lifecycle Manager 管理应用部署(例如,使用 Terraform 蓝图部署基础设施):
- 定义标志:在 App Lifecycle Manager 中创建功能标志资源,指定唯一的
Flag key(例如enable-new-dashboard),并将其与单元种类相关联。支持布尔值标志。 - 配置标志更改:对标志的更改(创建或更新)在您启动 App Lifecycle Manager 发布之前不会生效。这样,您就可以使用批次、监督和安全检查等功能来部署标志。 发布会更新与目标单元关联的标志配置。
- 在应用中访问标志:在预配单元(例如,Cloud Run 或 Google Kubernetes Engine 上的容器)中运行的应用代码使用配置了
flagd提供方的 OpenFeature SDK。此提供方会连接到saasconfig.googleapis.com服务端点。 使用 App Lifecycle Manager,将必要的单元标识符注入到应用环境中,让 SDK 提取该特定单元的正确标志值。
通过这种深度集成,您可以同时管理功能生命周期和基础设施生命周期。如需查看实际示例,请参阅部署功能标志快速入门。
管理平面
您可以通过与管理平面交互来定义和控制标志。您可以使用 Google Cloud 控制台、gcloud CLI 或 App Lifecycle Manager API 执行以下操作:
- 创建或更新标志:如需定义标志,您需要指定
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.viewerIdentity and Access Management 角色。 - 标志评估:在代码中使用标准 OpenFeature 方法 (
client.get_boolean_value(...)) 检查标志值。提供程序负责从服务中提取最新部署的配置。
App Lifecycle Manager 提供了与数据平面集成的参考实现和示例:
功能标志值类型
App Lifecycle Manager 功能标志不仅支持标准的开/关布尔值评估,您可以定义具有 STRING、INTEGER 或 DOUBLE 值的标志,以控制复杂的运行变量,例如运行时阈值、主题参数或配置限制。
与布尔值标志不同,您需要在创建期间明确定义非布尔值标志,以指定可能的返回值类型。
字符串标志
字符串标志会将配置标识符直接传递给已连接的客户端。
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='{"defaultVariant": "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='{"defaultVariant": "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='{"defaultVariant": "minimal"}'
使用发布功能预配功能标志
App Lifecycle Manager 通过使用发布来预配功能标志更新,确保大规模安全地进行更改或更新。
如果不采用分阶段发布,那么即使是微小的标志配置更改(例如,为 1% 的用户启用某项功能),也会立即传播到所有应用实例。如果此功能导致回归,则整个基础架构可能会同时出现问题。这种全局传播会显著提高服务受到广泛影响的风险。
App Lifecycle Manager 发布功能可逐步、可控地分发标志更改,从而限制任何不可预见问题的潜在范围,降低此类风险。
功能标志集
功能标志集可将多个功能标志组合在一起,让您能够将其作为单个逻辑资源进行管理。这对于发布需要多个标志协调的功能非常有用。
清单
借助清单,您可以使用 JSON 文件定义和管理功能标志。您可以将这些定义推送到 App Lifecycle Manager API,也可以拉取现有配置,以便为应用生成类型安全的访问器。
复杂定位
您可以使用通用表达式语言 (CEL) 根据用户或请求属性创建复杂的定位规则,从而精确控制哪些用户可以看到哪些功能。
多租户架构
如果您将标志定位到特定单元或单元组(使用标签或租户),则可以将多租户部署与 App Lifecycle Manager 搭配使用。您还可以在租户舰队中实现逐步发布。
分配功能标志
定义分配(例如实验或基准),并使用流量分配来执行测试或随机发布。
后续步骤
- 试用部署功能标志快速入门,将标志与 App Lifecycle Manager 管理的部署集成。
- 如果您刚开始使用该平台,请查看 App Lifecycle Manager 概览。