この記事はWeChatの公開アカウント「Backend Technology Compass」から転載したものです。この記事を転載する場合は、Backend Technology Compass の公開アカウントにお問い合わせください。 1. はじめに 分散一貫性の理論と概念を理解した後、2PC、3PC、Paoxs プロトコル、Raft プロトコルなどの分散一貫性プロトコルについて説明します。スペースが限られているため、この記事では 2PC プロトコルに焦点を当て、以降の記事でさらに詳しく説明します。
図(インターネット)| NASA による天の川銀河の中心部の合成画像 2. 単一マシントランザクションと分散トランザクション 2PC と 3PC について話す前に、スタンドアロン トランザクションと分散トランザクションを理解する必要があります。トランザクションとは、すべてが成功するかすべてが失敗する (All or Nothing) 一連のアトミック操作です。そうしないと、データの混乱が発生します。この要件は、金融および電子商取引の分野では非常に一般的です。 Tmall に行って Mac を買うと想像してください。発注サービス、控除サービス、在庫サービスのいずれかのリンクに障害が発生すると問題が発生するため、全員が共に繁栄し、共に苦しむことを保証する取引が必要です。 スタンドアロン トランザクションには誰もが好む ACID 特性がありますが、結局のところ、単一のマシンの機能には限界があります。多くの場合、この一連のアトミック操作は分散シナリオ、つまり分散トランザクションで完了する必要があります。分散システム内の各サブサービスは、異なる物理ノード、異なるスイッチ、異なるコンピュータ室、異なる都市に展開されるため、スタンドアロン システムのようにこの一連のアトミック操作を完了するのはそれほど簡単ではありません。そのため、分散トランザクションの問題を解決し、データの一貫性を確保するために、多くの分散一貫性プロトコルとアルゴリズムが登場しました。分散システム内の各ノードは、データ通信のためにネットワークにのみ依存しますが、ネットワークは完全に信頼できるとは限らず、ノードの物理的な障害が頻繁に発生します。このような複雑な環境でデータの一貫性を確保するのは、確かに簡単ではありません。 3. 一貫性プロトコルに関するいくつかのアイデア 新しいプロトコルやアルゴリズムをいきなり学習するのは、多くの場合、かなり厄介です。生命現象について考えた方が良いでしょう。コンピュータ分野のアルゴリズムやアイデアのほとんどは現実の生活に反映されており、言い換えれば、アルゴリズムは生活から生まれています。たとえば、大規模な軍事パレードでは、陸軍、海軍、空軍から複数の部隊とチームが参加します。正確に指示やリズムを出すためには、音楽、指揮者、リーダー、小隊長、チームメンバーなど複数の役割が必要です。活動全体では、多数の個人が一体となって目標を達成できるように、さまざまな役割の相互作用が必要です。例えば、2018年5月には西安で壮大なドローン飛行ライトショーが開催されました。合計 1,374 機のドローンが大規模な編隊を形成してライトショーを完成させましたが、それでも問題が発生し、完璧なパターンは実行されませんでした。
写真(インターネット)|西安ドローン編隊飛行ライトショー 分散システムでも同様です。多数の参加マシン ノードが連携して動作するには、それぞれの役割を実行し、タスクを共同で完了するさまざまな役割が必要です。しかし、ネットワーク障害やノードの物理障害などの問題が発生するため、依然として多くの困難が残っています。 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: アプリケーションとインフラストラクチャの近代化を加速するデジタル プラットフォームの構築
「デジタル経済白書」は、アナリシスがデジタル経済の各業界で培った経験とデータの蓄積を凝縮し、デジ...
Baidu スパイダーのクローリング エクスペリエンスは新しい用語のように聞こえますが、実際には、ユ...
インターネット時代において、データの重要性は自明です。 IDCの予測によると、2020年までに世界の...
extravm のオランダ VPS は、しばらく前からオンラインになっています。デフォルトのダウンス...
時間、空間、人種、言語、文化を越えたスポーツイベント、ロンドンオリンピックを前に、すべての大手企業は...
alphavpsはどうですか? alphavps の AMD Ryzen VPS はいかがでしょうか...
クラウド移行が企業のビジネスに力を与える科学技術の急速な発展と世界を席巻するデジタル変革の波により、...
9月29日午後、大手3社は本日同時に通知を出し、携帯電話パッケージの月間通信量を未確定にするサービス...
当社の SEO の主な目的は、検索エンジンから指定されたキーワードのトラフィックを獲得し、目標を達成...
春節祝典のスケッチ「返済しないで」では、アレンとチャン・ユアンが演じる昔の同級生がラオシェンに借金を...
私とコミュニケーションを取るとき、多くのウェブマスターの友人は、ウェブサイトのドメインのホームページ...
これはHostodoの10月の第一波のプロモーションで、主に同社のクラウドVPSが大幅に割引されてい...
企業の IT 準備の観点から、クラウド ネイティブの運用が急増する可能性がありますが、一部の運用とデ...
ヘッツナーはどうですか?ドイツのヘッツナー社のニュルンベルクデータセンターはどうでしょうか?その中核...
Gongyi は、シカゴにデータセンターがある Cloudive から特別版の 2G メモリ KVM...