分散型コヒーレンス・プロトコル:2PCや3PC

序文
 

分散システムアーキテクチャ設計の過程で、しばしばトレードオフデータ可用性とシステムの整合性の間に繰り返し、彼は一貫性プロトコルおよびアルゴリズムのシリーズを生成しました。最も顕著なのは2フェーズプロトコル(2PC)、三相コミットプロトコル(3PC)とPaxosアルゴリズムをコミットします。

各マシンのノードが明確に知ることができるが、分散システムでは、独自の業務処理を行うプロセスの結果は成功または失敗であるが、他の分散ノードの業績に直接得ることができませんでした。したがって、操作は、分散トランザクションのACID特性を維持するために、すべての分散ノードの統一された実行ロジックに「コーディネータ(コーディネータ)」と呼ばれるコンポーネントを導入する必要がある、複数のノード間でトランザクションを必要とする場合これらは分散ノードは、「参加者(参加者)」になるために予定されていました。スケジューリングコーディネーターは、参加者の行動に責任があると、それらの参加者が実際にトランザクションをコミットするかどうかの最終決定を取ります。二相に由来するこの考えに基づいてプロトコル(2PC)、三相コミットプロトコル(3PC)をコミット。
 
 

2フェーズ・コミット・プロトコルを(2PC)
 

簡単にすべての参加者を調整する分散トランザクションを完了するために、この契約で、それが効果的に分散されたデータの整合性を確保するため、販売契約の数は広く第二段階で使用されて提出することができるコミットまたはロールバックされ、トランザクションを統合することを決めました型システム。

名前が示すように、2PCトランザクションの提出プロセスは、処理のための2つの段階に分けています。次の

 
ステージ1:準備フェーズ

コーディネーターは、トランザクションが成功したかどうかを各参加者は、参加者からのフィードバックトランザクションの結果を要求します。

ここに画像を挿入説明
 
ここに画像を挿入説明
フェーズII:コミットフェーズは、
 
二つの可能性があるフェーズコミット

  • トランザクションは、各参加者に正常に実行されている場合は、参加者がトランザクションをコミットするように、トランザクション・コーディネーターが通知を送信します。
  • そうでなければ、限り不具合があるとして、コーディネータはトランザクションをロールバックするためにすべての参加者に通知を送信します。

準備段階では、参加者が取引を行ったが、まだコミットしていないことに留意すべきです。唯一のコミットフェーズ中にコーディネータによって送られた通知を受けた後、唯一のコミットまたはロールバックします。

2PCは、処置後の各トランザクションのコアは、送信しようとするために使用されているので、2段目の強い整合性として見られるアルゴリズムを提出することができます。
 
長所と短所の2PC分析
 
の利点

  • 単純な原理
  • 達成を促進します

短所

  • 同步阻塞:所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其它操作,极大的限制了系统的性能。
  • 单点问题:协调者在 2PC 中起到非常大的作用,发生故障将会造成很大影响。特别是在阶段二发生故障,所有参与者会一直等待,无法完成其它操作。
  • 数据不一致:在阶段二,如果协调者只发送了部分 Commit 消息,此时网络发生异常,那么只有部分参与者接收到 Commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。
  • 太过保守:任意一个节点失败就会导致整个事务失败,没有完善的容错机制。

 
二阶段提交协议(2PC)
 
是2PC的改进版,其将二阶段提交协议的阶段一分成两个过程,形成了由CanCommit、PreCommit 和 do Commit 三个阶段组成的事务处理协议。

阶段一:CanCommit
 
协调者向参与者发送一个包含事务内容的CanCommit请求,参与者回馈 Yes 或者 No

阶段二:PreCommit
 
根据阶段一的反馈结果,有两种操作可能

  • 如果阶段一所有参与者都反馈了 Yes ,那么协调者给参与者发送 preCommit 请求,执行预提交。如果参与者成功执行了事务操作,那么就反馈 Ack,之后等待最终命令 :提交(commit)还是终止(abort)。
  • 只要有一个 No 反馈,或者等待超时,那么就会中断事务。协调者向所有参与者发出终止(abort)请求。

阶段三:doCommit
 

该阶段将进行真正的提交,也是两种可能

  • 协调者收到了所有参与者的 Ack 确认,那就全部正式提交
  • 否则,全部回滚。

なお、一度入力された第III相は二つの障害があってもよいです。

  • コーディネーターの問題
  • コーディネーターと参加者の障害の間のネットワーク。

いずれの場合も、最終的には参加者の時間doCommitで受信したり、コーディネーターからの要求を中止しないで、その結果、そのような異常な状況のため、参加者は、トランザクションのコミットを続行するために待機した後にタイムアウトします。

 
3PCの長所と短所
 
長所:

2PCと比較すると、最大の利点は、参加者のブロッキング3PC範囲を縮小することで、単一障害点の後に合意に達するしていきます。

短所:

ネットワークが分割されている場合、参加者は、プリコミットメッセージを受信した後にも、閉塞を除去しながら3PCは、このとき、コーディネータノードと、参加者は、この場合、通常のネットワークトラフィックことができない、すなわち、新たな問題を引き起こします次回、参加者はまだデータの矛盾にバインドされているトランザクションに提出されます。

おすすめ

転載: blog.csdn.net/u013568373/article/details/91489352