功能开关:工作流程与基础设施
定义带有类型的功能开关,具有默认安全值、经过审计的租户和用户定向、始终可达的紧急关闭开关,以及必须在清理日期后移除的功能开关。
包状态: 参考上下文,准备人工审查。合约和测试场景已完成,但不保证采用的实现已通过测试。
决策
将行为变更隐藏在类型化的功能开关后,其默认值为最后已知的安全路径。定向只能通过经过审计的规则集选择租户或用户。紧急关闭开关覆盖所有定向规则。每个开关带有清理日期;超过该日期,必须从代码和配置中删除该开关,而非作为永久分支保留。
范围
- 开关模式、默认值、评估顺序、租户和用户定向、百分比发布、紧急关闭开关、变更审计、客户端和服务器端评估,以及清理后的移除。
- 在共享相同开关名称的后端服务和网页客户端中渐进式交付产品行为。
- 在不回滚完整制品的情况下紧急禁用已发布路径。
不包括的内容
- 新二进制的流量加权金丝雀发布,这是发布路由决策。
- 实验分配和指标的统计分析。
合约
- 每个开关声明类型、默认安全值、所有者和清理日期;未知开关评估为类型默认值,而非 true。
- 评估顺序为:紧急关闭开关、环境禁用、显式拒绝、定向、百分比、默认值。
- 租户和用户定向记录执行者、原因和变更时间;匿名客户端不能自我授予受限开关。
- 紧急关闭开关在配置的传播范围内全局强制安全值。
- 服务器端评估对授权敏感路径具有权威性;网页客户端仅缓存标记为客户端安全的开关。
- 超过清理日期,如果开关标识符仍出现在代码或运行时配置中,CI 将失败。
实现指导
- 从模式生成访问器,防止调用者传递自由字符串的开关名称。
- 在请求或作业边界评估开关并传递快照;不要在请求中途重新读取导致结果不同。
失败处理
- 如果开关存储不可达,提供默认值并发出高严重性信号;不要开放失败到实验行为。
- 格式错误的定向规则将被跳过,继续执行下一个评估步骤。
验证与运维
- 统计默认回退率、紧急关闭开关使用次数、超过清理日期的开关数量,以及客户端缓存与服务器快照的不一致情况。
- 当授权敏感开关被标记为客户端安全时发出警报。
- 通过测试证明紧急关闭开关优先于百分之百发布,且未知开关保持默认安全。
本包中看似可执行的示例是夹具和验收合约。
从集合根目录运行 python tools/validate.py 以检查包结构和元数据;然后在目标仓库中实现并执行场景。
采用假设
example.yaml中的名称和数值是采用配置,不是通用默认值。- 采用团队必须将执行者、数据类别、错误词汇和所有权映射到其系统中。
参考
- 开关模式、评估顺序、定向审计和清理日期是本包中记录的项目决策;它们不是公开标准。