能否持续稳定地运行

可观测性、可靠性与验收

聚焦审计证据、服务目标、容量输入和验证门禁,定义上线前如何证明系统可靠。

聚焦审计证据、服务目标、容量输入和验证门禁,定义上线前如何证明系统可靠。

12. 可观测性与审计

12.1 可观测性与审计中心

可观测性与审计中心只接收有明确来源的事件:数据面运行与决策事件、普通控制面变更及事务内审计、break-glass 本地审计副本。它负责脱敏、关联和证据输出,不另起一套控制面审计写入链路。

%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 36, "rankSpacing": 40, "htmlLabels": true}}}%% flowchart TB DATA["数据面事件<br/>请求 · 授权决策 · 路由 · 后端健康"] --> INGEST["统一采集与缓冲<br/>事件 Schema · 背压 · 丢失检测"] CONTROL["普通控制面事件<br/>发布版本 · 传播状态 · 事务内审计"] --> INGEST EMERGENCY["break-glass 本地审计副本"] --> INGEST INGEST --> REDACT["敏感信息治理<br/>删除 Authorization 与支付字段<br/>脱敏 Key ID · 限制来源 IP 查询"] REDACT --> CORRELATE["跨域关联<br/>request_id · trace_id<br/>epoch · sequence · reason_code"] CORRELATE --> TELEMETRY["运行遥测<br/>结构化日志 · 指标 · 分布式追踪"] CORRELATE --> AUDIT_VIEW["只读审计索引与查询视图<br/>不替代事务内不可篡改审计"] TELEMETRY --> OUTCOME["输出<br/>仪表盘 · 实时告警 · SLO 测量<br/>故障证据 · 合规证据"] AUDIT_VIEW --> OUTCOME classDef input fill:#F4F7FB,stroke:#72849A,color:#253954,stroke-width:1.5px classDef process fill:#EDF8F3,stroke:#16835E,color:#124D3B,stroke-width:1.5px classDef store fill:#FFFFFF,stroke:#4F79A7,color:#18212F,stroke-width:1.5px class DATA,CONTROL,EMERGENCY input class INGEST,REDACT,CORRELATE,OUTCOME process class TELEMETRY,AUDIT_VIEW store

审计覆盖率以配置写事务为准,告警与合规查询以可观测性中心的关联结果为准。两者共享 request_id、配置版本和资源标识,但职责不重复。

12.2 核心指标

12.3 日志与追踪字段

数据面结构化日志至少包含:timestamprequest_idtrace_idregionenvironmentroute_nameplatformmerchant_id、脱敏 Key ID、规范化来源 IP、授权结果、内部 reason code、配置 epoch、配置 sequence、HTTP 状态、请求耗时、后端耗时和失败域。

管理审计日志至少包含:操作者身份、审批人身份、资源、操作、原因、变更前后摘要、请求标识、来源系统和时间。

12.4 告警

以下事件应触发实时告警:

  1. 任一地域授权拒绝率相对过去 30 分钟基线显著上升。
  2. 区域配置版本落后控制面超过 30 秒。
  3. 安全变更传播超过 10 秒。
  4. 任一平台无健康后端或触发跨地域故障转移。
  5. 网关 P99 延迟或 5xx 比例超过 SLO。
  6. 单个 Key 在多个未绑定 IP 上连续认证失败。
  7. 高风险管理操作未完成双人审批或审计写入失败。

13. 建议 SLO 与容量原则

以下指标是设计建议,不是会议已确认承诺:

指标建议目标测量方法
地域内网关月可用性99.99%从受控外部探针使用有效测试 Key、已绑定 IP 和只读测试路由贯穿 WAF、网关与 API Key 验证服务;网关或 API Key 验证服务产生的 5xx 计失败
网关新增延迟,不含后端耗时P95 不高于 20 毫秒,P99 不高于 50 毫秒使用单调时钟计算网关总 span 减去 upstream wait span,按地域和路由聚合
普通配置传播99.9% 在 30 秒内到达所有健康地域从 PostgreSQL 提交时间到每个健康地域报告已加载相同 (epoch, sequence) 的时间
暂停、吊销和 IP 移除传播99.9% 在 10 秒内到达所有健康地域从中央提交或 break-glass 指令被接受,到各健康地域探针首次观察到拒绝的时间
单实例或单可用区故障恢复60 秒内自动摘除并恢复容量从注入故障到健康实例承接全部允许流量且错误率回到阈值内的时间
区域级网关故障恢复时间5 分钟内完成允许流量的切换从区域健康检查确认失效到备用地域连续 5 分钟满足成功率目标的时间
控制面恢复时间30 分钟内恢复单写管理能力从主地域被判定不可恢复到备用地域完成围栏、提升和首个新 epoch 写入的时间
网关配置恢复点不超过 1 分钟故障接管后核对最后确认提交与恢复后最大已恢复提交时间,丢失窗口不得超过 60 秒
控制面变更审计覆盖率100%每个成功写事务必须存在同一 request_id 的只追加审计记录
未授权请求测试拦截率100%第 14.1 节全部负向用例均被拒绝且无身份、路由和权限信息泄露

网关可用性 SLI 的分母是通过基础协议校验且到达地域入口的请求;客户端造成的 4xx 和已标记为后端失败域的 5xx 不计入网关失败,但必须另设端到端可用性 SLI。API Key 验证服务失败关闭产生的 503 属于网关失败并消耗错误预算。

按 30 天计算,99.99% 只允许约 4.32 分钟不可用。边缘入口、网关和 API Key 验证服务各自最多使用三分之一错误预算,对应各组件月可用性不低于 99.997%。Redis 不应成为每个请求的强同步依赖,进程内配置快照用于隔离其故障。该预算必须在技术选型后用实际依赖图重新计算,不能把组件 SLO 简单相乘后宣告达标。

健康地域定义为最近 30 秒持续上报数据面健康、配置版本和时钟同步状态的地域。传播 SLI 只排除已被流量路由策略中心入口执行点正式摘除的地域,不能因传播落后而把地域临时标记为不健康来规避统计。

会议材料没有提供峰值 QPS、平均请求体、响应体、连接持续时间、商户数量、API Key 数量或地域清单,因此当前不能给出可信的实例数与硬件定容。

定容前必须收集各平台最近 30 天的峰值 QPS、P95 与 P99 请求体、P95 与 P99 后端耗时、连接复用率、商户数量、每商户 Key 数量和 IP 绑定数量。压测应在 70% 目标容量下验证 SLO,并保留至少 30% 的区域内突发余量和一个可用区故障后的剩余承载能力。

14. 验证与验收

14.1 授权矩阵测试

必须覆盖以下自动化测试:

  1. 有效 Key、已绑定 IP、正确环境、拥有 required scope 时通过。
  2. 有效 Key 与同一商户的另一个未绑定 IP 组合时返回 401
  3. 同一商户的另一个 Key 与当前 IP 未绑定时返回 401
  4. Key 与 IP 已绑定但缺少 required scope 时返回 404,响应与真实不存在的路由一致。
  5. Key 未知、Secret 错误或凭据格式错误时统一返回 401
  6. Key 处于 pendingsuspendedrevokedexpired 时拒绝。
  7. 轮换窗口内新旧 Secret 都可用,窗口结束后只有新 Secret 可用。
  8. 客户端伪造 X-Forwarded-For 时不能改变授权使用的来源 IP。
  9. 路由未声明 required scope 时无法发布。
  10. 生产 Key 不能访问非生产环境,非生产 Key 不能访问生产环境。
  11. 未认证请求对存在和不存在的路由都返回相同的 401,不能枚举路由。
  12. Pepper 升级后,引用旧 Pepper 版本且仍在有效期内的 Secret 继续可验证,新 Secret 使用新 Pepper 版本。
  13. IPv4 小于 /29 或 IPv6 小于 /64 的绑定被拒绝,重叠网段不能写入。
  14. 支付写请求的签名时间戳超出 5 分钟、Nonce 在 10 分钟内重复、正文摘要不符或签名不正确时拒绝。

14.2 多地域与故障测试

  1. 停止一个网关实例,请求无感切换且无授权绕过。
  2. 停止一个可用区,区域剩余容量仍满足 SLO。
  3. 停止某一地域的 Redis,已知请求按有界快照策略处理,未知 Key 拒绝。
  4. 停止消息总线,配置标记为待发布,恢复后事件无丢失且按版本顺序收敛。
  5. 吊销一个 Key,验证所有健康地域在 10 秒目标内拒绝。
  6. 模拟整个地域不可用,只对满足策略的读取或幂等写入执行故障转移。
  7. 模拟备用地域业务数据库落后,确认网关不进行盲目跨地域写入。
  8. 恢复原地域,执行受控回切并验证配置版本和后端数据状态。
  9. 提升备用控制面前验证旧主写入已围栏;新控制面使用更高 epoch,所有地域拒绝旧 epoch 事件。
  10. 控制面与 PostgreSQL 同时不可用时,通过 break-glass 在全部健康地域封禁一个测试 Key,恢复后归档为正式吊销记录。
  11. Redis 故障后验证本地令牌桶配额总和不超过全局配额,并验证恢复时不会突发放大流量。
  12. 最后一次授权快照超过 15 分钟时,高风险写请求拒绝,读取请求遵循已批准的风险策略。
  13. 备用地域复制状态信号过期或延迟超过路由阈值时,读取请求不得自动故障转移。
  14. 旧配置版本覆盖被拒绝,429 和后端 409 语义保持稳定,IP 绑定原子替换期间不存在部分集合可见状态。

14.3 发布门禁

首个生产版本必须同时满足:

  1. 授权矩阵自动化测试通过率 100%。
  2. 安全变更传播、网关延迟和可用性达到第 13 节目标。
  3. 网关、WAF、APM 和审计日志扫描未发现明文 Secret。
  4. 完成单可用区故障演练、控制面实际接管演练、break-glass 实际封禁演练和区域级数据面桌面演练。
  5. 各首批平台负责人签署路由、required scope、幂等和故障转移策略。
  6. 安全团队完成威胁模型和渗透测试高风险项关闭。
  7. 运维团队确认仪表盘、告警、值班手册和回滚流程可用。