レプリケートされたログ

すべてのクラスタノードにレプリケートされる先読みログを使用することで、複数のノードの状態を同期させます。

問題

複数のノードが 1 つの状態を共有する場合、その状態を同期する必要があります。いくつかのノードがクラッシュしたり切断されたりしても、すべてのクラスタノードが同じ状態に同意する必要があります。そのためには、各状態変更要求に対してコンセンサスを得る必要があります。

しかし、個々の要求に対してコンセンサスを得るだけでは不十分です。各レプリカはリクエストを同じ順番で実行する必要があります。そうしないと、個々のリクエストに対してコンセンサスが得られたとしても、異なるレプリカが異なる最終状態になる可能性があります。

解決策

クラスタノードは、先読みログを保持します。各ログエントリには、コンセンサスに必要な状態とユーザーリクエストが格納されます。ログエントリについてコンセンサスを構築するためには、連携して動作し、すべてのクラスタノードがまったく同じ先読みログを持つようにします。その後、ログに従ってリクエストが順番に実行されます。すべてのクラスタノードは各ログエントリに同意するため、同じリクエストを同じ順番で実行します。これにより、すべてのクラスタノードが同じ状態を共有できるようになります。

詳細については、oreilly.com のオンライン電子書籍 のパターン・オブ・ディストリビューテッド・システムの第 12 章を参照してください。

2023 年 11 月 23 日