分布式系统数据一致性

[b]分布式系统数据一致性[/b]


[b]分布式事务有两种解决方式[/b]
[b]1.异步消息(消息队列)[/b]
(1)使用异步消息 Consumer 端需要实现幂等,幂等是指多个请求返回相同的结果。
(a)一种方式是业务逻辑保证幂等。比如接到支付成功的消息订单状态变成支付完成,如果当前状态是支付完成,则再收到一个支付成功的消息则说明消息重复了,直接作为消息成功处理。
(b)另外一种方式如果业务逻辑无法保证幂等,则要增加一个去重表或者类似的实现。对于 producer 端在业务数据库的同实例上放一个消息库,发消息和业务操作在同一个本地事务里。发消息的时候消息并不立即发出,而是向消息库插入一条消息记录,然后在事务提交的时候再异步将消息发出,发送消息如果成功则将消息库里的消息删除,如果遇到消息队列服务异常或网络问题,消息没有成功发出那么消息就留在这里了,会有另外一个服务不断地将这些消息扫出重新发送。

[b]2. 有的业务不适合异步消息的方式,事务的各个参与方都需要同步的得到结果[/b]。每个参与方的本地业务库的同实例上面放一个事务记录库。由一个中心服务对比三方的事务记录表,做一个最终决定。假设现在三方的事务记录是 A 成功,B 失败,C 成功。那么最终决定有两种方式,根据具体场景:
(1)重试 B,直到 B 成功,事务记录表里记录了各项调用参数等信息;
(2)执行 A 和 B 的补偿操作(一种可行的补偿方式是回滚)。


[b]DTS 方案[/b]
1.支付宝在 2PC 的基础上改进而来。
2.分布式事务服务 (Distributed Transaction Service, DTS) 是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。


分布式环境下(数据分布)要任何时刻保证数据一致性是不可能的,只能采取妥协的方案来保证数据最终一致性。


参考原文(保证分布式系统数据一致性的6种方案):[url]http://www.cnblogs.com/lzyGod/p/5558474.html[/url]
参考原文(关于分布式系统的数据一致性问题):[url]http://elf8848.iteye.com/blog/2067771[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值