Kubernetes、GitOps 与云平台设计¶
设计一个服务 200 个团队的多租户 Kubernetes 内部开发者平台¶
题目
公司有 200 个研发团队、约 1,500 个服务,需要统一构建、发布、运行与可观测平台。生产峰值约 40 万 RPS1,服务分三级 SLO2;要求团队可自助创建服务和环境,平台满足最小权限、成本分摊、跨 AZ3 高可用,核心服务 RTO/RPO4 分别为 30 分钟和 5 分钟。请给出生产级设计。
需求澄清
- 租户是否互相信任,是否运行第三方/任意代码?若有强不信任和监管隔离,不能只用 namespace,需独立账号/集群或沙箱节点。
- 服务以无状态为主还是包含数据库/消息系统?本答案把数据库、对象存储和队列优先放云托管服务,集群仅承载经评估的有状态组件。
- 三档 SLO、部署频率、峰谷、数据地域、GPU/特殊硬件、单团队配额与成本模型分别是什么?
- 平台负责“黄金路径”和基础 guardrail,不承诺替应用自动解决 schema 兼容、幂等和容量问题;明确团队与平台责任边界。
估算与容量假设
1,500 服务平均生产 4 副本约 6,000 Pod,加 sidecar/Job/系统组件后按 10,000—15,000 Pod 量级;分 8—12 个生产集群,组织目标约为每集群 1,000—2,000 个工作负载 Pod,并为系统组件和故障迁移留余量。节点数不能把 Pod 数直接换单位,而要依据 CPU/内存 requests、每节点 Pod/IP 上限、DaemonSet 开销、实例规格和 N-1 场景反推。峰值 40 万 RPS 按入口 2KB 请求+8KB 响应估算约 4GB/s 业务流量,再乘跨 AZ、遥测和复制系数做网络预算。每天若每服务 2 次发布约 3,000 次变更,平台 API 和 GitOps 需要分片与速率限制。
容量按 N-1 AZ:三级核心服务任一 AZ 丢失后,剩余可用容量仍至少为预计峰值的 120%;普通服务允许降级。节点池按通用、内存、计算、GPU、spot/可中断分层,系统预留、DaemonSet 开销、Pod IP 与 NAT 连接均进入模型。日志/trace 采样预算按业务价值控制,避免遥测成本超过计算。
相关技术说明
平台控制面与运行时数据面5分开。控制面包括服务目录、自助 API、模板/策略、身份、CI、制品和 GitOps6;工作负载集群按环境、风险和区域分片。namespace+RBAC7+quota+NetworkPolicy+PSS 是软隔离;账号/集群/节点或沙箱 runtime 才是更强边界。所有集群不共享一个全能 controller 身份,避免平台故障横跨全公司。
声明式协调最终一致,需用稳定契约连接:服务 spec 产生仓库、流水线、namespace、配额、网络和可观测配置;构建生成不可变 digest、SBOM 与 provenance;环境仓库只晋级 digest。平台 API 不直接长期持有云管理员凭证,通过工作负载身份调用受限执行器。
总体架构
- 组织层:独立安全、日志、网络、共享服务账号;每个生产集群/业务域使用受限账号,组织政策阻止公共存储、禁用区域和长期密钥。
- 平台入口:开发者门户/CLI 调用服务目录 API,后端以模板生成 Git PR 而非直接改生产;目录保存 owner、SLO、数据分类、依赖、成本中心和 on-call。
- CI/供应链:隔离的短生命周期 runner,OIDC 换云角色;多阶段构建,签名 digest、SBOM、漏洞与许可证门禁。第三方 PR 不获得生产凭证。
- GitOps:每环境/集群独立 controller 与 AppProject,平台和租户资源分开;生产按 canary 集群、波次与 sync window 晋级,关键删除/prune 需审批。
- 集群:三个 AZ 的节点池,默认 topology spread;核心系统组件跨 AZ,多副本 CoreDNS/ingress/metrics。节点镜像不可变并分批替换;CNI 支持 NetworkPolicy,CSI 按存储拓扑分类。
- 数据:托管数据库跨 AZ,备份跨账号且不可变;应用通过 workload identity/短期 secret 访问。集群 etcd snapshot 与业务数据备份分别治理。
数据与流量路径
外部请求先到区域 DNS/WAF/L7 LB,再到 Gateway/Ingress,经 Service/EndpointSlice 到 Pod;入口、应用和下游分别设置 deadline,重试只由明确一层拥有。东西向默认拒绝,按服务身份/namespace 允许;需要 mTLS 时引入 mesh,但先评估代理资源和重试叠加。
发布路径为 commit→隔离 CI→测试/扫描→registry digest→环境 PR→政策/审批→GitOps canary→健康与业务 SLI 门禁→逐波扩大。配置/secret 分开:非敏感配置在 Git,secret 只存外部引用,目标集群用 workload identity 按需取得。遥测路径走节点 agent/collector 分层汇聚,限流与采样避免应用被后端故障拖垮。
HA 与 DR
单集群跨三 AZ,核心服务副本最少 3 并 topology spread,PDB 只保护维护,N-1 容量保护 AZ 故障。多个集群按业务域分片,入口可在同区域跨集群切流,防单控制面故障;一级业务在备用区域保留热容量和数据复制,二三级采用温/冷恢复。
定义一级 RTO 30 分钟/RPO 5 分钟:Git、registry、state、KMS/secret、数据库和配置目录各有一致检查点;备用 controller 默认不自动写,恢复时先验证 commit/digest/state/data 位点。每季度做集群丢失、AZ 隔离和区域切换;etcd 恢复用于集群对象,不能代替业务数据库恢复。
安全与租户治理
企业 IdP→短期角色,生产写权限 JIT;Pod ServiceAccount 与云角色一一受限。默认 Restricted PSS、非 root、RuntimeDefault seccomp、drop capabilities、只读根,例外进入专用 namespace/节点并限时审批。网络默认拒绝,egress 经策略/代理;Admission 检查 digest、签名、资源 request、危险挂载和目标环境,但 webhook 有 HA、自举排除与 break-glass。
ResourceQuota、LimitRange、API Priority/Fairness 和每租户发布并发共同防 noisy neighbor。审计日志跨账号不可变保存,Secret/etcd/state 均加密。强不信任 CI 和代码沙箱使用 microVM/沙箱 runtime 或独立集群,绝不挂 runtime socket。
可观测与 SLO
平台自身 SLI:自助请求成功率/时延、从 commit 到 Ready 的 lead time、发布成功率/回滚率、集群 API 与调度延迟、镜像拉取、DNS、CNI/CSI、控制器队列和策略拒绝率。服务侧提供 RED/USE、trace 上下文、结构化日志和 profile 按需开启;告警按业务 SLO burn rate,不以 CPU 高作为唯一告警。
每次发布将 commit、digest、配置版本和 rollout 波次写入事件,能从业务错误追溯变更。成本按 namespace/服务分摊计算 requests、实际用量、存储、网络与遥测,展示闲置和单位交易成本;优化不直接自动缩关键服务,而是形成带 SLO 影响的建议。
发布与运营
平台能力先 dogfood,再选 5 个团队 canary,20→50→200 团队扩展。API/模板版本化并提供弃用窗口;集群升级采用 canary 集群、控制面兼容扫描、节点池分批替换。全局变更有对象/集群比例预算与 kill switch;事故手改需暂停相关 reconcile、限时记录并回写 Git。
服务 onboarding 验收包括 owner/on-call、SLO、资源/连接预算、探针、TERM、备份恢复(若有数据)和合成交易。平台团队提供黄金路径和例外流程,不把所有服务特性强塞进单一模板。
实践经验
复合落地中,最容易失败的是“一套大集群+一个管理员 GitOps 控制器+所有团队共用模板”。规模扩大后,一个 controller list 风暴拖慢 API,一条 prune 错误横跨租户,公共 NAT 和数据库连接又成为共享瓶颈。因此设计按环境/业务域分片控制器与集群,先做 API/连接/删除预算,再提升自助速度。代价是集群和版本运营增加,需用统一目录、策略包、舰队升级和差异监控抵消。
主要权衡
- 更多集群降低爆炸半径,但提高版本、容量碎片和跨集群调度成本;以业务域/信任边界分片,而非每团队一集群。
- service mesh 提供身份/遥测,却增加代理资源和故障层;只在跨团队零信任和流量治理收益明确时启用。
- 硬 request/配额防邻居干扰,却降低装箱率;核心服务用保证容量,批任务使用可中断池。
- 全自动部署提高速度,也放大错误;按资源风险设置自动、审批和禁止三档,不采用一刀切。
设计跨 300 个云账号与 50 个集群的 IaC + GitOps 交付平台¶
题目
企业横跨三个区域、300 个云账号/订阅和 50 个 Kubernetes 集群,每天约 1,000 次基础设施 plan、300 次应用发布。要求所有变更可追溯,生产审批内容必须与实际应用内容一致;平台自身单区域故障 RTO 45 分钟、配置 RPO 10 分钟;需支持紧急变更但防止大面积误删。设计端到端平台。
需求澄清
- 账号/集群由哪些业务和监管域拥有,是否允许中心平台拥有写权限?答案采用中心编排、分散执行身份,平台不持有一个全局管理员密钥。
- IaC 管理范围是否包含数据平面与共享网络?关键 state 按所有权和爆炸半径拆分,数据库数据迁移不由普通 apply 隐式完成。
- 审批法规要求、双人控制资源、维护窗口、紧急变更最长有效期,以及 Git/registry/state/KMS 的现有部署形态是什么?
- “RPO 10 分钟”指 Git、state、审批账本和发布元数据;业务数据库另有各自目标,不能混在平台指标里。
估算与容量假设
1,000 plan/日平均不高但工作时段峰值按 100/小时、单 plan 5 分钟估算需 10—20 个并行 worker;apply 并发由 state 单写与云 API rate limit 控制,按账号/区域限流。300 次应用发布若每次 5 个波次、每波 10 分钟,GitOps 控制器需处理约 1,500 个发布阶段,但按集群分片后压力可控。
300 账号假设每账号 10—30 个 state,总计 3,000—9,000 state;每个 state 的 owner、锁、版本、后端路径和恢复等级必须进入目录。50 集群每个约 500—2,000 应用对象,Git 渲染与 diff 用缓存但不以缓存为恢复权威。日志保留按法规分热/冷层,审批与云审计使用不可变存储。
相关技术说明
IaC8 apply 涉及云 API 与 state 更新,不能跨 provider/state 原子提交;GitOps 是最终一致控制环,Git revert 也不保证外部副作用可逆。因此平台需要“变更单元”而非宣称全局事务:每单元绑定代码 commit、依赖 lock、变量版本、目标账号/集群、state serial、plan hash、制品 digest、政策结果和审批。
权限模型以执行身份分散故障半径:plan worker 只读,apply worker 按账号与 state 使用短期角色,GitOps controller 按集群/项目最小权限。队列只是调度工具,真正的串行保证由 state lock + 平台单写租约共同承担;跨 state 迁移有显式全局维护锁,不能靠各自后端锁。
总体架构
- 变更入口:PR 与 API 产生不可变 change record;服务目录解析 owner、风险等级、目标和维护窗口。代码、模块、provider、policy bundle 均固定版本。
- IaC planner:隔离 worker 使用 OIDC 获取目标只读角色,下载受控 state,生成二进制 plan、JSON 风险摘要和成本/政策结果;原始 plan 加密存储并 hash。
- 审批器:审批界面显示目标账号 ID、区域、state serial、delete/replace、权限/公网变化与 plan hash;两人审批关键网络、IAM、KMS 和数据资源。
- Apply executor:只接受未过期且签名的同一 plan artifact;执行前校验 commit、state serial/lock 与目标身份,不重新 plan。按账号/API 和 state 串行,输出云 request ID。
- GitOps:构建系统产生签名 digest;环境仓库 PR 只晋级 digest。每环境/风险域 controller,AppProject 约束 source/destination/kind;渲染结果先 policy 和对象计数,再 canary→波次同步。
- 证据与目录:append-only 账本关联 change ID、commit、plan/digest、审批、执行、云/Kubernetes 审计和 SLI;资产目录保存每个 state/controller/账号的 owner 与 DR 等级。
数据与变更路径
IaC 路径:PR→静态测试→锁定依赖→只读 plan→policy/cost→人审→同一 plan apply→refresh/完整 plan→合成验证→证据封存。state 中断时 worker 停止并保留云 request ID,由恢复状态机判断 import/重试,绝不自动 force-unlock。
应用路径:源码 commit→隔离构建→测试/扫描/SBOM/签名→registry digest→环境 PR→离线 render→策略/删除预算→canary 集群 sync(prune 默认独立审批)→业务 SLI→区域波次。配置与制品分离,生产 controller 不执行任意仓库脚本;自定义渲染插件在无生产凭证沙箱运行。
紧急路径仍创建 change record 和 commit,允许缩短等待与减少审批人,但凭证 JIT、scope 精确、自动到期;事故手改通过 break-glass 只作用于列明对象,平台暂停对应 reconcile,并在限定时间回写代码后重新开启。
HA 与 DR
Git 主站异地镜像,制品 registry 跨区复制且按 digest校验;state 后端按环境启用版本、锁、跨账号/区域备份与独立 KMS;审批账本和审计流复制到安全账号。调度/审批服务可跨 AZ,区域备用以热数据库/温 worker 方式部署,worker 本身无状态。
区域故障恢复顺序:启动身份/KMS和只读目录→验证 Git commit、registry digest、state serial 与审批账本一致检查点→恢复 planner/diff→恢复单个低风险 writer→逐账号/集群扩大。GitOps controller 初始 manual/prune-off,禁止陈旧缓存立即写。每季度演练丢失一个 state、Git 不可用、KMS 拒绝、controller 旧缓存和整区故障,测得平台 RTO/RPO。
安全与治理
企业 SSO+MFA,生产权限按 change ID 兑换短期角色;OIDC trust 精确限制仓库、分支、环境和 runner pool。state、plan、日志可能含 secret,全部加密、脱敏、最小读权限;plan UI 不向普通审批人暴露敏感值。组织策略阻止长期 key、关闭审计、公共数据和越权区域,作为流水线之外的最后防线。
软件供应链固定 runner 镜像、provider checksum、module 来源和 policy bundle;第三方 PR 无 secret。webhook/policy 规则先回放再强制,例外限时且自动复核。break-glass 不依赖主 IdP 同一故障域,使用即告警并轮换。
可观测与 SLO
指标包括队列/执行时长、plan/apply 成功率、锁等待、provider/API 限流、state serial 冲突、delete/replace 数、政策误报/例外、GitOps sync/prune、controller queue、commit-to-ready、按波次业务 burn rate。对每次变更可从业务 SLI 反查 change ID,也能从云 request ID 回查 plan。
平台 SLO 不只看 Web UI:读取/计划能力、生产 apply、GitOps 收敛、审计完整性分别定义 SLI。异步计划拥堵不应影响正在运行的 workload;writer kill switch 有独立健康探针。异常如一个 commit 影响账号数突增、对象数骤减或相同身份高频 list 会自动暂停而非继续扩散。
发布与变更控制
平台自身采用 cell 架构按账号/集群分片,先内部沙箱 cell、非生产 cell、单个生产 cell,再扩大;schema 与 worker 前后兼容。policy 和 module 分别版本化,不能“一次更新全局默认”。高风险变更设置 blast-radius budget:每批最多 1 个区域、5% 账号或 1 个集群,观察窗与故障时间常数一致。
删除与替换设独立预算:namespace/CRD/PVC、路由、IAM/KMS、数据库默认拒绝自动删除;合法退役需资产 owner、备份/保留证明和二次确认。恢复后也不批量重放积压 apply,先 fresh plan,防陈旧变更覆盖事故修复。
实践经验
复合落地中,最大的风险并非 runner 数量,而是“审批后重新 plan”“一个 controller 管所有集群”“高风险删除淹没在摘要”与“DR 启动 writer 过早”。平台因此把同一 plan hash、分散身份、删除预算和只读恢复阶段作为四条不变量。代价是审批失效和重规划会增加交付等待,应通过减少队列、缓存 provider、变更分片和清晰风险摘要优化,而不是降低一致性门禁。
主要权衡
- 中心平台易治理但凭证集中;采用中心元数据/编排、分散执行角色和 cell 隔离。
- 细 state 降低锁与爆炸半径,却增加跨 state 依赖;通过服务目录/参数契约而非循环 remote state 管理。
- 全自动 drift 修复提升一致性却可能覆盖事故止血;高风险仅开单,低风险才自动纠正。
- 强审批保护生产但可变成橡皮图章;机器先提炼真正风险,人审意图、时机和回退。
设计核心交易系统从数据中心迁往云的多区域高可用架构¶
题目
一家交易平台当前运行在单数据中心:峰值 8 万 TPS,数据库 40TB,每日新增 1.2TB;外部接口 200 个,夜间批处理 60 个。计划 12 个月迁往云,迁移窗口最多 20 分钟。核心交易要求 RTO 15 分钟、RPO 接近 0,查询与报表 RTO 2 小时、RPO 30 分钟;必须满足数据驻留、不可变审计和应急回退。请设计目标架构与迁移方案。
需求澄清
- “8 万 TPS”是 API 请求、数据库事务还是消息数?读写比例、单事务字节、热点键、p99、跨实体原子性与峰值持续时间决定数据方案。本答案假设 20% 写、平均写入 2KB,但必须以压测校准。
- RPO“接近 0”需量化为可验证上限,并确认网络分区时选择一致性还是写可用性;答案以资金账本一致性优先,无法确认唯一主时停写/降级。
- 40TB 是否含历史冷数据、索引和副本?哪些数据受驻留限制,能否跨区域,密钥由谁控制?
- 200 个接口的协议、对端白名单、证书、重试/幂等与迁移协调能力;60 个批任务覆盖完整业务周期,不能只做白天切换。
- 云供应商、托管数据库能否满足事务语义、复制和吞吐;若无充分证据,不在迁移同时重构核心数据库协议。
估算与容量假设
若 8 万 TPS 中 1.6 万写 TPS、每写 2KB,原始写入约 32MB/s、2.8TB/日,与题给 1.2TB/日不一致,说明需澄清压缩、峰值持续和指标定义;这是面试中应指出的关键矛盾。按实测 1.2TB/日,持续平均约 14MB/s,迁移链路至少按峰值复制流量、重放、校验和 2—3 倍余量规划。
40TB 通过 10Gbps 专线理论最短约 9 小时(未计协议、加密和限速),实际全量复制按天级规划并持续 CDC 追赶。若三个 AZ 均匀承载且要求失去一个 AZ 后仍有峰值 1.2 倍容量,目标区域需预留约峰值 1.8 倍总容量(每 AZ 约 0.6 倍);若只常驻 1.5 倍,则丢失一个等容量 AZ 后仅剩约 1.0 倍,必须明确在 RTO 内自动扩到 1.2 倍,并预留节点、IP、数据库和配额,不能直接声称 N-1 后仍有 1.2 倍。备用区域至少能在 15 分钟内升至经业务批准的降级峰值容量。200 个接口采用兼容性目录与按方迁移,不允许一次 DNS 大爆炸。
相关技术说明
多区域高可用的本质是数据权威、fencing 与流量状态机。计算双活容易,交易数据跨区同步会增加 RTT,并在网络分区时面临一致性/可用性选择。可采用主区域跨三 AZ 同步高可用,备用区域异步持续复制;RPO 由实际复制位点/确认策略决定。若业务真的要求跨区域 RPO=0,则需同步 quorum 并接受写延迟与分区停写,不能靠“异步很快”承诺。
低停机迁移以全量复制+CDC为主,切换前冻结不兼容 schema、校验数据、排空旧连接、短暂停写收敛 lag、fence 源库,再切代理/DNS。目标开始写后回退必须反向复制或业务补偿,绝不是改回 DNS。应用的幂等键、outbox/消息去重和全局 deadline 是保证切换期间重复/超时可控的必要条件。
目标架构
- 组织与账号:安全/日志、网络、共享服务、生产主区、生产灾备区独立账号;组织策略、集中不可变审计、短期联邦身份和 break-glass。
- 网络:每区域三 AZ,应用/数据/管理子网分层;每 AZ 独立 NAT/出口或私网 endpoint,集中防火墙但避免单区绕行;两条不同运营商专线与双 VPN 备份,BGP 路由受最大前缀和优先级控制。
- 入口:全局 DNS/流量管理→区域 WAF/LB→API Gateway/Ingress→交易服务。外部接口逐步换到稳定域名/代理,隐藏后端迁移;长连接有 drain/reconnect 协议。
- 计算:交易服务在三 AZ 分布,可用 VM 或 Kubernetes,关键是不可变制品、N-1 容量、拓扑和隔离,不强行为“云原生”重写。批处理与在线服务使用不同节点池、队列、NAT 和配额。
- 数据:核心账本采用满足事务与同步多 AZ 的托管/自管数据库,经严格基准和故障测试选择;备用区域持续复制并保留事务日志。查询、报表用 CDC 到独立读模型/数据平台,避免分析负载影响账本。
- 消息:事务 outbox 与幂等消费者,按业务键有序;DLQ 有 owner、重放工具与去重。跨区域只由明确复制链传输,不允许两边无仲裁同时消费写主题。
- 备份:数据库 PITR、跨账号/区域不可变备份和独立 KMS;配置、证书、Terraform state、Git、镜像 digest 与恢复目录也纳入备份。
数据与流量路径
写请求经 WAF/LB 到主区域交易服务;服务验证幂等键,在单个数据库事务写账本与 outbox,异步发布事件供风控、通知和报表消费。客户端 deadline 贯穿入口和服务,写重试仅在幂等条件成立。读请求按一致性需求:强一致读主库/同步副本,允许陈旧的查询走区域读模型和缓存,并在故障时展示数据新鲜度。
跨区域复制包含数据库日志、对象/审计和制品,但不同数据类别遵守驻留策略;敏感字段可在源区域令牌化后再复制。切流由唯一灾备编排器控制:确认旧主 fenced、复制位点与数据质量→提升备用→小权重健康交易→逐步扩大。DNS 仅承担入口选择,数据库写权不依赖 DNS 缓存。
迁移波次与切换
第 0—2 月完成依赖发现、流日志/APM、接口与批任务目录、landing zone、身份/网络/日志/KMS;第 3—5 月迁移静态、开发测试和低风险查询,验证专线、DNS 与成本;第 6—8 月建立 40TB 全量复制+CDC、影子读和业务校验;第 9—10 月按合作方迁接口,批任务至少跑两个完整周期;第 11 月做生产演练与 5%/20%/50% 影子/读流量;第 12 月正式切换。
正式窗口前一周冻结不兼容 DDL,目标持续追赶并按分区 checksum/业务聚合校验。窗口内:停止批任务与新写入口→等待在途和 CDC lag 收敛到批准阈值→fence 源库写权限和旧 worker→切数据库代理与区域权重→1% 合成/内部交易→10%→50%→100%,每步以错误、p99、账本对账、队列 lag 为门禁。旧环境保持只读并保存到回退期限。
回退在目标尚未接受不可逆写前,可恢复旧入口;目标一旦写入,则进入“前滚或有数据同步的回退”,先冻结、反向复制/对账再切,不能双写。把 go/no-go 点写入 runbook,由事故指挥官唯一授权。
HA 与 DR
主区域内计算和数据跨三 AZ,同步 quorum;每 AZ 独立出口,N-1 容量及配额预留。区域灾备采用 warm active-passive:备用持续数据复制、基础服务和最小计算常驻,15 分钟内扩到降级容量。外部仲裁/租约和数据库 fencing 保证单写权威;主区恢复作为副本重新追赶,不自动抢主。
RTO 分解为检测 2 分钟、宣告/隔离 3 分钟、确认位点与提升 4 分钟、切流 3 分钟、业务验证 3 分钟;任何一段演练超标都需要架构或流程修复。每月恢复随机备份,季度区域切换,半年在峰值仿真下跑完整回切。报表按较宽目标从数据湖/备份恢复,避免占用交易灾备关键路径。
安全与合规
人类通过 SSO/MFA/JIT,工作负载通过实例/Pod identity;数据库、KMS、备份和 state 分角色,生产管理员不能删除隔离备份。私网 endpoint 与资源策略限制数据服务,egress 白名单/代理记录外发;敏感数据按驻留标签阻止跨禁止区域复制。TLS/mTLS 证书自动轮换且有过期演练。
审计写入独立安全账号的 append-only/WORM 存储,时间同步与 request/transaction ID 可关联应用、云和数据库事件。供应链固定 digest、签名和 SBOM;迁移工具在专用账号、短期凭证和限速下运行。break-glass 双人控制且不依赖主 IdP 同一故障域。
可观测与验证
技术指标:入口 RPS/错误/p99、每 AZ 容量、连接池、NAT/专线、数据库 commit/fsync、replication lag/位点、锁等待、消息 lag/DLQ、CDC 错误、备份/恢复、KMS/身份错误。业务指标:授权成功率、账本平衡、重复交易、资金差异、对账延迟和批任务完成度。
每个迁移波次绑定 change ID、应用 commit、镜像 digest、schema 版本和数据校验报告。合成交易覆盖创建→查询→撤销/补偿,第三方副作用在演练环境屏蔽。迁移后持续观察至少一个完整日/周/月业务周期,再以“无连接、无作业、无数据、保留完成、owner 签字”退役数据中心资源。
发布与运营
应用先完成可迁移改造:配置外置、无硬编码 IP、TERM 排空、幂等键、连接池刷新、feature flag 和向前/向后兼容 schema。构建一次按 digest 晋级,canary 发布与数据库 expand/contract 分开。基础设施变更使用同一 plan 审批应用,网络、IAM、KMS、数据库 delete/replace 强门禁。
迁移期间设置双运行成本和配置漂移看板,明确源/目标每个字段的唯一 owner;事故临时路由不会被夜间 IaC 自动覆盖。供应商协作提前约定容量、配额、限流与重大事件支持,工单模板包含资源 ID、时间和 request ID。
实践经验
复合迁移中,常见失败不是复制技术本身,而是夜间任务、硬编码 endpoint、旧连接和回退写边界未被发现。把全量+CDC 做通后若没有源库 fencing,仍可在切换时分叉;有跨区备份若 KMS 不可用,仍无法恢复。因此落地优先验证业务周期、单写权威和独立恢复身份,架构重构留到迁移稳定后。两阶段路线会承担暂时双成本,却把“搬迁时限”与“重写风险”解耦。
主要权衡
- 跨区域同步可接近零 RPO,但增加写延迟且分区时可能停写;资金账本选择一致性,查询选择可用性。
- warm standby 达到 15 分钟 RTO需常驻成本;比冷恢复贵,但比全量 active-active 简单且冲突面小。
- 托管数据库降低日常运维,却带来 API/格式与出口锁定;用标准协议、可恢复备份和退出演练管理,而非退回自建一切。
- 20 分钟窗口促使充分预复制和短暂停写;未经证明的双写看似零停机,实际会把一致性风险推给业务。
-
RPS 是 Requests Per Second(每秒请求数),用于描述服务吞吐量。 ↩
-
SLO 是 Service Level Objective(服务等级目标),规定服务在一段时间内应达到的可靠性水平。 ↩
-
AZ 是 Availability Zone(可用区),是云区域内具有相对独立故障边界的基础设施单元。 ↩
-
RTO 是恢复服务的目标时长,RPO 是可接受的数据恢复点间隔。 ↩
-
控制平面保存期望状态与决策,数据面实际承载运行中的业务流量。 ↩
-
GitOps 以 Git 中的声明作为期望状态,并由控制器持续协调实际环境。 ↩
-
RBAC 是 Role-Based Access Control(基于角色的访问控制),通过角色及其绑定授予权限。 ↩
-
IaC 是 Infrastructure as Code(基础设施即代码),用版本化声明配置和自动化流程管理基础设施。 ↩