1 混合云与多云要回答什么
零售服务的订单 API 已经运行在公有云里,仓库系统却仍在企业机房。顾客下单时,API 要查询库存、记录订单,再把拣货任务交给仓库。负责人提出“做混合云”,接着又问“是否需要多云”。这不是先采购几套资源的问题,而是要说清系统为什么跨越边界,以及跨越后由谁负责让它继续工作。
混合云通常把私有云环境与公有云环境连接起来,让应用或数据按明确方式协作。企业机房里仅有几台传统服务器,并不因此自动成为私有云;但它们与公有云互联时,仍然需要处理相似的混合部署问题。多云则是使用来自不同云服务提供方的服务。例如订单 API 在云 A,数据分析在云 B。混合云与多云可以同时存在,也可以分别存在,不宜把它们当成同义词。
先分清“业务分布在多处”和“同一业务可以迁往别处”。营销网站放在云 A,财务分析放在云 B,已经构成多云使用,却没有给订单 API 增加备用运行地点。即使在云 B 启动了相同应用,如果它仍依赖云 A 的数据库、身份签发或镜像仓库,也可能在云 A 故障时无法工作。资源分布只是事实,业务连续性还需要额外设计和验证。
采用跨云方案通常有具体约束:仓库设备暂时不能迁移,某类数据必须保留在规定地点,已有合同尚未结束,或者关键业务需要降低对某个服务的依赖。把这些原因写成可以判断的要求,比“提高灵活性”更有用。例如“仓库断开外网后仍能处理已下载的拣货任务”,就能指导缓存、同步和现场操作的设计。
本课以订单 API 为例,但不默认它应该同时在多处接单。先画出部署、身份、网络、数据、观测的边界,再决定哪些需要统一,哪些允许不同。最初可以只有主环境和备用环境,并让备用环境按计划接受演练。理解边界与恢复路径,比一开始追求跨云自动调度更适合入门阶段。

读图时要沿着请求走。用户进入云 A,订单 API 读取订单库,再访问机房库存接口;云 B 中的备用 API 也需要得到身份凭据和可用数据。图上的连线分别代表依赖关系,并不保证已经建立可靠通道。设计的第 1 个问题是:哪条连线断开会影响哪种业务动作?第 2 个问题是:备用路径是否还经过同一个故障点?
2 一致性运营与逃生能力
一致性运营,是让不同环境遵循可以共同理解的管理方式。它不要求每个控制台长得相同,而要求团队知道资源归谁、配置从哪里来、变更如何批准、故障如何发现。例如环境都带有业务、负责人和成本中心标签,发布都关联同一份版本记录,告警都能找到值班人员。这样跨云之后,团队仍能回答“这是什么、谁改过、出了问题找谁”。
统一的重点应该放在结果和证据上。云 A 与云 B 的网络规则字段可能不同,但都必须表达“只有入口组件能访问 API 端口”。密钥管理接口也可能不同,但都必须限制读取者、记录访问并支持轮换。用共同的安全目标检查各自实现,比假设名称相似就行为相同更可靠。操作工具可以减少重复工作,却不能代替对服务语义的理解。
逃生能力,是在既定条件下把业务从某个环境撤出、恢复到另一个环境,或者导出数据并重建服务的能力。它可以服务于故障恢复、合同结束或架构调整。具备逃生能力不等于随时自动切换,也不等于所有功能完全可移植。小团队可能选择保留清晰的数据导出流程和经过演练的重建脚本,而不长期运行完整备用系统。
为这项能力设定边界时,需要引入恢复时间目标 RTO 和恢复点目标 RPO。RTO 表示希望多快恢复业务;RPO 表示可接受的数据损失窗口。若目标是 RTO 为 30 分钟、RPO 为 5 分钟,就需要证明恢复步骤能在时间内完成,并说明最近哪些已接受的订单可能需要核对。它们是业务目标,不是只要打开某个复制选项就自动获得的保证。
把恢复过程拆成“准备、判断、执行、核对”会更容易讨论。准备包括可启动的应用、可恢复的数据和可用的权限;判断要确定故障范围与切换条件;执行涉及停止旧写入、启用新写入和调整入口;核对则确认订单状态与用户体验。每个阶段都应有负责人和可观察的完成条件,否则计划很容易只覆盖启动机器这一段。
交互中应特别注意备用 API 的依赖是否完整。镜像能拉取,才谈得上启动;启动后能获得正确身份,才谈得上访问数据;数据可读写,才谈得上接单。不要把“进程存活”当成“服务恢复”。在跨云演练里,完成条件应包含一笔带测试标记的订单能够创建、查询并进入预期的后续流程,同时避免触发真实发货。
统一过度也有代价。如果只允许各云最少的共同功能,可能丢掉有价值的托管能力,并把维护责任转回团队。可以统一部署输入、日志字段和恢复检查项,同时允许底层服务不同。只要差异被记录、被测试,并有相应恢复办法,这仍然是一致性运营。判断标准是团队能否稳定管理差异,而不是差异是否消失。
3 身份、网络与数据面互联
跨云互联包含几类不同路径。管理人员登录、审批和下发配置,属于管理相关路径;用户请求、库存查询和数据复制,则属于业务数据路径。某条管理通道失效时,已经运行的服务可能仍能处理请求;但如果应用每次请求都必须实时调用远端身份接口,管理侧的依赖也会进入业务关键路径。要按实际调用关系画图,不能只按产品分类猜测。
身份设计先区分人和工作负载。员工可以通过企业身份源进入不同云环境,再获得各自角色;订单 API 则应使用限定权限、可轮换的工作负载身份。不同云中的角色名称相同,不代表权限相同。需要逐项核对谁能签发凭据、谁能信任该凭据、允许访问哪些资源,以及环境之间是否会误用身份。不要为了互通,把长期管理员密钥复制进所有应用配置。
还要考虑身份依赖的故障范围。如果所有备用环境的登录都依赖主环境里运行的身份组件,主环境失效后,值班人员可能无法执行恢复。应设计受控的应急访问方式,限定使用者、保管方式和审计要求,并定期验证。工作负载身份的令牌过期行为也要了解:已有请求暂时成功,不能证明令牌刷新仍然可用。
网络互联可以从加密隧道起步,也可以在需求明确后采用专用连接。通道建立之后,还需要检查地址空间是否重叠、路由是否双向可达、域名解析指向哪里、访问规则是否允许,以及链路能否承受业务量。专用连接本身不会自动完成所有数据加密要求;是否加密、在哪加密,应根据实际服务与通道能力确认。入门阶段先把路径和责任讲清,再深入具体协议。

数据是跨云切换中最容易被低估的部分。应用镜像可以快速复制,但订单库还涉及复制延迟、写入归属和恢复核对。若采用异步复制,备用库通常落后于主库;若切换时主环境仍能接收部分写入,就可能出现两处都认为自己是主库的情况。本课先采用单处写入:任意时刻只有被授权的环境接受新订单,另一处准备恢复所需数据。
数据互通还要定义格式与状态含义。订单“已支付”的字段能复制过去,不代表对应支付回调也已经处理;消息重新投递可能让同一个动作再次发生。应用应能用稳定的订单编号或请求标识识别重复请求,并明确缺失记录如何核对。幂等处理只能控制重复操作的效果,不能凭空恢复没有复制到备用环境的数据,也不能替代订单与支付记录的对账。
观测需要跨边界关联,但不必把全部原始数据实时送往同一个地方。至少统一时间基准、请求标识、环境标识和版本标识,让团队可以把入口错误、API 日志与数据复制状态连起来。日志中的个人信息仍需控制采集与访问。中央面板失效时,环境应保留必要的本地证据;否则业务刚需要排障,观察业务的能力也同时消失。
4 动手:设计一条跨云故障切换
现在做一个纸面与测试环境都能实施的练习。订单 API 平时在云 A 接单,云 B 运行小规模备用实例,并持有异步复制的数据。设定演练目标为 RTO 30 分钟、RPO 5 分钟。这里的数字只是练习输入,正式方案应由业务确认。选择人工批准的切换,先把决策条件与证据做完整,再考虑是否需要自动化。
先列出成功标准:备用 API 能使用正确身份访问备用数据;入口可以把新请求导向云 B;测试订单能够创建与查询;订单不会因为客户端重试而重复创建;值班人员能看见切换后的错误率和处理延迟。再列出暂停条件:无法确认旧写入已停止、数据落后超过约定窗口、备用权限不完整,或者业务核验失败。暂停条件决定了什么时候不能继续推进。
第 1 步,记录故障前基线。在测试环境写入带时间和编号的模拟订单,保存当前应用版本、配置版本、复制位置与入口指向。测量最近一次可确认恢复的数据时间,并检查监测本身是否正常。不要只看“复制任务运行中”;任务在运行却持续积压,仍然可能无法满足 RPO。演练应使用测试数据,并明确不会产生真实扣款与发货。
第 2 步,注入范围明确的故障,例如在测试入口阻断通往云 A API 的请求。观察入口探测、API 业务探测和数据库状态是否给出一致证据。入口失败可能只是网络路径问题,数据库仍可能正常接受写入。因此不能仅凭某个探针超时就授权云 B 写入;要由负责人判断故障范围,并执行能够阻止旧环境继续写入的措施。
第 3 步,在确认旧写入被隔离后,核对备用数据的实际恢复点。如果仍无法确定旧环境是否会写入,就保持暂停,按预案降级为查询、排队或暂时拒绝新订单。网络分区时,联系不上旧环境不等于旧环境已经停止。如何在不同数据库中可靠阻止旧写入,需要使用经过验证的产品机制与操作流程,本课不展开底层选主算法。
第 4 步,按数据库支持的流程让备用库获得写入资格,更新 API 配置并验证身份。先发送受控测试请求,成功后才调整入口。若通过 DNS 改变目的地址,要考虑缓存与已有连接,不能把修改记录的时间当成全部用户完成迁移的时间。入口迁移期间仍应保证旧环境不会重新接单,并持续观察请求实际到达的位置。
第 5 步,核对切换后的业务。比较模拟订单编号、支付关联状态与处理队列,记录缺失和重复情况,再决定是否扩大流量。把发现故障、批准切换、停止旧写入、启用新写入、首笔成功订单的时间分别记录下来。RTO 应按事先约定的业务恢复口径计算;不能因为备用实例早已启动,就把前面的判断与核验时间排除。
最后设计回切。云 A 恢复上线后,可能已经持有过时数据,不能直接恢复原入口。应先保持写入隔离,保存证据,以当前权威数据源为准重新同步或重建,再安排独立的回切窗口。若演练没有达到目标,结果仍然有价值:区分是决策慢、数据落后、权限缺失还是入口迁移慢,再修改对应环节,避免只靠增加备用机器解决所有问题。
5 供应商锁定与复杂度取舍
供应商锁定描述的是迁移时受到的约束和成本,而不是用了某个特有接口就一定做错。锁定可能来自数据格式、托管数据库行为、身份策略、网络地址设计,也可能来自团队只熟悉某个平台。订单服务即使全部装进容器,也仍然可能依赖特定消息系统的确认语义和数据库查询特性。应用可打包只是可迁移性的一部分。
评价锁定时,应问迁移需要做什么:数据能否完整导出,导出需要多久,业务需要停多久,哪些代码要改,谁有能力接手。还要检查导出的数据是否可用。只拿到数据库文件,却没有解密所需权限、结构说明或兼容的恢复工具,不能构成可执行的退出方案。备份存在与备份可以恢复,是不同的证据层级。
多云带来的复杂度包括重复的权限管理、网络排障、发布验证、监控接入、值班训练和账单解释。备用容量较少,不代表运营成本也按同样比例减少;有些工作无论实例多少都必须做。跨云数据传输还可能随复制量、日志量和回源量增长。应把这些持续工作写进成本估算,避免只比较虚拟机的标价。
可以用简单的滑块理解选择:越多工作负载要求随时在其他云启动,通常就需要更多准备、兼容验证和演练。但可移植范围扩大,并不保证恢复时间按比例缩短。如果主要瓶颈是人工决策或数据恢复,再多的通用部署脚本也未必有效。比较方案时,要同时观察迁移覆盖范围、恢复证据和持续运营负担。
对订单 API,一种可接受的折中是保留托管数据库的便利,同时定期验证标准格式导出、恢复和业务对账;另一种是长期维护可接管的备用库。前者运行负担较低,但恢复可能较慢;后者准备更充分,却需要持续处理复制与差异。不存在脱离业务目标的统一最优解。选择应由恢复要求、合规约束、团队能力和总成本共同决定。
抽象层也要有边界。可以把云资源申请写成可重复执行的配置,把业务代码与少量基础设施适配代码分开。但如果抽象隐藏了真实限制,排障反而更困难。保留底层资源标识、部署结果与差异说明,让工程师能追到实际对象。抽象帮助重复工作,架构责任仍然包括理解各环境发生了什么。
6 常见坑:为多云而多云
最常见的误区,是把“使用更多云”直接当成“更加可靠”。如果云 A、云 B 共用同一个域名配置、同一条企业出口、同一个身份源,某个共享依赖失效仍可能同时影响两边。供应商不同并不证明故障相互独立。需要检查实际依赖和故障范围,尤其注意为了统一管理而新建的中央组件。
另一个误区,是先搭建复杂平台,再寻找业务用途。团队维护了跨云集群、统一控制面和大量适配规则,却没有明确哪些服务必须恢复、允许损失多少数据。平台本身增加了升级与排障任务,业务恢复目标仍然没有证据。更好的起点是选择一个有价值且边界清楚的服务,完成恢复闭环,再判断是否值得扩大范围。
还有一种情况是应用副本齐全,数据准备不足。备用 API 可以返回健康状态,真正下单时却找不到最近订单,或因权限不足无法写入。健康探测应分层:进程存活反映基础运行状态,依赖探测反映关键组件可达,业务探测反映可完成的用户动作。探测频率与操作方式要控制,避免为了检查业务而制造真实订单或修改生产数据。

“配置完全相同”也可能带来问题。不同环境的地址、证书、密钥与容量常常本就应该不同;把生产密钥复制到备用环境,会扩大权限暴露。应区分需要一致的策略与必须变化的参数。以模板表达共同结构,以受控参数表达环境差异,再检查实际运行状态。配置文件相同不能证明解析结果、权限效果和路由行为相同。
最后,不要把演练成功理解为永久有效。应用新增了消息队列,数据库升级了版本,身份规则改了条件,都可能使原恢复路径失效。演练频率应与业务风险和变更速度匹配,重大依赖变更后重新检查关键路径。记录哪些条件已经验证、哪些仍是假设,比在架构图上画一条“自动切换”箭头更能帮助团队决策。
7 案例:两朵云配置漂移难排障
某订单团队在云 A 正常运行,在云 B 保留备用环境。季度演练时,云 B 的实例启动成功,健康接口返回正常,但创建订单间歇超时。团队先增加实例数量,错误率没有明显下降。表面上看是备用容量不足,实际证据却只说明进程能响应简单请求,尚未覆盖写订单的依赖路径。
团队随后选择带唯一请求标识的模拟订单,从入口查到 API 日志,发现请求进入云 B 后等待库存接口超时。相同版本在云 A 正常,于是先比较环境相关配置,而不是立即修改业务逻辑。排查记录包含发生时间、部署版本、请求标识、目标地址与错误类型,使不同岗位能讨论同一笔请求,避免各自拿不同时间的截图推断原因。
进一步检查发现,机房库存服务近期更换了地址。云 A 的受控配置已更新,云 B 仍保留旧地址;与此同时,云 B 的域名解析记录与预期不一致。部署使用同一份应用镜像,但环境参数没有同步维护。重复扩容只会启动更多使用旧地址的实例。这类实际状态逐渐偏离批准配置的现象,就是配置漂移。

处理时先把问题分开验证:确认备用 API 使用的有效配置,查看域名实际解析结果,再从对应网络位置检查连通性与访问规则。不是一上来同时放开权限、改路由和换版本。每次只改变可解释的一项,并记录前后结果。定位到旧地址后,通过受控发布更新参数,执行库存查询与订单写入测试,才继续原来的切换演练。
这次事件还暴露了观测缺口。云 B 没有上报配置版本,健康探测没有覆盖库存依赖,值班手册也没有写明备用环境的参数负责人。修复不能止于改正地址。团队为各环境建立共同配置清单,把允许不同的字段单独列出;部署后记录有效配置的非敏感摘要,并增加业务探测。密钥内容不进入日志,配置版本仍能用于关联证据。
案例的结论不是所有配置都要逐字相同,而是每项差异都应有理由与负责人。若云 B 本来就使用不同库存入口,检查应验证它符合云 B 的预期,而非强行与云 A 相等。持续比较批准状态与实际状态,并把新依赖加入恢复流程,才能减少漂移反复出现。跨云排障的难点往往是边界信息缺失,而不只是某个工具不够强。
8 把多云边界写进架构方案
架构方案首先写采用理由与覆盖范围。说明哪个业务动作需要跨云能力,哪些环境参与,以及本阶段承诺哪种恢复方式。例如订单创建具备人工批准的备用接管路径,历史报表按较慢节奏恢复,仓库设备仍由机房管理。不同业务可以有不同目标,不能把整张架构图都默认纳入同一个高等级承诺。
然后写依赖与责任。对部署、身份、网络、数据和观测,分别标出负责人、权威配置来源、共享依赖和失效后的行为。明确谁批准写入位置变化,谁核对订单,谁决定对外恢复服务。尤其要说明业务状态的权威来源:切换后以哪个数据库为准,旧环境恢复后如何处理,疑似缺失订单如何进入核对流程。
目标需要对应证据。写 RTO 与 RPO 时,附上计时起止口径、可恢复数据的识别方法、最近演练条件和结果。如果只测过小规模模拟订单,就如实说明尚未证明高峰流量下的行为。把测试条件写清,能防止读者把局部成功推成全面保证。恢复承诺还应包括入口收敛、身份可用和业务验收,不只包含计算资源启动。
退出安排也要具体。保留哪些格式的数据、多久验证一次恢复、导出和传输由谁执行、合同结束前需要多长准备时间。对暂时接受的供应商依赖,说明收益、迁移影响与触发重新评估的条件。可以接受某项依赖,但不能把迁移成本留成未知。方案应让接手者知道先做什么、需要谁、成功如何判断。
最后写能力边界与维护方式。备用容量能支撑哪些业务量,超过后如何限流;链路中断时哪些功能降级;数据无法满足恢复目标时如何暂停切换。指定变更触发条件,让新增数据库、消息系统或身份依赖时同步更新方案。架构文档只有进入发布与演练流程,才有机会持续反映真实系统。
9 从混合云与多云走向FinOps(C62)
当边界与恢复路径明确后,就能继续讨论它们的成本。多云账单往往分散在不同账户、计费项目与时间口径中。相同名称的资源也可能包含不同服务内容,因此不能只把各处金额简单并排。先建立共同的业务归属,再把计算、存储、传输、支持服务与必要的运营投入放到相应范围内,才有可解释的比较。
订单服务可从“维持当前恢复能力每月需要多少成本”开始,而不急着计算复杂收益。备用实例、复制存储、跨云传输、日志保留和演练都会消耗资源。复制量增加可能来自订单增长,也可能来自无效重传;日志量上涨可能帮助排障,也可能只是重复采集。费用变化应与业务量、架构变更和服务目标一起观察。
保留备用资源意味着付费购买某种恢复选择。平时利用率低,并不足以证明它应该删除;但如果从未演练、无法接管,也不能仅用“保险”解释长期支出。需要把费用与能力证据关联:这笔钱支持了什么目标,最近一次验证结果如何,能否用更低成本达到同样要求。优化应同时考虑钱、风险和运维负担。
进入 C62 的 FinOps 主题后,将进一步讨论如何让工程、财务与业务使用共同口径理解云支出,并形成持续反馈。本课先留下可衔接的材料:资源归属、环境标签、数据传输方向、备用容量用途、恢复目标和演练记录。只有知道资源为什么存在,才能判断费用是否合理,也才能解释某项节约会改变什么业务能力。
放进方案里
本方案采用云 A 作为订单服务主环境,云 B 作为备用环境,仓库库存接口保留在企业机房。跨云建设的目标是提供经过演练的订单恢复路径;历史报表按独立目标恢复。正常情况下仅云 A 接受订单写入,云 B 保持可部署的应用、受控配置和异步复制的数据。练习目标为 RTO 30 分钟、RPO 5 分钟,正式上线前由业务负责人确认,并以业务恢复与可核对数据作为验收依据。
部署统一记录应用版本、配置版本、环境和负责人。员工经企业身份源获得各环境角色,工作负载使用限定权限的身份;应急访问独立保管并审计。网络清单记录地址范围、解析、路由与访问规则,明确机房连接属于共享依赖。各环境保留本地诊断证据,并以请求标识关联入口、API、库存接口和数据库事件。敏感凭据不写入日志。
故障切换由值班负责人提出、业务负责人批准。执行前须确认旧环境写入已被隔离,并核对备用数据恢复点;无法确认时暂停接管,按预案限制新订单。备用环境完成身份、数据和模拟订单验证后调整入口,持续核对错误率、订单状态与重复请求。旧环境恢复后保持隔离,以当前权威数据重建,并另行安排回切。
方案验收保留演练时间线、恢复数据位置、缺失订单核对结果及未覆盖条件。新增关键依赖或重大配置变更后重新检查恢复路径。成本清单包含备用计算、存储、跨云传输、观测与演练投入,并标记业务归属。供应商特有能力逐项记录迁移影响,定期验证数据导出和恢复。是否扩大多云范围,以恢复收益、实际证据和持续成本共同决定。
10 小结:下一步FinOps(C62)
混合云与多云让系统跨越更多边界,也让部署、身份、网络、数据与观测必须共同接受检验。一致性运营帮助团队管理差异,逃生能力则需要完整的依赖准备、写入控制和恢复证据。多处运行资源,只是设计的起点。
读完后,尝试回答:备用 API 仍依赖主环境身份服务时,会留下什么风险?为什么入口不可达不能证明旧数据库已停止写入?如果跨云传输费用增加,应该关联哪些业务与技术证据?带着这些问题进入 C62,就能把恢复能力与云成本放在同一份方案中讨论。