【问题标题】:What happens when rollback fails in two Phase Commit protocol在两阶段提交协议中回滚失败时会发生什么
【发布时间】:2012-06-27 19:01:38
【问题描述】:

我正在尝试通过 REST 在 Java 中实现分布式服务的事务。我有一些问题要问。

  1. 当资源作出肯定答复并且在第 2 阶段它们未能提交时会发生什么?
  2. 我尝试搜索,但不幸的是,我无法找到正确的答案来解决 2PC 协议中回滚失败时发生的情况。我知道它是一个阻塞协议,它会无限期地等待响应,但是在现实世界的场景中会发生什么?
  3. 分布式事务管理的其他协议有哪些?
  4. 我阅读了有关用于事务实现的 JTA 的信息,但还有其他可用于实现事务的实现吗? 任何回复都会有所帮助。提前致谢。

【问题讨论】:

    标签: rest transactions jta


    【解决方案1】:

    我没有这些问题的答案,但我为我的具体案例创建了一个具体的方法。因此,如果有人需要针对相同情况进行交易,请在此处发布。

    因为在我的情况下,数据库(或索引器,它也作为服务运行)中的当前条目没有变化,但系统中只有不同位置的新条目,所以错误的失败不是有害的,而是错误的成功是。因此,对于我的特殊情况,我遵循以下策略:

    我。所有资源都在数据库中的行中添加了一个事务 ID。在协调器请求资源的第一阶段,所有资源在数据库中使用协调器生成的事务 id 进行条目。

    二。在第一阶段之后,当所有资源都回复肯定时,这意味着资源已经对数据库进行了更改,协调器在自己的日志中记录事务成功并将其传达给资源。所有资源使插入的数据行中的事务状态成功。

    三。一项服务不断运行以搜索数据库并通过向协调器询问状态来更正事务状态。如果没有条目或失败条目,则事务返回失败状态,并在服务上更新。在获取数据时,如果数据库中有一个带有失败标签的条目,那么它总是与协调器检查事务状态,如果没有失败条目,它会过滤结果。因此,不提供没有信息或存在故障信息的那些数据条目。所以结果总是一致的。

    这种策略为我的案例提供了一种原子性方法。

    【讨论】:

    • 当然,在 REST 上使用任何分布式事务都需要付出很大的努力,我可以通过研究我的需求来绕过。
    猜你喜欢
    • 2020-11-17
    • 2012-07-01
    • 1970-01-01
    • 2011-06-06
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多