1

Raft アルゴリズムの論文を読み、Raft がクライアント リクエストを受け取ったときに実行する操作のシーケンスに関連する質問を受けました。

単一障害点のシナリオを克服するために、Raft は他のマシンで複製されたログを維持することに依存しています。アルゴリズムは、完全なログ管理のためにコンセンサス モジュールも参照します。一連の操作は次のように機能します。

  1. クライアント要求はリーダーのステート マシンで受信され、リーダーはそのログにコマンドを追加します。
  2. リーダーはAppendEntries RPC をフォロワーに送信してローカル ログにコマンドを複製し、フォロワーの大多数から、エントリがローカル ログ ファイルに正常に追加されたことを確認するのを待ちます。
  3. リクエストがフォロワーログの大部分に正常に記録されたという確認が受信されると、リクエストはリーダーのステートマシンにコミットされ、遷移が発生し、その遷移の出力がクライアントに返されます。
  4. 最終的に、リーダーは後続のAppendEntries RPC でコミットされたエントリをフォロワーに通知します。

上記の理解が正しければ、レプリケーション プロセスが完了するまでクライアント リクエストがしばらく保留されていると主張できます。また、クライアント リクエストの成功はレプリケーションの成功に大きく依存していると主張することもできます。プロセス (クライアントのコマンド/リクエストは、過半数の承認が受信されるまでリーダーのマシンで実行されないため)。問題は、レプリケーション手順が完了した後、クライアント リクエストが応答を受信するまでに平均でどれくらいの時間がかかると予想されるかということです。これは、リアルタイム システムでも効率的に機能しますか?

4

2 に答える 2

2

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changedは、CAP 定理の三位一体の一貫性と可用性の部分を要求する Raft などのシステムがパフォーマンスの制限を受けることを示唆しています。 . また、 https: //pdfs.semanticscholar.org/7c45/54d064128043897ea2226021f6fda4c64251.pdf (Birman による信頼できるマルチキャストのレビュー)にも興味があるかもしれません。ここでは、航空交通管制などの高保証システムにおける信頼できるマルチキャスト グループの経験について説明しています。 .

ここからの私の結論は、実際のシステムは、Raft、Paxos、および友人でどの情報を保護し、どの情報をより厳密に保護できないかについて非常に注意する必要があるということです。もう 1 つの観点は、Google Spanner などの非常に洗練された Paxos の実装を採用することです。これにより、プログラマーは非 ACID システムの問題について心配する必要がなくなります。

于 2016-03-01T06:34:15.067 に答える
0

上記の理解が正しければ、レプリケーション プロセスが完了するまでクライアント リクエストがしばらく保留されていると言えます。

正解です。現在の用語のリーダーは、コマンドがクラスター内のノードの大部分に複製された後にのみ、クライアントの要求を確認します。

また、クライアント リクエストの成功は、レプリケーション プロセスの成功に大きく依存していると主張することもできます。

それも正しい。コマンドが正常にレプリケートされ、リーダーがリクエストを確認できるようにするには、少なくともクラスター内のノードの大部分 (リーダーを含む) が利用可能で応答性が高い必要があります。

複製手順が完了した後、クライアント要求が応答を受信するまでに平均で予想される時間

これは、ネットワークのトポロジによって異なります。クライアント リクエストへの応答のレイテンシは、次の部分で構成されます (リーダーがクラッシュしないと仮定): * クライアント リクエストがクライアントとリーダーの間で送信されるのに必要なレイテンシ。*AppendEntriesエントリーを複製するためのリーダーからフォロワーへの要求の待ち時間 (すべてのフォロワーに並行して送信されます。 *AppendEntriesフォロワーからリーダーへの応答の待ち時間。 * リーダーがコマンドをそのコマンドに適用するために必要な時間。ステート マシン (つまり、最良の場合はディスク書き込み) * リーダーからクライアントに送信されるクライアント応答のレイテンシ

さまざまなメッセージの遅延は、ノード間の距離によって異なりますが、おそらく数十分の一から数百ミリ秒のオーダーになります。

また、それはリアルタイム システムで効率的に機能しますか?

それは、特定のケースに対する要件によって異なります。しかし、一般に、リアルタイム システムでは数ミリ秒未満のレイテンシが必要とされるため、答えはノーである可能性が高くなります。また、新しいリーダーの選出が行われるクラッシュや不安定な期間中は、レイテンシが大幅に増加する可能性があることに注意してください。

于 2019-09-13T14:07:48.453 に答える