直接回答:异地多活的目标是两个:单元级容灾(某地域整体故障时业务不中断)与就近接入(用户访问延迟)。核心难点只有一个——数据:写入路由到哪个单元、单元间如何同步、冲突如何裁决。主流解法是单元化(按用户维度分片,某用户的数据归属单元固定,跨单元同步做灾备而非双写),同城双活(毫秒级专线)可以做存储层同步复制,异地(数十毫秒)只能异步,必须接受秒级 RPO。

展开解析:设计要点展开:路由层用 GSLB/网关按用户 ID 哈希分流,归属规则集中存储并支持迁移(用户改派单元需要数据搬迁与灰度);写原则“归属单元写、他单元读副本”,防脑裂靠归属仲裁(配置中心或分布式锁)而非两边都写;异步同步链路(DTS/binlog 订阅)要防循环复制(打单元标记过滤)与乱序覆盖(版本向量或时间戳加业务校验)。切换(failover)流程是最危险的环节:检测(多地域探活投票防误判)、决策(自动或人工,RPO 内未同步数据的取舍要提前定义)、切流(DNS/网关改路由,TTL 收敛时间分钟级)、回切(追平数据后再切回,往往比切出去更难)。降级预案常备:数据未追平时目标单元只读或限制高危操作。最后:多活的成本是非线性的,先评估业务是否真需要 RTO 分钟级——多数公司“同城双活 + 异地备份”已是正确终态。

追问方向:用户归属迁移怎么做无损?单元间缓存一致性如何处理?

(约 500 字)