分布式系统数据一致性问题

2021-09-16 22:20:41 +08:00
 SirCarol

针对分布式系统下的数据一致性问题,想与大家交流一下在实际业务中已经落地的实现方案。

所以,大家在具体的项目中,有没有比较好的方案,可以解决以上问题,谢谢!

3119 次点击
所在节点    程序员
16 条回复
wellsc
2021-09-16 22:36:37 +08:00
各种概念吹的天花乱坠,大部分公司都是人肉补偿
lithiumii
2021-09-16 23:04:02 +08:00
一般来说是读取 binlog 之类的吧,看看阿里的 data x 你能用吗。
但既然一致性要求没那么高,最简单办法么每个表都加 updated_at 字段,每次同步开始时取当前时间为截止时间去查询
如果有数据在同步的过程中变动,会生成一个新的 updated_at 字段并且会晚于你的查询时间,所以交给下一次同步就行了
如果会有不修改 updated_at 但修改数据的操作,那只能额外遍历处理了
SirCarol
2021-09-16 23:13:21 +08:00
@lithiumii #2 感谢回复。之前也想到使用 binlog 来判断数据是否被修改这一方法,若被修改,则发送 Kafka 消息,数据对比服务在收到该消息后会再次针对该数据进行数据对比,进而达到数据一致。

我再调研一下 data x 吧,谢谢。
airyland
2021-09-17 02:09:04 +08:00
同 2 楼,如果不使用数据库自带方案可以使用 updated_at 来同步,对 updated_at 进行索引。
JasonLaw
2021-09-17 06:30:50 +08:00
SirCarol
2021-09-17 08:37:19 +08:00
@airyland #4 感谢。就目前来说,这种方法的确能够满足当前的业务场景。
jifengg
2021-09-17 08:39:38 +08:00
正文内容貌似和“分布式”没什么关系。而且,看你的描述,几乎和“Mysql 主从备份”是一样的。那可以考虑往这方面去考虑。跨公网的话就解决公网访问的问题。
hushao
2021-09-17 10:23:32 +08:00
@jifengg 这可不就是主从备么。。。哪有分布式的事儿?按照现有的主从备份的方案来搞即可
BiChengfei
2021-09-17 10:25:56 +08:00
分布式系统中的 CAP 理论,你这里需要保证 CP,不过只用关注 C,一致性,Consistency,技术方案一般都要搭配业务和公司情况,只要能解决问题就是好方案,这个也只能给你提供思路
```
1. 开启 MySQL 事务
2. 写入 MySQL;
3. 写入 云平台,并判断是否成功
3.1 写入成功,提交 MySQL 事务,接口返回成功
3.2 写入失败,回滚 MySQL 事务,接口返回失败
```
对于历史数据,直接用工具同步。对于增量数据,可以想象上述方法,借用事务的思路,写入的时候,双写成功,接口才会返回插入成功,否则事务回滚,这样应该保存了数据强一致性。

对于楼上提出的用 DataX 或者 flinkX,这些工具只是做数据同步的工作,数据延迟较大,并且好像也不能保证一致性

欢迎大家提出意见
xsm1890
2021-09-17 10:28:29 +08:00
hh
PDdavon
2021-09-17 11:03:30 +08:00
使用 Datax 或者 Canal 都挺不错的,通过读取 binlog 同步数据的方式不会对 MySQL 服务器产生额外查询压力,Canal 使用广泛,高可用配置也非常简单,碰到问题网络上资料也非常多。
thtznet
2021-09-17 11:14:24 +08:00
强一致性、弱一致性、最终一致性,你要哪种?
SirCarol
2021-09-17 16:20:25 +08:00
@PDdavon #11 感谢分享。
kiddingU
2021-09-17 17:34:55 +08:00
binlog->canal->kafka->svr
facelezz
2021-09-17 18:20:35 +08:00
binlog 最好,canal 和 debezium 都行,基本没延迟
Saxton
2021-09-18 11:58:11 +08:00
推荐 canal

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802402

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX