【入門編】 Paxos合意アルゴリズム – Cloud Spanner

こんにちは!Cloud Spannerの世界へようこそ。
チーフアーキテクトの私です。

「グローバル規模でデータを絶対に失わず、しかも秒速で処理するデータベース」と聞くと、なんだか難しそうに聞こえますよね。
でも大丈夫。今日は、Cloud Spannerの心臓部であり、その強さの秘密である「Paxos(パクソス)合意アルゴリズム」について、専門用語をできるだけ使わずに、私の経験を交えながら優しく紐解いていきます。

ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ。それでは、コーヒー片手にリラックスして進めましょう!

—

1. そもそもCloud Spannerってどんなスゴい奴?

従来のデータベースには、大きなジレンマがありました。

  • 「ひとつの場所(単一サーバー)」にデータを置けば安全だけど、世界中からアクセスされると重くなる。
  • 「あちこちの場所(複数サーバー)」にデータを分ければ速いけど、それぞれの場所で「今の最新データは何だっけ?」と意見が食い違ってしまう。

これを解決するのがCloud Spannerです。世界中にサーバーを置きながら、まるで「ひとつの完璧なデータベース」のように振る舞う。
これを可能にしている魔法こそが、今回学ぶ「Paxos」なのです。

—

2. 日常の例えで理解する「Paxos」

いきなり分散システムの話をすると眠くなってしまうので、身近な例えをしましょう。

ここに、「大切なプロジェクトの方針」を決めたい5人のリーダー(東京、アメリカ、ヨーロッパ、オーストラリア、ブラジル)がいます。
彼らは世界中に散らばっており、直接会うことはできません。連絡手段はチャット(ネットワーク)だけです。

もし、東京のリーダーが「来週からこの方針で行こう!」と勝手に決めてしまったらどうなるでしょうか?

  • チャットが途中で切れて、アメリカのリーダーに伝わらないかもしれない。
  • ヨーロッパとアメリカで同時に違う方針を言ってしまい、どちらを信じていいか分からなくなるかもしれない。

これでは会社が大混乱ですよね。

そこで彼らが使っているルールが「Paxos」です。ルールはシンプルに言うとこう。

1. 提案する(Propose):誰かが「この方針でどう?」と全員に投げかける。
2. 多数決をとる(Accept):世界中にいるリーダーの過半数(この場合は3人以上)が「その方針に賛成!」と返事をしたら、その方針が「絶対に覆らない事実」として確定する。

ポイントは、「全員が同時に同じ瞬間を生きている必要はない」という点です。ネットワークの調子が悪くて返事が遅れている人がいても、過半数さえ集まれば物事を先に進められる。これが、世界中でデータを安全に同期するための秘密の仕組みなのです。

—

3. Cloud Spannerの中では何が起きているのか?

Cloud Spannerの中身を覗いてみましょう。
Spannerは、巨大なデータを「スプリット」という小さなブロックに切り分けて、世界中のサーバーにバラバラに配置しています。

そして、それぞれのスプリットには「レプリカ(コピー)」が(通常は5つほど)用意されています。

  • スプリットAのデータは、東京、オレゴン、アイルランド、シドニー、フランクフルトのサーバーに保管されている。
  • ユーザーが「データを書き込みたい!」とリクエストを送ると、そのスプリットを担当するサーバーたちの間で、先ほどのPaxos会議が瞬時に開催されます。
  • 5つのサーバーのうち、3つ(過半数)のサーバーが「OK、書き込み完了したよ!」と合意した瞬間、Spannerはユーザーに対して「書き込み成功しました!」と返事をします。

「えっ、世界中で通信したら遅くなるのでは?」と思ったあなた。

鋭い着眼点ですね!実はSpannerは、Googleが自社で敷設した超高速な専用ネットワークを使っています。だから、地球の裏側との通信であっても、人間の感覚では一瞬(数十ミリ秒)でこの合意形成を終わらせてしまうのです。

—

4. 万が一、サーバーがブッ壊れてもデータが消えない理由

エンジニアとして最も恐ろしい瞬間、それは「サーバーのハードウェア障害」です。夜中に突然「サーバーが燃えました」とアラートが鳴る悪夢ですね。

しかし、Paxosを理解していれば、もう夜もぐっすり眠れます。

例えば、東京にあるサーバーが雷に打たれて完全に沈黙したとしましょう。
通常ならデータが消えてパニックですが、Spannerではこうなります。

1. 東京のサーバーがダウンする。
2. データを持っている残りのサーバー(オレゴン、アイルランドなど)は、「あれ、東京から返事が来ないぞ。でも、私たちだけで過半数の合意は取れるな」と気づく。
3. 何事もなかったかのように、残りのメンバーでシステムを継続する。
4. 壊れた東京のサーバーが新しいハードウェアに交換されて復活すると、他のサーバーから「おーい、君がいない間の最新データこれだよ」と教えてもらい、秒速で仲間入りする。

これが、「高可用性(止まらないシステム)」の正体です。バックアップのテープを引っ張り出して復旧作業……なんてナンセンスな作業は、Cloud Spannerには存在しません。

—

まとめ:Spannerの強さは「確実な合意」の上にある

いかがでしたでしょうか?

  • Cloud Spannerは、世界中にデータを分散させながらも強力な一貫性を持つデータベース。
  • その裏側では、Paxos合意アルゴリズムが動き、サーバー同士で過半数の賛成を取り付けながらデータを安全に守っている。
  • 一部のサーバーが壊れても、残りのメンバーが自動でカバーするから絶対に止まらない。

難解に見えた分散システムの理論も、こうして本質を掴んでしまえば怖くありませんよね。
この「確実な合意」という土台があるからこそ、私たちはアプリケーションのコードを書くときに、インフラの複雑さを忘れてビジネスロジックに集中できるのです。

それでは、次回の実務で役立つアーキテクチャ解説でお会いしましょう。チーフアーキテクトの私でした!

コメント

タイトルとURLをコピーしました