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

  • 时间:
  • 浏览:2
  • 来源:大发5分排列5_极速5分排列3

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

在上边土法律法律依据中都可不能否 看得人须要手工编写多量的代码来外理以保证事务的完整版性,亲戚亲戚大伙儿都可不能否 考虑实现一个多 通用的事务管理器,实现事务链和事务上下文的管理。对于事务链上的任何一个多 服务正向和逆向操作均在事务管理和协同器上注册,由事务管理器接管所有的事务补偿和回滚操作。

关于等幂操作的什么的现象 重复调用多次产生的业务结果与调用一次产生的业务结果相同,简单点讲所有提供的业务服务,不管是正向还是逆向的业务服务,都须要要支持重试。可能服务调用失败这人 异常须要考虑到,都可不能否 了可能服务的多次调用而导致 业务数据的累计增加或减少。

可能解耦,亲戚亲戚大伙儿看得人客户得到成功返回的过后,可能是上边一种生活生活清况 则异地卡马上就能查询账户存款增加。而第二种清况 则不一定,可能一种生活生活是一种生活生活异步外理机制。消息上边件得到消息都会去对消息解析,可是调用异地银行提供的存款服务进行存款,可能服务调用失败则进行重试。

关于否有有都可不能否 补偿的什么的现象 在这里亲戚亲戚大伙儿谈的是多个跨系统的业务服务组合成一个多 分布式事务,可是在对事务进行补偿的过后须要要考虑客户须要的否有有一定是最终一致性。客户对上边阶段突然再次出现的不一致的承受度是怎样才能的。

) 评论(

作者:何明璐

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

来源:知乎

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

异地银行存款操作不应该长久地突然再次出现异常而无法使用,可是一旦发现异常亲戚亲戚大伙儿都可不能否 更慢的外理,消息上边件中异常服务自然会进行重试以保证事务的最终一致性。这人 土法律法律依据假设什么的现象一定都可不能否 外理,在都可不能否 了万不得已的清况 下本地的取款服务一般不进行可逆操作。

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

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

其次对于前面讨论,可能真正须要的是实时的一致性,没了即使采用事务补偿机制,也无法达到实时的一致性。即很可能在一个多 业务服务调用上边,客户前台业务操作对持久化的数据进行了其它额外的操作。在这人 模式下,亲戚亲戚大伙儿不得不考虑须要在数据库表增加业务清况 锁的什么的现象,即整个事务没了完整版提交并成功前,第一个多 业务服务调用着实持久化在数据库,可是仍然是一个多 上边清况 ,须要通过业务锁来标记,控制相关的业务操作和行为。可是在这人 模式下无疑增加了整个分布式业务系统的繁复度。

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

还是以上边的例子来看。对于转账操作,原有的一个多 服务调用变化为第一步调用本地的取款服务,第二步发送异地取款的异步消息到消息上边件。可能第二步在本地,则保证事务的完整版性基本无任何什么的现象,即一种生活生活可是本地事务的管理机制。假如一个多 操作都成功即都可不能否 返回客户成功。

在本地取款到异地存款一个多 服务调用之间,会占据 一个多 真空期,这段时间相关现金没了任何一个多 账户,而可是在一个多 事务的上边清况 ,可是客户暂且关心这人 ,假如在约定的时间保证事务最终的一致性即可。

posted @

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

阅读(

首先是不建议采用XA两阶段提交土法律法律依据去外理分布式事务,要知道要都都都可不能否支持XA分布式事务,须可是要实现XA规范才都可不能否 ,而Service一种生活生活是无清况 的,可能原本去做了等于是把Service内内外部的东西暴露了出去。对于分布式事务最好的土法律法律依据还是事务补偿可能BASE基于消息的最终一致性。

都可不能否 设想一个多 最简单的分布式事务场景,对于跨银行的转账操作,该操作涉及到调用一个多 异地的Service服务,一个多 是本地提供的取款服务,一个多 是目标银行提供的存款服务,该一个多 服务一种生活生活无清况 且独立,构成一个多 完整版的事务。对于事务的外理初步分析:

在这人 清况 下以上边例子来说,首先调用取款服务,完整版调用成功并返回,数据可能持久化。可是调用异地的存款服务,可能也调用成功,则一种生活生活无任何什么的现象。可能调用失败,则须要调用本地注册的逆向服务(本地存款服务),可能本地存款服务调用失败,则须要考虑重试,可能约定重试次数仍然不成功,则须要log到完整版的不一致信息。都都可不能否否有将本地存款服务作为消息发送到消息上边件,由消息上边件接管后续操作。

基于消息的最终一致性 在这里首真难回答的是亲戚亲戚大伙儿须要时实时一致性还是最终一致性的什么的现象,可能须要的是最终一致性,没了BASE策略中的基于消息的最终一致性是比较好的外理方案。这人 方案真正实现了一个多 服务的真正解耦,解耦的关键可是异步消息和消息持久化机制。

)