分散システム内の各サーバーはインターネットを介して接続されていることはご存じのとおりです。その結果、各サーバーの実際の状態を把握することが困難になります。たとえば、別のサーバーに問題があるかどうかを判断する唯一の方法は、そのサーバーにリクエストを送信することです。返事が来た時だけ、良かったと思うのです。応答がない場合は、ネットワーク障害が原因で応答がない可能性があり、実際には相手側のマシンに問題がある可能性があるため、相手側のサーバーに問題があるかどうかを判断するのは困難です。では、分散システムでこれらの問題を正確に判断するにはどうすればよいでしょうか?この記事では関連する方法を詳しく紹介します。 多数の事実に基づく多くの場合、ノードには実際には問題がない可能性があります。たとえば、GC を実行している場合、GC 期間中はいかなる要求にも応答できません。現時点では、ノード自体の観点から見ると、非常に大丈夫であり、問題はありません。しかし、他のノードから見ると、この GC ノードは問題のあるノードとまったく同じです。リクエストに応答せず、再試行にも応答しません。そのため、他のノードはそれが問題があると考えることになります。この観点から見ると、ノード自体が問題があるかどうかを知ることは実際には困難です。 現在、ノードに問題があるかどうかを判断するための最も一般的なアルゴリズムは、多数決による意思決定に基づいています。たとえば、ノードが 5 つある場合は、全員が一緒に投票します。一定数以上のノード (通常は半数以上、ここでは 3 つのノード) が問題があると判断した場合、このノードには本当に問題があると判断されます。ノード自体に問題がなくても、大多数が問題があると考えている限り、問題があるとみなします。ここで多数決が使用される理由は、システム内に多数決が 2 つ存在することはできず、1 つだけであるため、衝突が起こらないためです。 リーダーとロックノードに問題があるかどうかを判断する必要があるのはなぜですか?実際、分散システムでは、次のように一度しか使用できない概念が使用されるシナリオが数多くあります。
これらのシナリオでは、設計時に注意する必要があります。たとえば、あるノードが自分だけが選択されていると考えている場合でも (たとえば、自分がリーダーであると考えている、オブジェクトのロックを持っていると考えているなど)、他のほとんどのノードは問題があると考える可能性があります。デザインが良くないと問題が発生します。次の例を見てみましょう。 この例では、複数のクライアントが同じデータにアクセスするのを防ぐために、書き込み後に各クライアントがロックを取得することを要求します。このロックはリース ロックであり、タイムアウトすると解除されます。ここでは、Client1 が最初にロックを申請したことがわかりますが、残念ながら、ロックを取得した後すぐに GC が発生し、リース タイムアウトを超えて GC が発生したため、リース タイムアウト後にロックが解放されました。その後、クライアント2はロックを取得し、更新を行いました。 GC が戻った後、クライアント 1 はロックを保持していると判断して直接書き込み、問題が発生します。ここでの問題は、GC が戻った後、クライアント 1 がロックをまだ保持していると誤って認識することです。 フェンシングトークンでは、このような誤解にどう対処すればよいのでしょうか?一般的な技術はフェンシングです。次の図に示すように: ここで行われた変更は、ロックを取得するたびにトークン値がクライアントに返され、このトークンはロックが取得されるたびに増加することです。このように、クライアントが書き込むときに、トークンも送り返す必要があります。このようにして、ストレージはこのトークンを使用して、古いトークンの書き込みを拒否するかどうかを決定できます。 一般的な実装方法は、ZooKeeper の TransactionID またはノード バージョンを fencingToken として使用することです。 ビザンチン断層上記の FencingToken には、クライアントによって送信されたトークンが実際に受信されるという前提があります。書き込み時にクライアントから送信されたトークンが偽のトークンである場合、明らかに fencingToken に問題が発生することが想像できます。したがって、分散システムの場合、ノードが存在すると、問題はさらに複雑になります。私たちはこの状況をビザンチン問題と呼んでいます。これは、ビザンチン将軍問題とも呼ばれることが多いものです。 ビザンチン問題のあるシステムでは、メッセージが信頼できないノードが 1 つまたは 2 つ存在する可能性があると単純に想定できます。この信頼性の低さは、次のような理由により発生する可能性があります。
もちろん、現実には、この信頼できない問題は、ほとんどまたはすべてのノードではなく、比較的少数のノードで発生すると考えられます。したがって、ほとんどのノードで信頼できない事態が発生した場合 (たとえば、受信したトークンに常に乱数を追加するコードにバグがある場合)、対応するアルゴリズムではこの問題を解決できません。 嘘を減らすただし、嘘をついているノードはほとんどないと考えています。しかし、次のようなノードを検出または保護するためのメカニズムがあればさらに良いでしょう。
システムモデルと現実私たちは、さまざまな分散システムの問題を解決するために多くのアルゴリズムを設計してきました。これらのアルゴリズムは一連のソフトウェアとハードウェアのペアに基づいているため、多くの仮定があり、これらの依存関係は一般にシステム モデルと呼ばれています。 たとえば、時間の仮定について話すとき、次の 3 つが一般的なシステム モデルです。 同期モデルいわゆる同期モデルとは、ネットワークの遅延、プロセスの一時停止、クロックのドリフトが一定の制限を超えないことがわかっていることを意味します。もちろん、ネットワーク遅延がないという意味ではなく、制限を超えないことがわかっているという意味です。もちろん、このモデルは現実には現実的ではありません。予期しない遅延が常に発生するからです。 部分同期モデルいわゆる部分同期モデルは、ほとんどの場合に同期モデルと見なされるもので、特定の制限を超えることはありませんが、場合によってはこれらの制限を超えることもあります。これはより現実的なモデルです。 非同期モデルこのモデルはいかなる仮定も行わず、クロックさえ信頼しません。たとえば、タイムアウトは使用しません。このモデルの制限は非常に大きいです。 時間に関する上記の想定に加えて、もう 1 つの一般的な問題は、ノード障害の想定です。通常、次の 3 つのモデルがあります。 クラッシュストップエラーこのモデルでは、ノードに応答しないなどの問題がある場合、そのノードは二度と戻ってこないとアルゴリズムが判断します。 クラッシュ回復エラーこのモデルでは、アルゴリズムはノードに問題があり、しばらくすると再発すると考えます。もちろん何が戻ってくるかは分かりません。これには、クラッシュ後でも回復できるように、ディスクに多くのものを書き込むなど、ノードに共通のストレージ メディアが必要になる場合があります。 ビザンチンエラー上で述べたように、ノードには何でも起こり得ます。 実際に見られる最も一般的なモデルは、部分的に同期したクラッシュ回復エラーです。では、分散システムのアルゴリズムはこれらのモデルをどのように使用するのでしょうか? アルゴリズムの正確さアルゴリズムの正しさを判断するときは、いくつかの特性を使用して判断する必要があります。たとえば、小さいものから大きいものに並べ替えるアルゴリズムでは、出力内の 2 つの異なる要素は、前者が後者よりも小さいという要件を満たす必要があります。これが最も簡単な判断方法です。 同様に、分散システムのアルゴリズムが正しいかどうかをどのように判断するのでしょうか?ロックを例に挙げてみましょう。判断には次の属性を使用できます。 ユニークさ2 つのリクエストが同じトークンを受信することはありません。 単調増加x を要求するトークンが tx であり、y を要求するトークンが ty であり、x が y の前にある場合、tx<ty です。 信頼性ノードがリクエストを送信すると、クラッシュしない限り、最終的には応答を受信します。 安全性と活力ここでは、セキュリティと活性という 2 つの概念を区別する必要があります。例えば、上記の例では、一意性と単調増加性が安全性であり、信頼性が活力です。両者の簡単な違いは、一般的に安全性は悪いことが起こり得ないことを意味し、活力は良いことが最終的に起こることを意味するということです。これら 2 つを区別することで、より複雑なシステム モデルを処理できるようになります。 要約するこの記事では、分散システムにおける現実の判断と処理について詳しく紹介します。皆様に大まかな理解をしていただければ幸いです。 |
<<: ハイブリッドおよびマルチクラウド アーキテクチャを実現する 5 つのテクノロジー
>>: 2021年中国人事担当者スーパーセレモニーが開幕、デジタル時代の中国人事担当者の「栄光」と「夢」を見つめる
クラウド コンピューティングは、当初の構想から今日の広範な実装に至るまで、企業向けクラウド コンピュ...
10月30日午後、Baidu Webmaster Platformツールが更新されました。アドレスは...
[[383770]]この記事はWeChatの公開アカウント「大宇賢人」から転載したもので、著者は大宇...
色は人の態度や気分に大きな影響を与える可能性があります。私たちの目が特定の色を見ると、視床下部と呼ば...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン建国記念日の祝日が近づいてきました。どこ...
セルフサービス型ウェブサイト構築ツールのデザインは似すぎているたとえば、Fanke の Web サイ...
Fliphost.net は優れた VPS 業者です。顧客ベースは buyvm よりはるかに少ないで...
外部リンクは、私たちが常により注意を払う部分です。すべてのサイトの SEO 最適化のプロセスでは、外...
losangelesvpsの11.11中国イベントが始まりました。INAPのロサンゼルスデータセンタ...
ユーザーをつなぐクリエイティブマーケティングユーザー同士を結びつけるクリエイティブなマーケティングと...
業界特化型クラウド アプリケーションの大手プロバイダーである Infor は本日、Infor Clo...
セントジュード小児研究病院はゲノムデータベースをクラウドに移行し、世界中の科学者に共同プラットフォー...
[[257045]]昨年発表された調査レポートによると、世界中の企業の 81% がマルチクラウド戦略...
これは、タオバオアライアンスの規則変更がタオバオアフィリエイトに与える影響に関するシリーズの第9回で...
現在、ウェブサイトの構築と SEO の最適化は別々に行われています。通常、SEO の最適化はウェブサ...