ここのタイトルは誤解を招く可能性があります。例を通して私の疑問を説明するために最善を尽くします。
ウィキやその他の情報源から paxos アルゴリズムについて読んでいます。
1) 値を更新するクライアントの要求 (X
以下の例) が処理される状況を想像してください。Paxos の 1 ラウンド後、値Vb
が選択されます。これは、Acceptor が Proposer に返信するときに、以前に受け入れられた Proposal 番号と対応する値が含まれているためです。以下の例では、3 つのアクセプターが、(8,Va),(9,Vb),(7,Vc)
現在 を持っているプロポーザーに送信します(10,X)
。受信(9,Vb)
した最大の提案番号であるため、値を取得(10,Vb)
し、すべてのアクセプターに値をブロードキャストして承認します。X
そのため、この Paxos のラウンド全体が処理された初期値は更新されませんでした。この場合、X への更新のクライアント トランザクションは失敗しましたか?
この後のアクセプターの最終的な状態は何ですか? それらはすべて(10,Vb)
、承認された最大の提案番号と値を持っているため、同期していますか?
クライアント 提案者 受容者 学習者 | | | | | | | | | | | | | | --- 最初のリクエスト --- X-------->| | | | | | | | | | | リクエスト | | X--------->|->|->| | | | | 準備する(10) | | |<---------X--X--X | | | Promise(10,{(8,Va),(9,Vb),(7,Vc)} | | X--------->|->|->| | | | | 受け入れる!(10,9,Vb) | | |<---------X--X--X------>|->| 可(10,9,Vb) |<---------------------------------X--X 応答 | | | | | | | | | | | | | |
2) より複雑なケースで、2 つの提案が行われますが、コンセンサスに到達しようとする時点が異なります。X
これは、リージョン A のクライアント C1 が一部のデータを変更していて、まだコンセンサスに達していない一方で、リージョン B のクライアント C2 が同じデータを変更している状況を想像してくださいX
。クライアントの要求の 1 つが拒否されましたか? C2 は C1 よりも遅く発生することに注意してください。ただし、コンセンサスにはまだ達していません。順序付けに従う場合、C1 リクエストを終了し、コンセンサスを受け入れてから、C2 リクエストを処理する必要があります。このブログの私の理解から、この場合、C1 リクエスト値が選択されます。
では、C2 リクエストは放棄されたのでしょうか。それは良い選択肢ではないかもしれません。
例 (このブログからの著作権):
この場合、v=8
が最終的に選択されますが、 request forV=5
はクライアントによって要求された最新の更新です。なぜそうなのですか?これは深刻な影響を与える可能性があります
助けてくれてありがとう、明けましておめでとう!