全球异地多活架构设计(二): 数据层的支持

在全球异地多活架构中,数据层需要支持多机房写入和最终一致性。本文探讨了数据同步的关键问题,包括获取数据变更、避免丢重乱序和数据回环同步,并提出了解决方案。同时,文章介绍了冲突处理策略,如LWW(Last Write Wins)、指定逻辑主DC以及冲突报告订阅,以确保多点写入时的数据一致性。
摘要由CSDN通过智能技术生成

要做到全球异地多活, 一定要在数据层支持多机房写入, 并且对大多数业务场景提供最终一致性的解决方案。原因如下:

  • 跨洲的网络延迟在100ms的数量级,如果只有单点写, 对于用户体验是种灾难
  • 对于高频操作来说, 如果做强一致性,那么任然受限于网络延迟, 对于用户体验是种灾难

既然决定要选择最终一致性, 那么随之而来就有两个问题需要解决:

  1. 跨机房的数据同步
  2. 多点写入时的数据冲突处理

一 、数据同步

数据的同步有几个核心问题需要考虑:

  1. 获取数据变更以及重放
  2. 不丢不重不乱序
  3. 避免数据回环同步

获取数据变更以及重放

这个问题比较好解决, 可以通过存储提供的增量日志(比如mysql的binlog,redis的AOF)来获取本机房的数据变更。 如果用到的存储没有提供这个功能, 也可以考虑在业务层做类似的事情。 比如写入成功后, 把变更操作发到消息队列。(但是对于数据一致性要求比较高的场景, 要考虑到[变更存储+发消息]这个操作的事务性,很麻烦)。

一般来说,我们用的存储都会提供主从方案,所以思路都是通过fake成主存储的一个slave来获取数据变更
获取到变更之后,可以写入消息队列再mirror到别的DC(比如Kafka MirrorMaker), 在别的DC重放这些变更。

不丢不重不乱序

这时候引入了新问题, 消息的写入和消费,是否需要exactly

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值