一貫性モデルと非同期メッセージング
データを複数のサーバーへ複製(レプリケーション)する際、一瞬で同期が完了するわけではありません。地理的に離れたノード間でのデータ同期には、物理法則である光の速度による遅延が伴います。この非同期同期プロセスにおけるデータの整合性の定義(一貫性モデル)と、システム同士を疎結合にする非同期メッセージングの仕組みを学びます。
1. データの整合性を決める一貫性モデル
一貫性モデル(Consistency Model)とは、「データが更新された際、それが他のシステムやユーザーからどのように見えるか」を取り決めた契約・規則です。主なモデルは以下の通りです。
- 強い一貫性(Strong Consistency / 線形化可能性:Linearizability):
書き込み操作が完了した瞬間、それ以降のすべての読み出しにおいて、世界のどこからアクセスしても確実にその最新の値が読み出せることを保証するモデル。データの一時的なズレも許さないため、分散環境では極めてコスト(遅延)が高くなります。 - 結果一貫性(Eventual Consistency):
新しい書き込みの後、十分な時間が経過すれば、すべてのノードが最終的に同じ最新値に収束することを保証するモデル。同期の過渡期には古いデータを読み出す可能性がありますが、平常時の処理パフォーマンスを最高に保つことができます。
2. データレプリケーションのトポロジー
どのノードが書き込みを受け入れ、どのようにデータを他のノードに流す(複製する)かによって、レプリケーションの設計パターンが分かれます。
- シングルリーダー方式(Single-Leader Replication):
書き込みを受け入れることができるノード(リーダー/プライマリ)を1台に固定し、他のノード(フォロワー/セカンダリ)はリーダーからの更新履歴を読み取って自身のデータを追従させる方式。RDBなどで最も一般的です。競合が起きないため一貫性の維持が比較的容易ですが、リーダーが故障すると書き込み不能になります。 - マルチリーダー方式(Multi-Leader Replication):
複数のアクティブなリーダーを配置し、それぞれが独立して書き込みを受け入れ、裏側でデータを同期し合う方式。異なるデータセンター間でデータを同期する際などに使用されます。競合の解決(コンフリクト解決)が複雑になります。 - リーダーレス方式(Leaderless Replication):
特定のリーダーを設けず、クライアントが直接複数のノードへ書き込みと読み出しを同時に送信する方式。例えば3ノード中2ノードから「書き込み完了」の応答(クォーラム)が得られれば処理を成功とみなすことで、一部ノードがダウンしていても書き込みを継続できます(Cassandraなどで採用)。
3. システムを疎結合にする非同期メッセージング
分散システムを構築する際、サービス同士が直接APIなどで通信(同期通信)し合っていると、呼び出し先のサービスが停止した瞬間に、呼び出し元の処理も停止してしまう「障害の連鎖」が発生します。 この連鎖を断ち切り、システム同士を疎結合(Loose Coupling)に保つために、非同期メッセージングが活用されます。
これは、送信元(Publisher)がデータをメッセージキューまたはメッセージブローカーに投げ入れ、受信側(Subscriber)が自分のペースでキューからメッセージを取り出して処理するPub/Subモデルです。
このアーキテクチャでは、たとえ受信側のSubscriberサーバーが過負荷や故障で一時停止していても、送信側のPublisherはキューに書き込むだけで正常に応答を終えられます。溜まったメッセージはSubscriberが再起動した段階で順次処理されるため、システム全体としての可用性・弾力性(レジリエンス)が飛躍的に高まります。
次節では、これらの複数ノードが自律的に協調し合い、「どれが正しいデータか」を決定するための分散合意アルゴリズムについて詳しく学びます。