レプリケートされたログ
すべてのクラスタノードにレプリケートされる先読みログを使用することで、複数のノードの状態を同期させます。
問題
複数のノードが 1 つの状態を共有する場合、その状態を同期する必要があります。いくつかのノードがクラッシュしたり切断されたりしても、すべてのクラスタノードが同じ状態に同意する必要があります。そのためには、各状態変更要求に対してコンセンサスを得る必要があります。
しかし、個々の要求に対してコンセンサスを得るだけでは不十分です。各レプリカはリクエストを同じ順番で実行する必要があります。そうしないと、個々のリクエストに対してコンセンサスが得られたとしても、異なるレプリカが異なる最終状態になる可能性があります。
解決策
クラスタノードは、先読みログを保持します。各ログエントリには、コンセンサスに必要な状態とユーザーリクエストが格納されます。ログエントリについてコンセンサスを構築するためには、連携して動作し、すべてのクラスタノードがまったく同じ先読みログを持つようにします。その後、ログに従ってリクエストが順番に実行されます。すべてのクラスタノードは各ログエントリに同意するため、同じリクエストを同じ順番で実行します。これにより、すべてのクラスタノードが同じ状態を共有できるようになります。
詳細については、oreilly.com のオンライン電子書籍 のパターン・オブ・ディストリビューテッド・システムの第 12 章を参照してください。
このパターンは、パターン・オブ・ディストリビューテッド・システムの一部です。
2023 年 11 月 23 日