分布式事务

   近日,笔者有幸给小组们分享了分布式事务的基本内容。在此做个记录自己的学习笔记。笔者的内容也不高深,也是来自多些博客和一些视频资料。

对于分布式事务从这几方面谈起:

  什么是分布式事务

  分布式事务有哪些解决方案

  分布式事务有哪些应用框架

  分布式事务的实践与应用

  什么是分布式事务

    什么是分布式事务呢?随着人们的需要,我们的系统越来越复杂,现在流行微服务,原先整个大的一个业务流程往往需要多个服务的协作才能够完成。比如一个业务流程:客户下单购买,然后扣除用户的积分,扣除用户的账户余额,生成订单记录等。这就涉及到多个服务,对于每个服务都有到DB的操作。生成订单,需要在DB里生成订单记录。积分需要操作积分服务的DB,扣除用户余额也需要操作DB。这种情况下有一定的概率订单成功了,但是积分,余额两个服务发生错误。对于在一个DB里的操作,我们可以用数据库自带的本地事务来解决,但是这种情况下,就无法解决了。可以说这种场景就是分布式事务的问题了。

  判断是不是分布式事务很简单,就是找出所有对资源的操作,可以说是操作文件,操作DB,操作内存等。我自己对于分布式事务的定义就是,多个资源下的多个操作,而且本地事务无法解决的问题就是分布式事务了。

有哪些解决方案呢?

  现在处理业务的分布式问题常见的有

  基于消息的一致性方案:总体上来说把一个业务操作的多个节点操作变成一个一个的消息。比如:生成订单,扣除积分,扣除余额都可以看成一个消息,这个消息要想执行需要查看前面的消息是否执行成功。

  TCC事务补偿:开发阶段提供多个接口,用代码来手工实现代码的预提交,提交和回滚。

最大努力通知型:总的来说也是利用消息中间件发送消息给消息服务,消费多次发送到消费服务未果的其概况下,消费服务主动查询主动方的操作结果,定时扫描,保证数据一致性。

  说到分布式事务,也得谈下XA的DTP模型与2PC和3PC协议。2PC把一个分布式事务的操作分成了两个部分,事务的预提交和事务的提交/回滚。

3PC分成了三步操作,事务的提交请求,事务的预提交与事务的提交/回滚

    分布式事务的内容接着学习中。。。。。。

posted on 2018-11-19 23:54  云牙子  阅读(32)  评论(0)    收藏  举报

导航