双活模式是什么
双活(Active-Active)指两个站点同时对外提供服务,任一站点故障时另一个继续承接流量,通常配合 DNS/GSLB 或全局负载均衡做分流。无状态部分做双活相对成熟;一旦涉及有状态数据,就要在双向同步与分片写入之间做取舍,冲突处理和一致性是主要难点。
基本信息
| 适合双活 | 无状态应用、读多写少、可按用户或地域分片的服务 |
|---|---|
| 主要难点 | 数据双向同步的冲突解决、会话保持、跨站读写一致性 |
| 常见折中 | 应用双活 + 数据主备(写单边),即『双活接入、单边写』 |
| 流量调度 | DNS/GSLB、全局负载均衡、Anycast,配合健康探测摘除故障站点 |
典型使用场景
- 前端与 API 层双活:两端都跑无状态集群,就近接入降低时延
- 读双活写单边:两地都能读,写只落主站点,避免冲突与回环
- 按用户分片双活:按用户 ID 哈希固定归属站点,区内单写、跨区只同步汇总数据
- 同城双活做机房级容灾:时延低时可考虑更激进的一致策略
- 异地双活 + 异步复制:牺牲少量 RPO 换取跨城写性能
分层组合思路(示意)
分层组合思路(示意)
接入层:DNS/GSLB 按地域与健康状态分流 → 站点 A / 站点 B
应用层:无状态集群,会话外置(Redis/JWT),两端可互换
数据层方案一:双向复制 + 冲突策略(后写胜出需时钟同步,否则数据分叉)
数据层方案二:按用户分片单边写,跨站交换机密数据走异步链路
数据层方案三:读双活写单边,写只在主站点,备站点只承接读流量三种落地形态对照
| 形态 | 数据一致性 | 复杂度 | 适用判断 |
|---|---|---|---|
| 应用双活 + 数据主备 | 主备一致,备侧只读 | 低 | 多数业务的首选,投入产出比最高 |
| 分片双活(单边写) | 区内强一致,跨区最终一致 | 中 | 用户可按维度切分且跨区分片数据少 |
| 全量双向同步 | 最终一致,需冲突合并 | 高 | 仅在有明确冲突策略与校验手段时采用 |
『双活』在厂商语境里范围不一:有的只指接入层双活,有的包含有状态双活。评估方案时先把有状态数据怎么处理问清楚,再谈切换指标。
双活不等于免演练:切流、回切、单向降级三种动作都要有预案与实测记录,尤其是回切时如何把两端数据对齐,否则演练结束反而留下数据分叉。