こんにちは!Cloud Spannerの世界へようこそ。
チーフアーキテクトの私です。
「世界中のユーザーが同時にアクセスしても、絶対に止まらず、データが消えないデータベース」を作りたいと思ったことはありませんか?それを実現するのがCloud Spannerですが、その裏側では、ものすごく頭の良い仕組みが動いています。
今回は、その心臓部である「リーダー選出プロセス」についてお話しします。「リーダーが壊れたらどうなるの?」という疑問を、専門用語を使わずに、とある身近な例えですっきり解き明かしていきましょう。
ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ!それでは、いってみましょう。
—
1. チームの「リーダー」が突然いなくなったら?
まずは、こんな状況を想像してください。
あなたは、世界中に散らばる巨大なプロジェクトを動かすチームのメンバーです。チームは5人で構成されており、重要な決定はみんなで話し合って決めています。
ただし、毎回5人全員でゴチャゴチャ議論するのは大変なので、「リーダー」を1人決めて、日々の細かな判断や作業はそのリーダーにお任せしています。リーダーはチームの代表として、みんなの意見をまとめ、外からの注文をテキパキとさばいています。
……さて、ある日、そのリーダーが急にお腹を壊して、連絡が取れなくなってしまったとします。
「あれ? リーダーから返事がないぞ?」
「どうする? このままじゃ仕事が止まっちゃうよ!」
チームは大ピンチです。さあ、あなたならどうしますか?
Cloud Spannerの裏側で行われていることも、これとまったく同じなんです。
—
2. Cloud Spannerの裏側:実は「チーム(Paxosグループ)」で動いている
Cloud Spannerは、ただ1台のコンピューターで動いているわけではありません。世界中のあちこちにデータをコピーして置いています。
そして、データを管理する場所ごとに「小さなチーム(専門用語でPaxosグループと呼びます)」を作っています。先ほどの例えで言えば、「5人1組のチーム」ですね。
このチームの中には、「リーダー」が1人と、「フォロワー(メンバー)」が数人います。
- リーダーの仕事: ユーザーからの「データを書き込んで!」「データを教えて!」というリクエストを一番最初に受け付け、チームのみんなに「こう書き換えていい?」と相談して実行する。
- フォロワーの仕事: リーダーを支え、リーダーが受け取ったデータと同じデータを自分の手元にもしっかりメモしておく。
もしリーダーが元気なうちは、このチームワークは完璧です。爆速で安全にデータが処理されます。
—
3. リーダーがダウン! 新しいリーダーを決める「自動お見合い(選出プロトコル)」
では、リーダーが眠っている(サーバーが故障した、ネットワークが切れたなど)とき、チームはどうやって新しいリーダーを決めるのでしょうか?
ここで登場するのが、「タイムアウト(時間切れ)」という仕組みです。
「あれ、返事がないな?」のタイムアウト
チームのメンバー(フォロワーたち)は、リーダーと常に「元気ですかー?」とアイコンタクトを取っています。
しかし、リーダーが故障すると、いくら待ってもリーダーからの「元気だよ!」という合図が返ってきません。フォロワーたちは心の中でこう思います。
> 「あれ……? いつもなら返事があるはずなのに、もう数秒も音沙汰がないぞ。これはもしや、リーダーに何かあったな?」
この「返事を待つ限界の時間」をタイムアウトと呼びます。Cloud Spannerでは、この時間が数秒(あるいはミリ秒単位)という驚異的な速さで設定されています。人間なら焦る暇もないほどの瞬発力です。
新リーダー立候補と多数決
タイムアウトを迎えた瞬間、フォロワーたちは動き出します。
1. 立候補: 「僕が次のリーダーをやります!」と手を挙げるメンバーが現れます。
2. 多数決(投票): 残りのメンバーが、「君なら信頼できるよ」「よし、お願いしよう」と投票します。
チームの過半数(半分より多い数)が賛成すれば、無事に新しいリーダーが誕生します!
これが、Cloud Spannerが自動で行っているリーダー選出の仕組みです。人間がわざわざ夜中に起きて「サーバーが落ちたから新しいリーダーに切り替えて……」と設定する必要は一切ありません。システムが勝手に、一瞬でやってくれるのです。
—
4. 「あれ、前のリーダーが復活しちゃったぞ?」という時の対策
ここで、ちょっと意地悪な心配をしてみましょう。
「新リーダーが決まったあとに、お腹を壊していた元のリーダーが治って戻ってきたら、リーダーが2人になってケンカしちゃうんじゃないの?」
鋭いですね!現実のシステムでも、古いリーダーが一時的にネットワークから切り離されただけで、後から「やあ、戻ったよ!」と勘違いして戻ってくることがあります。リーダーが2人いると、データの記録がグチャグチャになってしまいます。
これを防ぐために、Cloud Spannerのチームには「背番号(世代交代の番号)」のルールがあります。
- 新リーダーを選ぶたびに、チームは「第2代リーダー」「第3代リーダー」のように、新しい背番号を割り振ります。
- もし、古いリーダー(第1代)が戻ってきて「私がリーダーだ!」と言っても、チームのみんなは「いやいや、今は第3代目のリーダーがいるから、あなたの言うことは聞けません!」とピシャリと拒否します。
この仕組みのおかげで、リーダーが同時に2人存在することが絶対にできないようになっています。めちゃくちゃよく考えられていますよね。
—
まとめ
いかがでしたか? Cloud Spannerのリーダー選出プロセスをまとめると、こうなります。
1. チーム制(Paxosグループ): データを守るために、複数のサーバーがチームを組んでいる。
2. タイムアウト: リーダーからの返事が途絶えると、「何かあったな」と自動で検知する。
3. 多数決による選出: 残ったメンバーで投票し、一瞬で新しいリーダーを決める。
4. 背番号ルール: 古いリーダーが戻ってきても、混乱が起きないようにしっかりガードする。
Cloud Spannerは、こうした地道で賢い「チームワークのルール」を何重にも張り巡らせることで、「止めようとしても止められない、止まらないデータベース」を実現しているのです。
この基本 さえ押さえておけば、Cloud Spannerのアーキテクチャ本を読むときも、頭にスッと入ってくるはずです。
さあ、自信を持って次のステップへ進みましょう!
コメント