私のチームと私は、エンジニアリングにおける 2 ノード システムのスプリットブレイン問題を解決する方法を発明し、論文を発表しました。私たちは有名なチームではありませんが、この方法は非常に新しく実用的であると考えています。そのため、これが大きな革新であると誰もが考えるかどうかを確認するために、全員と議論したいと考えています。
私たちが解決しようとしている問題
まず、解決したい問題について説明します。2 ノード分散システムでは、ノード間のリンクに障害が発生し、3 番目のノードがない場合、これら 2 つのノードで構成されるシステムは、可用性 (ライブ性) と一貫性 (安全性) の両方でリーダーの選出を行うことができません。これにより、2 ノードの分散ストレージまたはデータベース システムを設計することができなくなります。
この問題を解決するために、エンジニアは多くの方法を考えてきました。2 つのノード間でより信頼性の高いハードウェアを使用してリンク障害を回避するものもあれば、調停のために 3 番目のノードまたは共有メディアを使用するものもあります。ただし、これにより、ハードウェアに追加の要件が課せられます。
私たちが提案した解決策
このホワイト ペーパーでは、追加のサード ノードまたは共有メディアにも、信頼できるリンクにも依存しない新しい方法を提案します。この方法は「レベルベースのリーダー選出アルゴリズム」と呼ばれます。しかし、この名前は論文では使用されていません。
これが、S サーバー ノードで構成される、部分的に同期される (または最終的に同期される、または半同期される) 分散ストレージおよびデータベース システムであるとします。それらにアクセスする C クライアント ノードがあります。
- S>=3 の場合、S サーバー ノードは Paxos、Raft などの任意の統一コンセンサス アルゴリズムを使用してリーダーを選出できます。この場合、可用性 (ライブ性、リーダーは最終的に選出される) と一貫性 (安全性、常に異なるリーダーは存在しない) が保証されます。
- S<=2 かつ C>=1 の場合、クライアント ノードもリーダー選出プロセスに参加します。クライアントノードの数 C>=1 である限り、ノードの総数は 3 以上であり、部分的な同期システムでリーダーを選出するために均一コンセンサスアルゴリズムを使用できます。ただし、サーバー ノードのみが投票および選出される権利を持ち、クライアント ノードは投票する権利のみを持ち、選出される権利は持ちません。
- S<=2 かつ C=0 の場合、リーダー選出プロセスに参加するノードの総数は 3 未満であるため、可用性と一貫性の両方を保証できるアルゴリズムはありませんが、クライアント ノードからの要求もまったくありません! 可用性や一貫性は必要ないため、2 つのサーバー ノードのいずれかをリーダーとして選択できます。
リクエスト
この方法が大きなイノベーションと見なせるかどうか、ご意見をお聞かせいただければ幸いです。さらに、レベルベースのリーダー選出プリミティブを現在のストレージとデータベースの要求/応答プロトコルに追加する予定です。興味のある方は、お知らせください。