最终一致性+java实现_分布式事务方案 - 最终一致性

在分布式时代,分库分表是很常见的,微服务系统中,各个系统通常使用独立的数据库,所以,事务很难靠数据库本身保证,只能靠业务系统来解决。

例如支付宝中的余额宝、花呗,具体不清楚,但猜测应该就是2个服务,不是同一个数据库,我们还花呗的时候通常都是从余额宝中扣除的,这就是分布式事务,一个系统中扣减钱,一个系统中增加钱。

下面我们分析下最终一致性的实现方案,最终一致性通常都是使用消息中间件来实现的,系统结构如下:

bd8ead5a5b946bd9adf0837ed2b9cbd1.png

用户向系统A发起转账请求,A先在自己的数据库中扣钱,然后通过消息中间件告诉B应该加钱,B收到后在自己的数据库中加钱。

这里有个关键问题,A更新数据库和给消息中间件发消息是2个操作,如下两个场景怎么处理:

先更新数据库,成功了,但发送消息失败了,重发多次还是失败

先发消息,成功了,但数据库更新失败,消息撤不回来了

都是因为这2个操作不是原子的,发做谁都有问题。

那看下这样做是否可以,就是把更新数据库和给消息中间件发消息放到一个事务中,这样不就原子了吗?

有问题,例如:

如果消息发送失败,具体问题出在哪儿?是消息中间件根

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值