Skip to content

概念卡片:高可用架构(双活与异地多活)

一句话机制:多活架构解决「机房级故障」的容灾——从冷备(备份不接流量)→ 热备(待机随时接管)→ 双活(两机房同时服务)→ 多活(多机房按规则分流),核心难点不是「多部署几套」,而是数据同步流量调度

容灾等级演进

等级机制特点
冷备全量备份,平时不接流量成本低,恢复慢(手动)
热备系统运行但不承担流量断电即接管,资源半闲置
双活两机房同时服务,互为备份任一机房挂,另一立即顶上
多活多机房分流,双活升级版就近访问 + 容量扩展

同城双活 vs 异地多活

维度同城双活异地多活
延迟专线直连,延迟小跨城,延迟高
容灾能力机房级城市级(防自然灾害)
复杂度低(入门款)高(复杂度质变)
流量分配主备 / 负载分担(7:3) / 按业务拆分单元化 + 智能调度

异地多活的核心:单元化

把系统按维度(如用户 ID)切成多个相对独立的单元,每个单元有自己的应用 + 数据,用户固定路由到自己的单元——像「大食堂分成小食堂」,一个单元出问题不影响其他单元。

数据同步三类方案

层级方案
数据库级MySQL 主从(有延迟)/ Group Replication(多主)/ 分库分表+中间件
消息队列级Kafka 异步同步 / RocketMQ 多活
应用级双写 / 异步补偿 / 事件驱动

不变量(必须成立的约束)

  • 多活的一致性是最终一致,不要追求强一致(跨机房强一致代价极大)。
  • 单元化是异地多活的关键:用户/数据按维度切分,避免跨单元访问。
  • 跨机房事务是大坑:尽量业务拆分避免跨机房事务,用 Saga 替代 2PC。

踩坑案例

  • 现象:测试环境多活正常,生产上数据各种不一致。 原因:跨机房数据同步有延迟,却按强一致设计。解决:设计即按最终一致 + 关键数据补偿机制 + 定期一致性校验修复。

常见误解

  • 以为多活就是「多部署几套服务」→ 真正的难点是数据同步 + 流量调度 + 冲突解决
  • 以为双活 = 热备 → 热备不接流量,双活是两机房同时接流量

关联

  • 一致性理论:概念卡片:分布式一致性理论
  • 源:B40-资源/语雀-Code-Summary/Middleware/Cache&HighAvailability/HighAvailabilityTheory(2 篇:双活设计 + 得物异地多活改造)
最近更新