分布式服务的事务如何处理?比如dubbo,服务与服务之间的事务怎么处理比较好,现在有没有开源的解决方案?

  • 时间:
  • 浏览:4
  • 来源:UU直播快三官方_大发UU直播快3

作者:何明璐

链接:http://www.zhihu.com/question/29483490/answer/98237582

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

阅读(

其次对于前面讨论,机会真正都要的是实时的一致性,越来越即使采用事务补偿机制,也无法达到实时的一致性。即很机会在六个 业务服务调用上面,客户前台业务操作对持久化的数据进行了其它额外的操作。在你之类模式下,亲戚亲戚朋友不得不考虑都要在数据库表增加业务具体情况锁的什么的什么的问题,即整个事务越来越完全提交并成功前,第六个 业务服务调用其实持久化在数据库,咋样让仍然是六个 上面具体情况,都要通过业务锁来标记,控制相关的业务操作和行为。咋样让在你之类模式下无疑增加了整个分布式业务系统的繁杂度。

版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,而是承担相关法律责任。机会您发现本社区涵盖涉嫌抄袭的内容,欢迎发送邮件至:

在本地取款到异地存款六个 服务调用之间,会处于六个 真空期,这段时间相关现金越来越了任何六个 账户,而而是在六个 事务的上面具体情况,咋样让客户何必 关心你之类,假如在约定的时间保证事务最终的一致性即可。

进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

要能 设想六个 最简单的分布式事务场景,对于跨银行的转账操作,该操作涉及到调用六个 异地的Service服务,六个 是本地提供的取款服务,六个 是目标银行提供的存款服务,该六个 服务本身无具体情况且独立,构成六个 完全的事务。对于事务的出理 初步分析:

在上面办法中要能 看完都要手工编写几滴 的代码来出理 以保证事务的完全性,亲戚亲戚朋友要能 考虑实现六个 通用的事务管理器,实现事务链和事务上下文的管理。对于事务链上的任何六个 服务正向和逆向操作均在事务管理和协同器上注册,由事务管理器接管所有的事务补偿和回滚操作。

异地银行存款操作不应该长久地再次经常出现异常而无法使用,咋样让一旦发现异常亲戚亲戚朋友要能 越来越快的出理 ,消息上面件中异常服务自然会进行重试以保证事务的最终一致性。你之类办法假设什么的什么的问题一定要能 出理 ,在越来越万不得已的具体情况下本地的取款服务一般不进行可逆操作。

首先是不建议采用XA两阶段提交办法去出理 分布式事务,要知道要要能支持XA分布式事务,都而是要实现XA规范才要能 ,而Service本身是无具体情况的,机会另六个 去做了等于是把Service结构的东西暴露了出去。对于分布式事务最好的办法还是事务补偿机会BASE基于消息的最终一致性。

事务补偿机制 事务补偿即在事务链中的任何六个 正向事务操作,都都要处于六个 完全符合回滚规则的可逆事务。机会是六个 完全的事务链,则都要事务链中的每六个 业务服务或操作还会 对应的可逆服务。对于Service服务本身无具体情况,而是容易实现前面讨论过的通过DTC或XA机制实现的跨应用和资源的事务管理,建立跨资源的事务上下文。咋样让也较难以实现真正的预提交和正式提交的分离。

)

还是以上面的例子来看。对于转账操作,原有的六个 服务调用变化为第一步调用本地的取款服务,第二步发送异地取款的异步消息到消息上面件。机会第二步在本地,则保证事务的完全性基本无任何什么的什么的问题,即本身而是本地事务的管理机制。假如六个 操作都成功即要能 返回客户成功。

在上面的例子来看,机会采用事务补偿机制,基本要能 是做到准实时的补偿,不让有过多的影响。而机会采用基于消息的最终一致性办法,则机会整个周期比较长,都要较长的时间要能给得到最终的一致性。比如周六转款,客户机会下周一才得到通知转账不成功而进行了回退,越来越就都要要考虑客户是与否能给忍受。

) 评论(

关于等幂操作的什么的什么的问题 重复调用多次产生的业务结果与调用一次产生的业务结果相同,简单点讲所有提供的业务服务,不管是正向还是逆向的业务服务,都都要要支持重试。机会服务调用失败你之类异常都要考虑到,越来越机会服务的多次调用而意味着着业务数据的累计增加或减少。

关于SOA分布式事务具体情况参考:http://wenku.baidu.com/view/be946bec0975f46527d3e104.html

在你之类具体情况下以上面例子来说,首先调用取款服务,完全调用成功并返回,数据机会持久化。咋样让调用异地的存款服务,机会也调用成功,则本身无任何什么的什么的问题。机会调用失败,则都要调用本地注册的逆向服务(本地存款服务),机会本地存款服务调用失败,则都要考虑重试,机会约定重试次数仍然不成功,则都要log到完全的不一致信息。也要能 是将本地存款服务作为消息发送到消息上面件,由消息上面件接管后续操作。

基于消息的最终一致性 在这里首不难 回答的是亲戚亲戚朋友都要时实时一致性还是最终一致性的什么的什么的问题,机会都要的是最终一致性,越来越BASE策略中的基于消息的最终一致性是比较好的出理 方案。你之类方案真正实现了六个 服务的真正解耦,解耦的关键而是异步消息和消息持久化机制。

posted @

机会解耦,亲戚亲戚朋友看完客户得到成功返回的但是,机会是上面本身具体情况则异地卡马上就能查询账户存款增加。而第二种具体情况则不一定,机会本身是本身异步出理 机制。消息上面件得到消息还会 去对消息解析,咋样让调用异地银行提供的存款服务进行存款,机会服务调用失败则进行重试。

关于是与否要能 补偿的什么的什么的问题 在这里亲戚亲戚朋友谈的是多个跨系统的业务服务组合成六个 分布式事务,咋样让在对事务进行补偿的但是都要要考虑客户都要的是与否一定是最终一致性。客户对上面阶段再次经常出现的不一致的承受度是咋样的。