私は、同期データソースを保証するシステム/フレームワークが犯す可能性のある障害回復処置について理由を考えようとしていました。私はナラヤナの回復メカニズムについての明確な説明を見つけることができませんでした。Narayana/XAはTM障害からどのように復旧しますか?
Q1:Narayanaは基本的に、2つのデータソース間で分散トランザクションを保証するために2フェーズコミットを採用していますか?
質問2:このシナリオでナラヤナの行動を説明できる人はいますか?
- アプリケーションは、2つのデータストアナラヤナのトランザクション・マネージャー(TM)は、トランザクションIDを生成し、ディスクに情報を書き込み にXを保存したいTMは現在、両方のデータ・ストアへの準備メッセージを送る
- 各データストアはprepare_successで応答します
- TMはローカルトランザクションログを更新し、両方のデータストアにコミットメッセージを送信します
- TMが失敗します(永続的に)。また、ネットワーク上のパケット損失のため、1つのデータストアだけがコミットメッセージを受信します。しかし、他のデータストアは、コミットメッセージを受信して正常に処理します。
2つのデータストアは互いに同期していません(一方のソースには、もう一方のソースには存在しない追加のトランザクションがあります)。
新しいTMが起動されると、古いトランザクション状態レコードにアクセスすることはできません。したがって、TMはデータストアの1つで欠落しているトランザクションの回復を開始できません。
2PC/Narayana/XAは、2つのデータストアを同期して維持できる分散トランザクションをどのように保証することができますか?私の立場からは、非常に高い確率で同期データストアを維持することしかできませんが、保証はできません。
Q3:アプリケーション/フレームワークの動作が不明な別のシナリオ。
- ディ= I
- のTi =トランザクションI
- パイ=ためのメッセージを準備するデータ源: - 次のインターリーブ取引(または少なくともレコードの部分的に重複するセットと同じレコードの両方に)検討トランザクションi
D1はP1を受け取ります。 P1_successに応答します。
D2はP2を受け取ります。 P2_successに応答します。
D1はP2を受け取ります。 P2_failureに応答します。
D2はP1を受け取ります。応答P1_failure
ネットワークパケットが異なるデータソースに到達する順序によって、どの準備要求が成功するかが決まります。これは、論争の激しいレコードの高速トランザクション速度であることを意味するのではなく、すべてのトランザクションが失敗し続ける可能性があります(レコードのトランザクション要求レートが低下するまで)。
ACIDシステムとは異なり、一貫性を選択すると主張できますが、少なくとも1つのトランザクションが成功するという保証はありません(したがって、デッドロックが長続きしない可能性があります)。
Narayanaのタグを作成できません - http://narayana.io//docs/project/index.html#d0e2032 コミュニティ - タグを作成して追加することができたらうれしいですこの質問 – skittish
もちろん、私は3相コミットを持っている正確な理由は、この質問をした後に私は発見した。 :) https://en.wikipedia.org/wiki/Three-phase_commit_protocol#Motivation 私はこの質問を他の2つの質問に答えることができるという希望で開いています。 – skittish