インタビュアー: 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レベルの失敗

推薦する

マルチテナントクラウドプラットフォームの導入方法を学ぶ

[[437680]] [51CTO.com クイック翻訳]パブリッククラウドを信頼できますか?答えは...

タッチポイントマーケティングは興味深いが、その中でのウェブサイトの役割はさらに興味深い。

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますこうしたユ...

#黒5#: hostkey: 専用サーバー、60% オフ、ロシア/オランダ/米国

多くの人が hostkey を知っているはずです。彼らのマシンは非常に安定しており、アフターサービス...

ウェブサイト最適化設計の3つの具体的な表現

ウェブサイトの最適化とは、ウェブサイトの機能、ウェブサイトの構造、ウェブページのレイアウト、ウェブサ...

電子商取引ウェブサイトは、顧客を維持するためにどのように価格を上げることができますか?

生産コスト、人件費、運営コストはすべて増加しています。このような状況では、eコマース企業にはコストを...

マーケティングとは何かを理解するための5分

広告はユーザーの視点からのコミュニケーションであり、マーケティングは企業の視点からのマネジメントです...

ブログ運営に問題はありませんか?

ウェブサイトの一形態として、独立系ブログには独自の利点があります。操作が簡単、インタラクティブ性が強...

世界中の 800 人以上の貢献者が協力して OpenStack バージョン 23 をリリース – Wallaby

OpenStack コミュニティは Wallaby の 23 番目のバージョンを正式にリリースしまし...

7 つの分散型グローバル ID 生成戦略のうち、どれがお好みですか?

マイクロサービスを使用することで、グローバル ID の問題など、もともと単純だった多くの問題が複雑に...

個人ウェブマスターが知っておくべきウェブサイト最適化の合格点をご覧ください

ホストネットワークが新しく開始されました。スペースやサーバーを購入する際は、安全で保証されたホストネ...

不安定なウェブサイトのキーワードランキングの問題を解決するために原因を把握する

ウェブサイトの SEO を行う際、ランキングやコンテンツ、外部リンク、ウェブサイト自体がないウェブサ...

A5 トピック: インターネット会議開催: 馬化騰と周洪義の秘密の戦い

A5 Webmaster Networkは、毎年恒例のインターネットカンファレンスが9月11日に北京...

加速クラウド:徳陽100G高防御、39元/月(クラウドサーバー) - 2Gメモリ/2コア/60gハードディスク/5M帯域幅、10,800元/月(キャビネット) - 42U/48 IP/200M帯域幅

小人武科技有限公司傘下の加速クラウドプラットフォームは、利益よりも量だけを追求し、四川省徳陽データセ...

ウェブサイト運営記録の分析方法

私のサイトは含まれなくなりました。以前は 1 日に N 回含まれていましたが、前回は理由もなく権限が...

広告離れの時代に中小企業はどのようにブランドマーケティングを行うのか?

中小企業、特にスタートアップ企業のリソースは非常に限られているため、資金と人材の配置と使用を慎重に計...