私は分散システムが初めてで、「単純な Paxos」について読んでいます。それは多くのおしゃべりを生み出し、パフォーマンスへの影響について考えています。
いくつかの小さなクラスターが異なる場所に配置された、グローバルに分散されたデータベースを構築しているとしましょう。サイト間の通信量を最小限に抑えることが重要と思われます。
コンセンサスを使用するために絶対に必要な決定は何ですか? 私が確かに考えた唯一のことは、ネットワークからノード (またはノードのセット?) を追加または削除するかどうかを決定することでした。これは、ベクトル クロックが機能するために必要なようです。もう 1 つ確信が持てなかったのは、同じ場所への書き込みの順序を決定することでしたが、これは Paxos を介して選出されたリーダーによって行われるべきでしょうか?
システム内のすべてのノードが一緒に決定を行うことは避けたほうがよいでしょう。各ローカル クラスタのいくつかのノードがクロス クラスタの決定に参加し、すべてのローカル ノードがローカル Paxos を使用して通信し、クロスサイトの質問に対するローカルの回答を決定できますか? ネットワークが飽和していないと仮定すると、待ち時間は同じになりますが、サイト間のネットワーク トラフィックははるかに軽くなります。
データベースのテーブルを行に沿って分割し、行の各サブセットをノードのサブセットに割り当てることができるとします。システム内のすべてのマシンで Paxos を使用してデータの各サブセットを含むノードのセットを選択し、そのデータのサブセットを扱うすべての操作に対してそれらのノード間でのみ Paxos を実行するのは正常ですか?
そしてキャッチオール: これに対処するために人々が行っている他のデザイン関連またはアルゴリズムの最適化はありますか?