インタビュアー: 2 フェーズ コミットと 3 フェーズ コミットの違いは何ですか?

インタビュアー: 2 フェーズ コミットと 3 フェーズ コミットの違いは何ですか?

分散トランザクションでは、分散トランザクションの正常な動作を確保するために、通常、2 フェーズ プロトコルまたは 3 フェーズ プロトコルが使用されます。これは、X/Open によって定義された分散トランザクション標準のセットでもあります。

X/Open は、もともと UNIX 環境の標準を提供するために設立された、複数の国際的なコンピュータ製造業者の連合体です。

分散トランザクションとは、分散システム内の複数のノード間で実行されるトランザクション操作を指します。たとえば、分散システムでは、ユーザーが注文を行うときに、注文情報を作成し、同時に在庫を減らす必要があります。ただし、次の図に示すように、注文情報の作成と在庫の削減は、異なるサーバーおよび異なるデータベースに分散されます。

写真

この時点で、すべての操作が一緒にコミットされるか、一緒にロールバックされるように、分散トランザクションが介入する必要があります。

1. 2フェーズコミット

2 フェーズ コミット (2PC) は、トランザクションをコミットまたはロールバックするときにすべての参加者が一貫した状態であることを保証する分散トランザクション プロトコルです。 2PC プロトコルは次の 2 つのフェーズで構成されます。

  1. 準備フェーズ: このフェーズでは、トランザクション コーディネーターはすべてのトランザクション参加者に準備要求を送信し、トランザクションをコミットする準備ができているかどうかを尋ねます。参加者は必要なすべてのアクションを実行し、トランザクションをコミットする準備ができているかどうかをコーディネータに応答します。すべての参加者がトランザクションをコミットする準備ができていると応答した場合、コーディネーターは次のフェーズに進みます。いずれかの参加者がトランザクションをコミットする準備ができていない場合、コーディネーターはすべての参加者にトランザクションをロールバックするように通知します。
  2. コミット フェーズ: このフェーズでは、すべての参加者がトランザクションをコミットする準備ができている場合、コーディネーターはすべての参加者にコミット要求を送信します。アクターは必要なすべてのアクションを実行し、その結果を永続的なストレージに記録します。すべての参加者がトランザクションをコミットすると、コーディネーターは確認リクエストを送信します。いずれかの参加者がトランザクションのコミットに失敗した場合、コーディネーターはすべての参加者にトランザクションをロールバックするように通知します。

2PC プロトコルは分散トランザクションの原子性と一貫性を保証できますが、効率が低く、ブロッキングなどの問題が発生する可能性があります。したがって、実際のアプリケーションでは、代わりに 3PC (3 フェーズ コミット) や Paxos プロトコルなどの他の分散トランザクション プロトコルを使用できます。

2相コミットの問題

2 フェーズ コミットにはいくつかの問題があります。

  1. 同期ブロッキング問題: 実行プロセス中、参加しているすべてのノードはトランザクション ブロッキング タイプです。参加者がパブリック リソースを占有する場合、他のサードパーティ ノードがパブリック リソースにアクセスできないようにブロックする必要があります。つまり、投票段階から提出段階の完了まで、リソースはロックされます。
  2. 単一障害点: コーディネーターの重要性により、コーディネーターに障害が発生すると、参加者はブロックを継続します。特に第 2 フェーズでは、コーディネーターが失敗すると、すべての参加者がトランザクション リソースをロックした状態のままになり、トランザクション操作を完了し続けることができません。
  3. データ不整合の問題: 2PC の最終コミット フェーズで、コーディネータが参加者にコミット要求を送信した後、ローカル ネットワークの異常が発生するか、コミット要求の送信プロセス中にコーディネータが失敗し、その結果、一部の参加者のみがコミット要求を受信することになります。コミット要求を受信すると、これらの参加者はコミット操作を実行します。ただし、コミット要求を受信して​​いない他のマシンはトランザクションのコミットを実行できないため、分散システム全体でデータの不整合が発生します。

2. 3相コミット

3 フェーズ コミット (3PC) は、2PC プロトコルで発生する可能性のあるブロッキング問題を解決するために、2PC プロトコルに追加のフェーズを追加します。 3PC プロトコルは 3 つのフェーズで構成されます。

  1. CanCommit フェーズ (照会フェーズ): このフェーズでは、トランザクション コーディネーターがすべてのトランザクション参加者に CanCommit 要求を送信し、トランザクションをコミットする準備ができているかどうかを尋ねます。参加者は必要なすべてのアクションを実行し、トランザクションをコミットできるかどうかをコーディネーターに返信します。
  2. PreCommit フェーズ (準備フェーズ): すべての参加者がトランザクションを送信できると応答した場合、コーディネーターはすべての参加者に PreCommit 要求を送信し、トランザクションを送信する準備ができていることを通知します。参加者は必要なすべてのアクションを実行し、トランザクションをコミットする準備ができているかどうかをコーディネーターに応答します。
  3. DoCommit フェーズ (コミット フェーズ): すべての参加者がトランザクションをコミットする準備が整っている場合、コーディネーターはすべての参加者に DoCommit 要求を送信して、トランザクションをコミットするように通知します。アクターは必要なすべてのアクションを実行し、その結果を永続的なストレージに記録します。すべての参加者がトランザクションをコミットすると、コーディネーターは確認リクエストを送信します。いずれかの参加者がトランザクションのコミットに失敗した場合、コーディネーターはすべての参加者にトランザクションをロールバックするように通知します。

2PC プロトコルと比較して、3PC プロトコルではプロトコルに CanCommit フェーズ (照会フェーズ) が追加され、参加者は CanCommit フェーズ中にブロックを引き起こす可能性のある問題を発見して解決できるようになります。このようにして、3PC プロトコルはコミットまたはロールバック トランザクションをより高速に実行し、不要な待機時間を削減できます。 2PC プロトコルと比較すると、3PC プロトコルには依然としてブロッキングの問題がある可能性があることに注意してください。

3. 2フェーズコミットと3フェーズコミット

2PC と 3PC は、分散トランザクションでよく使用される 2 つのプロトコルです。 3PC は 2PC プロトコルの改良版と見ることができます。 2PC と比較して、次の 2 つの改善点があります。

  1. コーディネータと参加者の両方にタイムアウト メカニズムが導入されます (2PC では、コーディネータにのみタイムアウト メカニズムがあります)。
  2. 2PC と比較して、3PC では CanCommit ステージが追加され、問題をできるだけ早く検出できるため、後続のブロックや無効な操作を回避できます。

つまり、2PC と比較すると、3PC ではタイムアウト メカニズムが導入されているため、ブロックされる可能性が低くなります。同時に、3PC は 2PC の準備フェーズを 2 つのステップに分割し、バッファ フェーズを追加して、最終送信フェーズの前に各参加ノードのステータスが一貫していることを保証します。

4. データの一貫性の問題と解決策

3PC は同期ブロックの問題と単一点障害の問題を軽減できますが、データの一貫性の問題は依然として残ります (確率は非常に小さい)。データの一貫性の問題には、Paxos アルゴリズムや柔軟なトランザクション メカニズムなど、さまざまな解決策があります。

4.1 パクソスアルゴリズム

Paxos アルゴリズムは、メッセージ パッシングに基づく分散コンセンサス アルゴリズムであり、2013 年にチューリング賞を受賞しました。ACM AM チューリング賞は、コンピューター サイエンスの分野で最も名誉ある賞の 1 つです。この賞は、1966 年に米国計算機協会 (ACM) によって設立され、コンピュータ サイエンスの分野に顕著な貢献をした個人またはグループを表彰するために毎年授与されています。簡単に言えば、Paxos アルゴリズムは、分散システムでデータの一貫性とコンセンサスを実現し、分散システム内の異なるノード間のデータの同期と一貫性を確保するために使用される分散コンセンサス アルゴリズムです。 Paxos アルゴリズムは、提案者、受容者、学習者の 3 つの役割で構成されます。ノードが提案を開始する必要がある場合、そのノードは他のノードに提案を送信します。受信者は提案を受け取り、処理します。提案を拒否することも、受け入れることもできます。十分な数のノードが提案を受け入れた場合、提案は確定され、すべての学習者に通知され、最終的にすべてのノードが合意に達します。 Paxos アルゴリズムは単純に見えますが、実際には非常に複雑です。次のような Paxos アルゴリズムを使用する製品も多数あります。

  • Redis: Redis は、Paxos アルゴリズムを使用して分散ロック サービスとマスター/スレーブ レプリケーションを実装するインメモリ データベースです。
  • MySQL: MySQL 5.7 で導入された MySQL グループ レプリケーションは、従来のマスター スレーブ レプリケーションに代わるものです。
  • ZooKeeper: ZooKeeper は、Paxos アルゴリズムを使用して分散ロック サービスとデータの一貫性を実装する分散調整サービスです。
  • Apache Cassandra: Cassandra は、Paxos アルゴリズムを使用してデータの一貫性とレプリケーションを実装する分散データベース システムです。
  • Google Chubby: Chubby は、Google 社内で使用されている分散ロック サービスです。 Paxos アルゴリズムを使用して、分散ロック サービスやネーミング サービスなどの機能を実装します。

4.2 柔軟なトランザクション

柔軟なトランザクション メカニズム: 一定期間内に異なるノード上のデータの不整合を許可するが、最終的な一貫性を要求するメカニズム。柔軟なトランザクションには、TCC 補償トランザクション、信頼性の高いメッセージ トランザクション (MQ トランザクション) などが含まれます。

まとめ

分散トランザクションでは、分散トランザクションの正常な実行を保証するために、通常、2 フェーズまたは 3 フェーズのコミット プロトコルが使用されます。 2 フェーズ プロトコルには準備フェーズとコミット フェーズが含まれますが、同期のブロック、単一点障害、データの一貫性などの問題があります。 3 フェーズ プロトコルは、2 フェーズ プロトコルの改良版と見ることができます。 2 つのフェーズのうち準備フェーズを 2 つに分割し、送信フェーズの前に各参加ノードのステータスが一貫していることを確認するための照会フェーズを追加します。同時に、同期ブロッキング問題の発生確率を低減するためのタイムアウト メカニズムも導入されています。ただし、2PC と 3PC の両方にデータの一貫性の問題があります。現時点では、Paxos アルゴリズムや柔軟なトランザクション メカニズムなどのソリューションを使用して、トランザクションの一貫性の問題を解決できます。

参考文献と謝辞

https://pdai.tech/md/arch/arch-z-transection.html

<<:  K8s のアップグレードにより Didi が 12 時間停止したのですか?

>>:  コスト削減と笑顔の増加:滴滴P0レベルの失敗

推薦する

コンテンツの再パッケージ化により、ウェブサイトのコンテンツがより目立つようになります

コンテンツの再パッケージ化は、最も強力なコンテンツ マーケティング戦略の 1 つです。この用語はあま...

陳一州人:中国のインターネットは10年後に技術的な「ブラックホール」に陥る

9月4日、Renren Inc.の会長兼CEOである陳一洲氏は本日、「中国モバイルインターネット投資...

UC はモバイル検索エンジン Shenma を立ち上げることで自らを救うことができるでしょうか?

最近、検索業界で最もエキサイティングなことは、UCがモバイル検索神馬をリリースしたことです。4年間蓄...

ビデオクラウド大手の「新たな戦場」

近年、大手インターネット企業から最も頻繁に伝えられる言葉は「削減と縮小」であり、急成長を遂げているク...

デュアルプラットフォームがデジタルコマースをリードし、Yunxi Technologyは包括的なデジタルマーケティングソリューションを作成します

最近、「デジタル変革と未来のインテリジェント創造」をテーマにしたIT中国市場年次会議において、中国の...

熊章浩の多数の遺跡の本来の保護権が格下げされた

月給5,000~50,000のこれらのプロジェクトはあなたの将来です最近、多くのウェブサイトが百度検...

hostcircle: オランダ サーバー (equinix)、月額 299 ユーロ、2*AMD Epyc Naples 7301/128g メモリ/2*480G SSD/300T トラフィック/10G 帯域幅

Hostcircle(2011年〜)は、オランダのデータセンター事業を主に運営するオランダの企業で、...

黄金期を迎えた業界ポータルのウェブマスターに捧げる

国内需要市場の継続的な調整、海外市場環境のマイナス影響、国内インターネット環境の継続的な成熟と認知に...

正直、RabbitMQ と Kafka のどちらを選ぶべきでしょうか?

経験豊富なマイクロサービス システム アーキテクトとして、RabbitMQ と Kafka のどちら...

Kafka はどのように設計されたのでしょうか?

[[409438]]画像はBaotu.comよりメッセージ キューは主に、アプリケーションの結合、非...

フランスのVPSの推奨、いくつかの便利なフランスのVPS(フランスのクラウドサーバー)業者が推奨

フランスの VPS の推奨事項、フランスの VPS のレンタル、どのフランスの VPS が最適ですか...

QingCloud はどのようにして「冷たく孤立した」クラウドから「国民に愛されるクラウド」になったのでしょうか?

[51CTO.com からのオリジナル記事] 現在、クラウド コンピューティング市場における競争は「...