こんにちは!クラウドインフラの世界へようこそ。
今日は、世界中の巨大なシステムを裏で支えるモンスターデータベース「Cloud Spanner(クラウド・スパナー)」の、もっともエキサイティングで核心的な秘密についてお話しします。
「大規模なシステム障害や、海底ケーブルが切断されるようなネットワークの分断が起きたとき、データベースの中身はどうなっちゃうの?」
そんなエンジニアなら誰もが震えるような疑問に対して、Cloud Spannerがどうやって涼しい顔をしてデータを守り抜いているのか。今回は専門用語をできるだけ封印して、日常の分かりやすい例えを交えながら解き明かしていきますね。
ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ!ぜひ最後までお付き合いください。
—
1. Cloud Spannerって、そもそもどんな存在?
まず大前提として、Cloud Spannerは「世界中どこからアクセスしても、絶対にデータが矛盾しない(強い整合性)」を持ちながら、「世界規模ですごいスピードで動き続ける(高可用性)」という、一見するとワガママすぎる願いを叶えてしまう魔法のデータベースです。
ふつうのデータベースの世界では、こういうジレンマがあります。
- みんなで情報を完全に一致させようとすると……
通信に時間がかかって、ネットワークのどこかが少しでも不調になるとシステム全体が止まってしまう。
- 止まらずに動き続けようとすると……
場所によってデータの食い違い(古い情報のまま動くなど)が起きてしまう。
「一貫性(みんな同じ答え)」と「可用性(止まらない)」は、いわば水と油なのです。しかし、Cloud Spannerはこの難問を、独自のチームワークでスマートに解決しています。その秘密が、これからお話しする「チーム体制」と「多数決」です。
—
2. 日常で例える「Spannerのチームワーク」
Cloud Spannerの中身を覗くと、データは小さなグループ(これを専門用語で「スプリット」と呼びます)に分割され、それぞれに「データの管理チーム」が割り当てられています。
イメージしてみてください。
あなたは、とある超重要プロジェクトを任された5人のチームのリーダーです。
メンバーはそれぞれ、東京、大阪、アメリカ、ヨーロッパ、オーストラリアといった、世界中にバラバラに離れた場所に住んでいます。
プロジェクトの大切な決定(「口座から1万円を引き出す」など)をするには、全員で集まるわけにはいかないので、いつもチャット会議で話し合います。
ここで、世にも恐ろしいトラブルが起きました。
—
3. 「ネットワークの分断」が起きたとき、何が起きるか?
ある日突然、大きな自然災害か何かで、世界を繋ぐインターネット回線がスパッと切れてしまいました。
世界は、次のように2つの孤島に引き裂かれてしまいました。
- チームA(多数派): 東京、大阪、アメリカ(3人)
- チームB(少数派): ヨーロッパ、オーストラリア(2人)
この状態を、ITの世界では「ネットワークパーティション(ネットワークの分断)」と呼びます。
お互いの声は一切届きません。ヨーロッパの2人は「東京のやつらが消えた!」と思い、東京側の3人は「ヨーロッパからの連絡が途絶えた!」とパニックになります。
このとき、もしチームB(少数派)が「連絡がないなら、俺たちだけで勝手に通帳の残高を書き換えちゃおうぜ!」と勝手な判断を下したらどうなるでしょうか?
後で回線が復旧したとき、東京側のデータとヨーロッパ側のデータがまったく食い違ってしまい、銀行なら大惨事(大金が二重に使われてしまうなど)になりますよね。
Cloud Spannerは、このカオスを防ぐために「絶対に破られないルール」を持っています。それがPaxos(パクソス)合意アルゴリズムという、壮大な多数決の仕組みです。
—
4. 多数決(Paxos)がシステムを守る仕組み
Cloud Spannerの裏側で行われている「多数決のルール」は非常にシンプルで、かつ鉄の意志を持っています。
1. 「過半数(半数より多い人数)」の賛成がなければ、絶対に何も決定(書き込み)しない。
2. 5人チームなら、過半数は「3人」です。
このルールを先ほどの分断された世界に当てはめてみましょう。
- チームA(3人): 「よし、過半数の3人が揃っているから、会議を続けても大丈夫だ。みんなの意見が一致したからデータを更新するよ!」
→ システムは止まらずに動き続けます(可用性の維持)。
- チームB(2人): 「こっちは2人しかいない……。過半数(3人)に届かないから、どんなに重要なお願いが来ても、『今はお返事できません』とストップしよう」
→ 間違った古いデータや矛盾したデータが勝手に作られるのを完全に防ぎます(一貫性の維持)。
すごいことだと思いませんか?
Cloud Spannerは、ネットワークが分断されて世界が真っ二つに引き裂かれても、「過半数(多数派)が生き残っているエリア」だけで、何食わぬ顔で正しい処理を続けられるのです。
—
5. 世界が元通りになったとき(復旧のドラマ)
しばらくして回線が繋がり、世界が一つに戻りました。
少数派だったヨーロッパ・オーストラリアの2人は、チームA(多数派)にこう言います。
「こっちは連絡が取れなくて困ってたんだ。そっちはどうなってたの?」
すると、多数派のリーダーがこう答えます。
「こっちは3人でしっかり話し合って、これだけの仕事を進めたよ。ほら、最新の議事録(データ)をあげるから、君たちもそれをコピーしてよ!」
少数派の2人は「なるほど、そっちが正しい歴史を作っていたんだね」と納得し、自分の手元にある古いノートを、多数派の最新のノートに書き換えます。
これで、世界中のデータは完全に一致し、何事もなかったかのように平和が戻るのです。これが、Cloud Spannerが障害に強い理由の核心です。
—
6. まとめ:ここがスパナーの真骨頂
いかがでしたでしょうか?
Cloud Spannerがネットワークの分断という過酷な状況を生き抜く仕組みをまとめると、以下のようになります。
- チーム(グループ)ごとに世界中に分散してデータを守っている。
- 通信が途絶えて世界が分断されても、「過半数」のチームがいるエリアなら処理を止めずに動き続ける。
- 過半数に満たないエリアは、間違いを防ぐために安全にストップする。
- 回線が復旧すれば、多数派の正しい記録をみんなで共有して一瞬で同期する。
私たちは普段、何気なく「クラウドのデータベースは便利だな」と使っていますが、その裏ではこうした数学的にも美しい「多数決のドラマ」が毎秒何千回、何万回と繰り広げられているのです。
この仕組みを知っていれば、今後「大規模なネットワーク障害が起きたとき、Spannerなら大丈夫だ」と自信を持ってシステムを設計できるようになりますよ。
それでは、次回のディープな世界でお会いしましょう!
コメント