支付宝分布式事务初探

最近有被人问到分布式事务的工作原理,由于从来没做过这方面的东西,只能胡乱猜测一番,结果当然是凌乱无比。

刚好今天有支付宝的高手来分享支付宝的分布式事务。跑去听了一下,果然大有收获。在这里把今天听到的总结一下,也算是份课堂笔记吧!

分布式事务,这个东西多半都是用在金融相关的系统上,应用的场景往往是多系统跨库。
相关的业务对事务的一致性要求很高,涉及到钱的东西当然分毫不能有差。
那么怎么来处理这些系统之间的事务。保证事务的一致性,原子性,持久性,隔离性呢?

举个例子,支付宝有交易系统、账户系统、积分系统等多个子系统。
当客户发起一笔交易时,需先在交易系统中插入交易记录,然后在账户系统中进行金额的增减,最后在积分系统中给加上最新的积分。
实际的业务比这个更复杂。这三部中有任何一步失败,都需要进行回滚。那么怎么保证这三个事务会进行回滚呢?

支付宝使用的是一个二段式的分布式事务
第一阶段,通知各子系统进行业务的操作,比如可以在交易系统中对交易记录表拷贝一个副表,在副表中插入交易记录。如果执行成功,子系统返回成功的信息

在这个中间还有一个很重要的角色就是有一个总调度者,他负责控制整个事务的流程。发起事务时首先要注册到调度者上,事务完成,或者回滚也是由调度者发起!

接着上面的继续,当子系统第一阶段业务执行成功,返回成功给调度者,如果所有子系统都返回成功信息,者调度者通知子系统进行第二阶段的操作,讲数据插入主表中,如果有任何一个子系统返回失败的消息,则通知所有系统回滚。

这是一个理想的状态,前提是每次业务操作都会完成,这样事务的一致性就可以保证,但是实际情况不是这样,比如服务器宕机,网络断掉等,会导致某一阶段不能完成

这样会导致事务的不完整,所以我们还需要一个清道夫式的角色,来保证系统中事务的完整。实际上我们可以创建一个定时钟,定时去扫描所有的事务,遇到超时,或者不完整的事务,一律通知各子系统进行回滚,这样虽然有可能会导致误杀一些执行时间过长的事务,但是却保证了整个系统的事务一致,所以还是值得的。

大致原理就是如此,具体的实现方式还是有很多技巧性的东西,在这里就不深入探讨了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值