Narayana/XA 如何从 TM 故障中恢复?

How do Narayana/XA recover from TM failures?

我试图推理 systems/frameworks 可以采取的保证同步数据源的故障恢复操作。我一直无法找到 Narayana 恢复机制的明确解释。

Q1:Narayana 本质上是否采用两阶段提交来确保跨 2 个数据源的分布式事务?

问题 2:谁能解释一下 Narayana 在这种情况下的行为?

  1. 应用程序想要将 X 保存到 2 个数据存储
  2. Narayana 的事务管理器 (TM) 生成事务 ID 并将信息写入磁盘
  3. TM 现在向两个数据存储发送准备消息
  4. 每个数据存储响应 prepare_success
  5. TM 更新本地事务日志并向两个数据存储发送提交消息
  6. TM 失败(永久)。并且由于网络上的丢包,只有一个数据存储收到提交消息。但是其他数据存储收到并成功处理了提交消息。

这两个数据存储现在彼此不同步(一个源有另一个源中不存在的额外事务)。

启动新 TM 时,它无法访问旧的事务状态记录。因此 TM 无法在其中一个数据存储中启动丢失事务的恢复。

那么 2PC/Narayana/XA 怎么能声称他们保证可以保持 2 个数据存储同步的分布式事务呢?从我的立场来看,他们只能以很高的概率保持同步数据存储,但他们不能保证。

Q3:我不清楚 application/framework 行为的另一种情况。考虑以下交错事务(都在同一条记录上 - 或者至少有部分重叠的记录集):

D1 receives P1; responds P1_success

D2 receives P2; responds P2_success

D1 receives P2; responds P2_failure

D2 receives P1; responds P1_failure

网络数据包到达不同数据源的顺序可以决定哪个准备请求成功。这是否意味着有争议的记录在高交易速度下 - 有可能所有交易都会失败(直到记录遇到较低的交易请求率)?

有人可能会争辩说我们选择的是一致性而不是可用性,但与 ACID 系统不同的是,不能保证至少有一个事务会成功(从而避免潜在的长期死锁)。

请参阅我关于 Narayana 2PC 工作原理的文章 https://developer.jboss.org/wiki/TwoPhaseCommit2PC

回答你的问题

Q1:您已经在评论中提到了这一点——是的,Narayana 使用 2PC = Narayana 实现了 XA 规范 (pubs.opengroup.org/onlinepubs/009680699/toc.pdf ).

Q2:场景中的步骤不准确。 Narayana 在调用准备时写入磁盘,而不是在事务启动时写入。

  1. 应用程序将 X 保存到 2 个数据存储
  2. TM 现在向两个数据存储发送准备消息
  3. 每个数据存储响应 prepare_success
  4. TM 将有关准备好的交易及其 ID 的信息永久保存到交易日志存储中
  5. TM 向两个数据存储发送提交消息
  6. ...

我不同意 2PC 声称保证保持 2 个数据存储同步。 我也想知道这个(例如在这里问 https://developer.jboss.org/message/954043)。 2PC 声称保证 ACID 属性。让 2 个存储同步是 CAP 一致性的一种表现。

在此 Narayana 中,严格取决于特定资源管理器(数据存储或 jdbc 数据存储驱动程序)的功能。 ACID 声明

  • 原子性 - 整个事务被提交或回滚(发生时没有信息,没有关于同步资源的信息)
  • 一致性——交易结束前和交易结束时系统处于一致状态
  • 耐用性 - 即使发生崩溃也会存储所有内容
  • 隔离——(棘手的一个,留在最后)——为了成为 ACID,我们必须是可序列化的。那就是您可以观察到发生的交易 "one by one"。 如果我举一个非常简单的例子来表明我的观点——期望数据库以一种在事务开始时锁定整个数据库的天真方式实现——你提交了 jms 消息,该消息已经处理,现在你不提交数据库记录。当 DB 在可序列化隔离级别工作时(这是 ACID 所要求的!),那么您的下一个 write/read 操作必须等到 'in-flight prepared' 事务被解决。 DB 只是卡住等待。如果你阅读你不会得到答案,所以你不能说什么是价值。 Narayana 的恢复管理器在连接建立后来到准备好的事务并提交它。而你读到的动作returns信息就是'correct'.

Q3: 没看懂,抱歉。但是如果你说 The order in which the network packets arrive at the different data sources can determine which prepare request succeeds. 那么你是对的,在网络变得更稳定之前你注定会失败交易。