0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりアドカレ2024 byもんすんAdvent Calendar 2024

Day 7

分散システムの基礎:データレプリケーションとCAP定理のトレードオフ

Last updated at Posted at 2024-12-06

はじめに

こんにちは、もんすんです。
今回は分散システムについて触れていきます。

現代のインターネットやアプリケーションは、複数のサーバやシステムが連携する「分散システム」で動いています。

この分散システムが効率性・信頼性を保って動作させるためには、「データレプリケーション」や「CAP定理」などの基本概念を理解することが重要です。

本記事では、それぞれの基礎について具体例を交えて説明します。

本題

データレプリケーションとは

データレプリケーションとは、同じデータを複数の場所にコピーし、維持する技術です。

例えば、あるサービスのデータが1つのサーバにしか保存されていないと、そのサーバが故障した場合、データが失われてしまいます。
しかし、データレプリケーションを行えば、別のサーバにもコピーが保存されているため、データを復旧できます。

レプリケーションの種類

  • 同期レプリケーション: すべてのコピーが同時に更新されます。一貫性は高いですが、遅延が発生することもあります
  • 非同期レプリケーション: 最初に1つのコピーが更新され、その後他のコピーに反映されます。パフォーマンスは良いですが、データの一貫性が一時的に損なわれることがあります

レプリケーション戦略

  • マスター・スレーブモデル: 一つのマスターノードが更新を管理し、スレーブノードに変更を伝播します
  • マルチマスターモデル: 複数のノードが同時にデータを更新できます
  • ピア・ツー・ピアモデル: すべてのノードが対等で、どのノードもデータを更新可能です

データレプリケーションは信頼性や可用性を向上させますが、運用には課題も伴います。

この課題の1つに「CAP定理」があります。

CAP定理

CAP定理(Brewerの定理)は、分散システムで以下の3つの特性を同時に満たすことが不可能であると示しています。

  1. 一貫性 (Consistency, C): すべてのノードが同じデータを持つ状態。
  2. 可用性 (Availability, A): すべてのリクエストに対して応答を返せる状態
  3. 分割耐性 (Partition Tolerance, P): ネットワーク障害が起きてもシステムが動作を継続できる状態

この3つのうち2つは保証できますが、残りの1つは妥協する必要があります。

トレードオフの具体例

3つのうち2つしか保証できないとは、どういうことでしょうか?
例を紹介しながら説明していきます。

分割耐性(P)が保証されないパターン

2つのノード、ノードAノードBからなる分散データベースがあります。

これらのノードは、データを複製し、一貫性を保つために連携しています。
つまり、Cが保証されている状態です。
通常、ノードAノードBは、同じデータを保持し、ユーザーからのリクエストに対して即座に応答します。この状態では、両方のノードが最新のデータを持っているため、可用性(A)も保証されています。

【課題】

さて、ノードAノードBの間のネットワーク接続が切断された場合を考えます。
2つのノードは互いに通信できなくなります。

もし、この状態で、引き続きシステムが稼働していると、ノードAでのデータ更新があった場合、ノードBはその情報を得られず、最新の情報を保持できなくなります。
その結果、ノードBは最新データを保証できなくなり、ノードAノードBのデータの一貫性も失われてしまいます。

つまり、一貫性(C)と可用性(A)が重視できなくなります。

これでは矛盾が生じるので、それを防ぐ(一貫性と可用性を重視する)には、システムを停止するしかありません。

これが、分割耐性が保証されていない(= ネットワーク切断によるノードの分割に対する耐性が低い状態)ということになります。

一貫性(C)が保証されないパターン

2つのノード、ノードAノードBからなる分散データベースがあります。

これらのノードは、可用性(A)が保証され、ユーザーからのリクエストに対して即座に応答します。
ネットワーク障害があってもシステムを動作させるようにしています。
つまり、Pが保証されている状態になります。

【課題】

ノードAノードBの間のネットワーク接続が切断されると、2つのノードは互いに通信できなくなります。

分割耐性(P)維持のため、システムは動作し続けるようになっており、可用性(A)維持のため、それぞれのノードは最新の情報を返却します。

しかし、ノードAノードBは通信できていないため、それぞれが自分の最新情報を正しい情報として返却してしまい、一貫性(C)が失われてしまいます。

可用性(A)が保証されないパターン

2つのノード、ノードAノードBからなる分散データベースがあります。

これらのノードは、データを複製し、一貫性を保つために連携しています。
Cが保証されています。
ネットワーク障害があってもシステムを動作させるようにしています。
Pも保証されています。

【課題】

ノードAノードBの間のネットワーク接続が切断されると、2つのノードは互いに通信できなくなります。

分割耐性(P)維持のため、システムは動作させなければいけません。
このままシステムが動作し続けると、ノード間でデータが同期されず、一貫性(C)が失われてしまうため、ユーザからのリクエストに対してエラーを返却します。
エラー返却ということは、正確な情報をレスポンスできていないということ、つまり可用性(A)が失われることになります。

終わりに

今回は、分散システムにおけるデータレプリケーションとCAP定理について触れました。

分散システムの設計において、データの信頼性や可用性を高めるデータレプリケーションと、CAP定理によるトレードオフの理解は不可欠です。

分散システムは複雑に感じるかもしれませんが、まずは基本的な原則を押さえて、その仕組みや設計の意図をきちんと理解しましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?