Virtual synchrony とは

バーチャルシンクロは、プロセス間のメッセージのやり取り(順序付けられた、信頼性の高いマルチキャストとも呼ばれる)技術です。バーチャルシンクロナイゼーションシステムでは、ネットワーク上で動作するプログラムをプロセスグループに編成し、グループにメッセージを送信することができます(特定のプロセスに送信するのではなく)。各メッセージは、すべてのグループメンバーに同じ順序で配信されます。これは、2つのメッセージが異なる送信者によって同時に送信された場合でも同じです。アプリケーションの設計と実装は、このプロパティによって大幅に簡素化されます。すべてのグループメンバーは同じイベント(グループメンバーシップの変更と受信メッセージ)を同じ順序で見ます。
事実上同期サービスは、典型的には、状態機械複製と呼ばれるプログラミングのスタイルを用いて実装され、何らかの形態の遠隔メッセージ通過インフラストラクチャを介してクライアントからの入力を受け取り、次に新しい状態に入り、決定論的な方法。その後、最初の実装は、プログラムの複数のインスタンスが、仮想的に同期するメッセージパッシングシステムを使用して、異なるマシン上で起動され、メンバー上で着信メッセージを複製するように変換されます。レプリカは同じイベントを同じ順序で参照し、同じ状態にあるため、同じ状態遷移を行い、一貫した状態を維持します。
サービスのレプリケーションはフォールトトレランス機能を提供します。レプリカに障害が発生した場合(クラッシュによって)、他のレプリカが残り、応答を提供し続けることができます。レプリカグループの異なるメンバーは、通常、グループメンバーシップを使用してそれぞれの役割を決定することによって、ワークロードを細分化するようにプログラムすることもできます。これにより、N個のメンバーのグループが、N個のメンバーよりもN倍高速に実行することができます。また、N回の要求を処理することもできますが、クラッシュ時にフォールトトレランスを提供し続けます。
バーチャルシンクロナイゼーションは、プログラマがメッセージの早期(楽観的な)配信を要求できる、または緩やかな形式のオーダーを要求できる機能を備えているため、古典的な状態マシンの複製とは区別されます。これらの機能を適切に使用すると、大幅な高速化が可能になります。しかし、プログラマは、保証の緩和が正確さを損なわないことを確実にする必要があります。
例えば、同期して更新されたデータを保護するためにロックを使用するサービスでは、メッセージングシステムは、個々の送信者がメッセージを送信する順序(FIFO保証)を考慮して安価な形式のメッセージ順序を使用するように指示することができるメッセージが異なる送信者によって同時に送信された場合、合意された注文を課そうとはしません。送信側が実際にデータをロックしていれば、FIFO順序が正しいことを示すことができます。利点は、FIFOの順序付けは、並行メッセージの順序全体より実装する方がはるかにコストがかからないことです。
別の例を挙げると、メッセージを楽観的に配信することで、仮想マシンはPaxosよりもパフォーマンスが優れています。Paxosは通常2フェーズプロトコルを必要としますが、オプティミスティック仮想同期プロトコルは到着時にすぐにメッセージを送信できます。ただし、これにより、状態マシンの複製モデルの安全性が損なわれる可能性があります。このような問題を防ぐために、この機能を使用するプログラマは、flushというプリミティブを呼び出す必要があります。これは、楽観的に配信されたメッセージがすべてのグループメンバーに届くまで、呼び出し元を遅らせます。プログラマがこの動作を理解し、外部クライアントや永続ストレージとの対話に先立ってflushを呼び出すように注意するならば、安全性を損なうことなくより高いパフォーマンスを達成することができます。
これらの限定された形式のイベントの並べ替えと楽観的な早期配信に関連する柔軟性により、非常に高いフォールトトレランスと一貫性の保証を維持しながら、非常に高いデータレートを実現する仮想同期プラットフォームが可能になります。