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

  • 时间:
  • 浏览:0
  • 来源:大发5分快乐8APP下载_大发5分快乐8APP官方

)

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

在后面 法子中还要看到还要手工编写血块的代码来处置以保证事务的完正性,人们人们还要考虑实现一另另五个多通用的事务管理器,实现事务链和事务上下文的管理。对于事务链上的任何一另另五个多服务正向和逆向操作均在事务管理和协同器上注册,由事务管理器接管所有的事务补偿和回滚操作。

在什儿 情况下你会面 例子来说,首先调用取款服务,完正调用成功并返回,数据可能持久化。而且调用异地的存款服务,可能也调用成功,则某种无任何大问题。可能调用失败,则还要调用本地注册的逆向服务(本地存款服务),可能本地存款服务调用失败,则还要考虑重试,可能约定重试次数仍然不成功,则还要log到完正的不一致信息。也还就是将本地存款服务作为消息发送到消息后面 件,由消息后面 件接管后续操作。

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

关于是否是 还要补偿的大问题 在这里人们人们谈的是多个跨系统的业务服务组合成一另另五个多分布式事务,而且在对事务进行补偿的随后还要要考虑客户还要的是否是 一定是最终一致性。客户对后面 阶段冒出 的不一致的承受度是如何的。

基于消息的最终一致性 在这里首先要回答的是人们人们还要时实时一致性还是最终一致性的大问题,可能还要的是最终一致性,如此BASE策略中的基于消息的最终一致性是比较好的处置方案。什儿 方案真正实现了一另另五个多服务的真正解耦,解耦的关键就是异步消息和消息持久化机制。

还要设想一另另五个多最简单的分布式事务场景,对于跨银行的转账操作,该操作涉及到调用一另另五个多异地的Service服务,一另另五个多是本地提供的取款服务,一另另五个多是目标银行提供的存款服务,该一另另五个多服务某种无情况且独立,构成一另另五个多完正的事务。对于事务的处置初步分析:

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

异地银行存款操作不应该长久地冒出 异常而无法使用,而且一旦发现异常人们人们还要好快了 了 的处置,消息后面 件中异常服务自然会进行重试以保证事务的最终一致性。什儿 法子假设大问题一定还要处置,在如此万不得已的情况下本地的取款服务一般不进行可逆操作。

) 评论(

可能解耦,人们人们看到客户得到成功返回的随后,可能是后面 某种情况则异地卡马上就能查询账户存款增加。而第二种情况则不一定,可能某种是某种异步处置机制。消息后面 件得到消息一定会去对消息解析,而且调用异地银行提供的存款服务进行存款,可能服务调用失败则进行重试。

首先是不建议采用XA两阶段提交法子去处置分布式事务,要知道要也能支持XA分布式事务,还就是想实现XA规范才还要,而Service某种是无情况的,可能曾经去做了等于是把Service内部内部结构的东西暴露了出去。对于分布式事务法子还是事务补偿可能BASE基于消息的最终一致性。

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

关于等幂操作的大问题 重复调用多次产生的业务结果与调用一次产生的业务结果相同,简单点讲所有提供的业务服务,不管是正向还是逆向的业务服务,都还要要支持重试。可能服务调用失败什儿 异常还要考虑到,如此可能服务的多次调用就原因业务数据的累计增加或减少。

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

还是你会面 的例子来看。对于转账操作,原有的一另另五个多服务调用变化为第一步调用本地的取款服务,第二步发送异地取款的异步消息到消息后面 件。可能第二步在本地,则保证事务的完正性基本无任何大问题,即某种就是本地事务的管理机制。而且一另另五个多操作都成功即还要返回客户成功。

在本地取款到异地存款一另另五个多服务调用之间,会地处一另另五个多真空期,这段时间相关现金如此任何一另另五个多账户,而也如此一另另五个多事务的后面 情况,而且客户从不关心什儿 ,而且在约定的时间保证事务最终的一致性即可。

阅读(

作者:何明璐

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

来源:知乎

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

posted @

其次对于前面讨论,可能真正还要的是实时的一致性,如此即使采用事务补偿机制,也无法达到实时的一致性。即很可能在一另另五个多业务服务调用后面 ,客户前台业务操作对持久化的数据进行了其它额外的操作。在什儿 模式下,人们人们不得不考虑还要在数据库表增加业务情况锁的大问题,即整个事务如此完正提交并成功前,第一另另五个多业务服务调用真是 持久化在数据库,而且仍然是一另另五个多后面 情况,还要通过业务锁来标记,控制相关的业务操作和行为。而且在什儿 模式下无疑增加了整个分布式业务系统的复杂度。