分散一貫性プロトコルである2PCについての簡単な説明

分散一貫性プロトコルである2PCについての簡単な説明

この記事はWeChatの公開アカウント「Backend Technology Compass」から転載したものです。この記事を転載する場合は、Backend Technology Compass の公開アカウントにお問い合わせください。

1. はじめに

分散一貫性の理論と概念を理解した後、2PC、3PC、Paoxs プロトコル、Raft プロトコルなどの分散一貫性プロトコルについて説明します。スペースが限られているため、この記事では 2PC プロトコルに焦点を当て、以降の記事でさらに詳しく説明します。

[[325517]]

図(インターネット)| NASA による天の川銀河の中心部の合成画像

2. 単一マシントランザクションと分散トランザクション

2PC と 3PC について話す前に、スタンドアロン トランザクションと分散トランザクションを理解する必要があります。トランザクションとは、すべてが成功するかすべてが失敗する (All or Nothing) 一連のアトミック操作です。そうしないと、データの混乱が発生します。この要件は、金融および電子商取引の分野では非常に一般的です。 Tmall に行って Mac を買うと想像してください。発注サービス、控除サービス、在庫サービスのいずれかのリンクに障害が発生すると問題が発生するため、全員が共に繁栄し、共に苦しむことを保証する取引が必要です。

スタンドアロン トランザクションには誰もが好む ACID 特性がありますが、結局のところ、単一のマシンの機能には限界があります。多くの場合、この一連のアトミック操作は分散シナリオ、つまり分散トランザクションで完了する必要があります。分散システム内の各サブサービスは、異なる物理ノード、異なるスイッチ、異なるコンピュータ室、異なる都市に展開されるため、スタンドアロン システムのようにこの一連のアトミック操作を完了するのはそれほど簡単ではありません。そのため、分散トランザクションの問題を解決し、データの一貫性を確保するために、多くの分散一貫性プロトコルとアルゴリズムが登場しました。分散システム内の各ノードは、データ通信のためにネットワークにのみ依存しますが、ネットワークは完全に信頼できるとは限らず、ノードの物理的な障害が頻繁に発生します。このような複雑な環境でデータの一貫性を確保するのは、確かに簡単ではありません。

3. 一貫性プロトコルに関するいくつかのアイデア

新しいプロトコルやアルゴリズムをいきなり学習するのは、多くの場合、かなり厄介です。生命現象について考えた方が良いでしょう。コンピュータ分野のアルゴリズムやアイデアのほとんどは現実の生活に反映されており、言い換えれば、アルゴリズムは生活から生まれています。たとえば、大規模な軍事パレードでは、陸軍、海軍、空軍から複数の部隊とチームが参加します。正確に指示やリズムを出すためには、音楽、指揮者、リーダー、小隊長、チームメンバーなど複数の役割が必要です。活動全体では、多数の個人が一体となって目標を達成できるように、さまざまな役割の相互作用が必要です。例えば、2018年5月には西安で壮大なドローン飛行ライトショーが開催されました。合計 1,374 機のドローンが大規模な編隊を形成してライトショーを完成させましたが、それでも問題が発生し、完璧なパターンは実行されませんでした。

[[325520]]

写真(インターネット)|西安ドローン編隊飛行ライトショー

分散システムでも同様です。多数の参加マシン ノードが連携して動作するには、それぞれの役割を実行し、タスクを共同で完了するさまざまな役割が必要です。しかし、ネットワーク障害やノードの物理障害などの問題が発生するため、依然として多くの困難が残っています。

4. 2PC 2相コミットプロトコルの基本プロセス

2PC プロトコルを理解するには、ノードの役割の分割、2 つのフェーズで実行されるアクション、さまざまな状況での処理ロジックが重要なポイントになります。

2PC プロトコルの概要

4.1 ノードの役割

2 フェーズ コミット プロトコルは、ノードをコーディネーターと参加者に分割します。これら 2 つの役割は、リーダーと兵士と考えることもできます。

  • リーダー

参加者への指示の送信、参加者からのフィードバックの収集、コミットまたはロールバックの決定を行う責任があります。

  • 参加者 ビッグソルジャー

コーディネータの指示を受けてトランザクション操作を実行し、操作結果をコーディネータにフィードバックし、コーディネータから送信された最終指示の実行を継続する。

4.2 2つのフェーズ

2PC プロトコルは、準備フェーズと送信フェーズに分かれています。

4.2.1 準備

コーディネーターは、トランザクションを照会および実行するために、すべての参加ノードにコマンドを送信します。参加ノードはコマンドを受信後、自身の状態に応じてトランザクションを実行するか実行しないかを判断し、そのアクションを記録し、最終的にコマンドの処理結果をコーディネータにフィードバックします。

図 |準備段階の3つのステップ

1. 問い合わせフェーズ: コーディネーターは参加者にトランザクションを実行する準備ができているかどうかを尋ね、その後、コーディネーターは参加者の応答を待ち始めます。このフェーズでは、コーディネーターはブロックされた待機状態にあります。

2 処理段階: コーディネータからの問い合わせを受けた後、参加者は自身の状況に基づいてトランザクション操作を実行するかどうかを決定します。参加者がトランザクションを正常に実行した場合、元に戻す情報とやり直し情報はトランザクション ログに記録されますが、トランザクションはコミットされません。それ以外の場合は、失敗が直接返されます。

3 応答フェーズ: 参加者がトランザクション操作を正常に実行すると、コーディネータに「はい」をフィードバックし、トランザクションがローカルで実行されたことを示します。参加者がトランザクションを正常に実行できなかった場合、コーディネータに「no」をフィードバックし、トランザクションをコミットできないことを示します。フィードバックのこの部分は、コーディネーターが次の段階を決定する際に非常に重要な役割を果たします。

4.2.2 準備

コーディネーターは、準備フェーズ中に参加者から受け取ったフィードバックに基づいて、トランザクションをコミットするか、トランザクションを中断してロールバックするかを決定します。具体的には、コーディネーターが準備フェーズの終了時に応答を受信しなかった場合、トランザクションは中断されます。受け取ったフィードバックがすべて「はい」の場合、トランザクションはコミットされます。ケース 1: トランザクションのコミット コーディネーターが準備フェーズの終了時にすべての参加者から「はい」のフィードバックを受け取った場合、コーディネーターはすべての参加者にトランザクションのコミット指示を送信します。具体的なプロセスは以下のとおりです。

ステップ1. コーディネータはトランザクションコミットメッセージコミットコマンドをすべての参加者に送信する

ステップ 2. コーディネータからコミット コマンドを受信した後、参加者はトランザクション コミット アクションを実行し、トランザクション中に保持されたすべてのロックとリソースを解放します。このステップは非常に重要です。

ステップ 3. すべての参加者がローカル トランザクションの実行とリソースの解放を完了したら、トランザクション コミット確認メッセージ ACK をコーディネータに送信します。

ステップ 4. コーディネーターは、すべての参加者から ACK メッセージを受信した後、トランザクションの完了を確認します。

ケース 2: ロールバック トランザクション コーディネーターが準備フェーズの終了時にすべての参加者から yes 応答を受信しなかった場合、コーディネーターはすべての参加者にロールバック トランザクション指示を送信します。具体的なプロセスは以下のとおりです。

ステップ 1. コーディネーターはすべての参加者にトランザクション ロールバック メッセージを送信します。

ステップ 2. ロールバック命令を受信した後、参加者はローカル ロールバック ログに従ってフェーズ 1 で実行されたトランザクションを元に戻し、トランザクション中に保持されたすべてのロックとリソースを解放します。

ステップ 3. コマンドを完了した後、すべての参加者は ACK でコーディネータに応答します。

ステップ4. コーディネータはすべての参加者からACK確認メッセージを受信した後、トランザクションをキャンセルします。

上記の説明から、2PC プロトコルはノードを異なる役割に分割し、2 段階の処理を行うことで分散トランザクションを実行することがわかります。しかし、2PC プロトコルが分散データの一貫性の問題を本当に解決できるのか疑問に思うのは避けられません。

5. 2PCプロトコル異常解析

前の 2 つの段階では、コーディネータと参加者の間で複数のネットワーク通信のやり取りが行われますが、ネットワークは信頼性が低く、ノードが故障する可能性があることは誰もが知っているので、異常な状況でも 2PC プロトコルが適切に機能するかどうかを考慮する必要があります。

障害は、回復可能なマシン障害と回復不可能なマシン障害、通常のネットワーク ジッター障害、ネットワーク パーティション障害、その他多くの状況など、多くのカテゴリに分類できます。

2PC プロセス全体には多くの相互作用があり、さまざまな段階で発生するさまざまな障害によって、さまざまな結果が発生します。明らかに、これは m*n の組み合わせ問題です。異常な状況が異なれば、結果も異なります。それらすべてをリストアップして分析するのは簡単ではありません。いくつかの重要な異常を分析します。

前回の分析から、準備フェーズではトランザクション データは送信されないことがわかります。障害が発生した場合でも、ログに従ってロールバックできるため、データの不整合の問題は発生しません。ただし、送信フェーズでトランザクションを送信する場合、一部の参加者がすでにトランザクションデータを送信している可能性があるため、データの不整合が発生する可能性があります。これは詳細に分析する必要がある段階です。

注: 以下で説明する参加者の失敗は、すべての参加者を指すのではなく、1 人または数人の参加者を指します。

  • コーディネータが失敗し、参加者は正常です

コーディネーターはシステムのリーダーです。コーディネータは一点なので、プロセスに異常があれば重点的に対処する必要があります。回復不可能な物理的な障害が発生した場合、新しいコーディネータが選出され、以前の作業を引き継ぎます。この時点で、新しいコーディネーターは、すべての参加者に現在の段階と処理の進行状況について質問する必要があります。ただし、ネットワーク パーティションによりコーディネータが一時的に切断されると、スプリット ブレイン状況が発生する可能性があります。

  • コーディネーターは正常だが参加者に欠陥がある

コーディネーターは参加者のフィードバックに基づいて決定を下す必要があるため、参加者が失敗するとコーディネーターの決定が難しくなります。参加者の失敗が回復可能な場合は、短時間で回復した後、コーディネーターは参加者にペースを維持するために何をする必要があるかを尋ねます。時間が長すぎる場合、または回復不可能な障害の場合、コーディネータはトランザクションをロールバックします。

  • コーディネーターの失敗と参加者の失敗(要点)

コーディネーターは提出段階ですべての参加者に指示を送信します。最初の命令を送信した後にコーディネーターがクラッシュしたと仮定します。このとき、1 つの参加者だけが命令を受信して​​実行しますが、クラッシュします。他の参加者は指示を受けません。新しく選出されたコーディネータが参加しているすべてのノードにステータスを問い合わせると、ダウンしていた参加者が回復した場合、ステータスはコミットまたはロールバックのいずれかになります。ダウンした参加者が回復せずにコミット/ロールバック操作を実行すると、データの不整合が発生し、新しいコーディネーターは情報不足のために現在のステータスを明確にすることができず、フェーズ 1 の実行後に他の参加者がブロックされることになります。

  • ネットワーク障害

ネットワークの分割は非常に難しい問題です。極端な場合には、複数のパーティションが存在し、異なるパーティションに別々の参加者とコーディネータが存在する場合があります。要約すると、2PC プロトコルでは、コーディネータと参加者の両方に障害が発生するとデータの一貫性がなくなり、通常のやり取り中にブロックが発生し、コーディネータが単一のポイントであるという問題が発生します。

6.2 PCプロトコルの利点と欠点

2PC プロトコルの原理は単純で実装も簡単ですが、同期ブロッキング、シングルポイント問題、ネットワークパーティションのスプリットブレイン、極端な場合にはデータの不整合などの問題があります。これについて詳しく説明しましょう。準備フェーズ中に参加者の応答を待機している間、2PC は同期的にブロックされます。すべての参加者に対してネットワークのスムーズさを保証することができないため、実際のネットワークで長期的なブロックが発生する可能性があります。コーディネーターは 2 段階のプロセス全体において重要な役割を果たしますが、1 点だけ問題があります。コーディネーターが失敗すると、すべての参加者のリソースがブロックされ解放できなくなるため、他の操作の進行に影響します。 2PC プロトコル全体は、すべての参加者のフィードバックに基づいています。しかし、異常な状況が存在するため、合意に達することが困難で、トランザクションをロールバックすることが時々あります。全体的な戦略はフォールト トレラントではなく、ネットワーク パーティションの存在により、ブレイン スプリットやパーティション データの不整合が発生する可能性があります。

7. まとめ

この記事では、単一マシントランザクションと分散トランザクションの厳格な要求を出発点として、分散データ一貫性の難しさや基本的な解決策について説明し、2PC プロトコルの準備段階と送信段階の詳細なプロセスに焦点を当てます。最後に、2PC プロトコルの異常な状況を分析し、2PC プロトコルの長所と短所を示します。

8. 巨人の肩

https://www.cnblogs.com/sunsky303/p/9290992.html

https://segmentfault.com/q/1010000014439562

https://www.cnblogs.com/shangxiaofei/p/5196260.html

<<:  クラウドコンピューティング:パンデミック中に出現した新しいインフラの最初の都市

>>:  VMware: アプリケーションとインフラストラクチャの近代化を加速するデジタル プラットフォームの構築

推薦する

QingCloudはクラウドICTサービスを構築し、総合的な戦略アップグレードを実現

7月27日、北京でクラウド・コンピューティング・サミット「Cloud Insight Confere...

訪問者の心をつかむには、まず食欲をそそる

多くの草の根ウェブマスターは、サイトの品質を向上させる方法や、サイトをより良く運営する方法について真...

クラウド移行の3つの間違いを避ける方法

今日、ほとんどのエンタープライズ IT 組織にとって、ワークロードをパブリック クラウドに移行するこ...

第32回CNNIC報告書付録2:調査支援ユニット

テンセントテクノロジーニュース、7月17日、中国インターネットネットワークインフォメーションセンター...

アリババのダブル11の最終取引量は912億

ダブル11の取引量目標を設定していなかったアリババは、11日24時にもう一つの奇跡を起こした。11月...

Hostodo: ウェブサイト構築に適したラスベガス KVM シリーズの格安 VPS、「Alipay」をサポート

Hostodo は、西海岸に近く、KVM 仮想化機能を備えたラスベガスのファイバーハブ データ セン...

Vultr - 6 月の VPS の第 1 波では 10 ドルを無料でプレゼントします。

Vultr は API 機能を強化し、新しい 10 ドルの割引コード GIVEME10 を発表しまし...

SEO マスターになるための 57 のヒント

誰もが良いハックが大好きですよね?お母さんでも使える SEO のヒント 57 個をご紹介します。ああ...

SEOルールの変更による絶望的な状況からの脱出

コダックは紙の提出の王者から破産に転落し、ノキアは携帯電話の巨人から現在の暗い状況に転落した。これほ...

サイト上のスプロケットの構築はウェブサイトの飛躍的な成長に貢献する

有能な SEO 担当者として、あなたは「スプロケット」の基本的な SEO 概念についてよく理解してい...

さまざまな SEO 最適化ツールの長所と短所

さまざまなSEO最適化ツールの長所と短所が明らかに序文:この期間中、建美学者は多くのSEO最適化グル...

ウェブサイト構築の初期段階でスパイダーにウェブサイトを気に入ってもらう方法

熟練したウェブマスターのほとんどが、新しいサイトの最適化の経験を持っています。新しいサイトの最適化は...

一歩ずつ、20日間で体重1への道

SEO に携わっていないプログラマーとして、私の最初の Web サイトである Yangcheng L...

複合マーケティングにより、SKYCC の売上は引き続き急上昇中でしょうか?

最近、私はSKYCC複合マーケティングソフトウェアのWeiboマーケティングに注目しました。このマー...

5 分で gRPC を学びましょう。学びましたか?

導入長い間 Java を使ってきた開発者のほとんどは、gRPC に触れることはほとんどないと思います...