【入門編】 リーダー選出プロセス – Cloud Spanner

こんにちは!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のアーキテクチャ本を読むときも、頭にスッと入ってくるはずです。
さあ、自信を持って次のステップへ進みましょう!

コメント

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