数据同步

场景

多地域部署后,遇到新问题。

问题分析

数据流向:

北京(主库) → 上海(从库)

     └→ 广州(从库)

问题:
1. 主从延迟:几秒到几分钟
2. 网络不稳定:偶发中断
3. 数据一致性:用户期望实时

解决方案

1. 优化主从复制

设计流程
1. 优化主从复制:运行配置
  1. 步骤 1:声明主从、集群或故障切换关系
  2. 步骤 2:配置超时、重试和阈值
  3. 步骤 3:配置日志、监控和告警输出
关注点:路由准确性、跨区延迟、一致性和故障切换。

2. 应用层路由优化

设计流程
2. 应用层路由优化
  1. 步骤 1:更新跨地域路由、复制进度或主备状态
  2. 步骤 2:准备地域拓扑、健康状态、路由规则和复制进度
  3. 步骤 3:获取共享依赖连接并检查可用性
  4. 步骤 4:同步跨节点数据并检查延迟
关注点:路由准确性、跨区延迟、一致性和故障切换。

3. 最终一致性方案

设计流程
3. 最终一致性方案
  1. 步骤 1:同步跨节点数据并检查延迟
  2. 步骤 2:准备地域拓扑、健康状态、路由规则和复制进度
  3. 步骤 3:同步跨节点数据并检查延迟
  4. 步骤 4:校验延迟、一致性和故障切换结果
关注点:路由准确性、跨区延迟、一致性和故障切换。

监控和告警

主从同步监控

设计流程
主从同步监控
  1. 步骤 1:检查健康状态并触发告警
  2. 步骤 2:采集健康状态并触发告警
  3. 步骤 3:确认用户来源、目标地域和可用区健康状态
  4. 步骤 4:根据延迟、健康状态和一致性要求调整地域策略
关注点:路由准确性、跨区延迟、一致性和故障切换。
上线前多想一步
  • 谁负责写? 如果北京和上海都能改同一份数据,就要提前说清楚谁说了算。
  • 数据多久同步过去? 用户能不能接受几秒延迟,不能接受的操作就不要读从库。
  • 一个地域挂了怎么办? 用户请求切到哪里,切过去后还能不能看到刚刚提交的数据。

练习

练习 1

用户在北京提交了一个配置修改,随后被路由到上海地域,结果看到的还是旧配置。这个问题应该靠“强制所有读都回北京”解决吗?

参考答案 (3 个标签)
多地域 数据同步 一致性

不一定。所有读都回北京可以保证更强的一致性,但会牺牲上海用户的延迟,也会让北京重新成为瓶颈。

更合理的做法是按业务重要性分层:

  1. 强一致操作:刚提交后的配置详情、支付状态、账号安全信息,可以短时间读主库或读写同地域。
  2. 最终一致操作:报表、列表、非关键展示,可以接受几秒延迟,继续读本地从库。
  3. 给用户明确反馈:提交后显示“配置已提交,正在同步”,不要让用户误以为操作失败。
  4. 监控复制延迟:如果延迟超过阈值,临时把关键读切回主地域。

系统设计不是一味追求强一致,而是判断哪些数据必须立刻一致,哪些数据可以慢一点。