【入門編】 マルチリージョン構成 – Cloud Spanner

こんにちは!Cloud Spannerの世界へようこそ。
チーフアーキテクトの私だ。今日はいよいよ、Cloud Spannerの真骨頂である「マルチリージョン構成」について話をしよう。

「複数の遠く離れた地域(リージョン)にまたがってデータを置くって、難しそう……」
そんな風に構えていないかい? 大丈夫。ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ。

今日は専門用語をできるだけ封印して、私たちの身近な「あるお店の仕組み」に例えながら、その凄さと本質を優しく解き明かしていこう。

—

1. 例え話:世界中にファンがいる「究極のレシピノート」

想像してほしい。あなたは世界中で大人気のレストランのオーナーシェフだ。
東京、ニューヨーク、ロンドン……世界中のスタッフが、あなたの「究極のレシピ」を見ながら毎日料理を作っている。

もし、東京の本店にしかレシピノートがなかったらどうなるだろう?

  • ニューヨークのスタッフは、わざわざ東京に電話して「今日の隠し味は何ですか?」と聞かなければならない(=通信の遅延)。
  • ある日、東京で大地震が起きてお店が大変なことになったら、世界中のお店で今日から何を作ればいいか分からなくなってしまう(=災害への脆弱性)。

じゃあ、どうすればいい?
答えは簡単だよね。「東京」「ニューヨーク」「ロンドン」のすべてのお店に、まったく同じ「究極のレシピノート」をあらかじめ置いておけばいいんだ。

しかも、東京の本店で新しいレシピを思いついた瞬間、一瞬のうちにニューヨークとロンドンのノートも自動で書き換わる魔法のペンがあったとしたらどうだろう?

Cloud Spannerの「マルチリージョン構成」とは、まさにこの魔法を現実のシステムでやってのける仕組みなのだ。

—

2. Cloud Spannerのマルチリージョン構成ってなに?

Cloud Spannerにおける「リージョン」とは、ざっくり言えば「巨大なデータセンターの塊(地域)」のことだ。
これを1つの地域だけでなく、例えば「日本(東京)」と「アメリカ(オレゴン)」というように、海をまたいだ複数の場所に同時にデータを配置するのがマルチリージョン構成だ。

これによって、何がすごいのか? 理由は大きく2つある。

① 地球の裏側からでも「秒速」でアクセス(低レイテンシ)

ユーザーがアメリカにいるなら、アメリカにあるデータセンターからデータを返してあげればいい。わざわざ日本のサーバーまでデータを取りに行く必要がないから、画面がサクサク動く。ユーザー体験が劇的に向上するんだ。

② 東京が沈んでも、ビジネスは止まらない(災害復旧・高可用性)

もし、日本のデータセンターが自然災害などで完全にダウンしてしまったとしても、安心してください。地球の裏側にあるアメリカのデータセンターが、何事もなかったかのようにバトンを受け継ぐ。サービスを止めることなく、ビジネスを継続できるんだ。

—

3. 「えっ、でもデータのズレ(同期)はどうやっているの?」

ここで、鋭い初学者ならこう疑問に思うはずだ。
「東京とアメリカで同時にデータを書き換えたとき、ほんのわずかなタイムラグで『東京のデータ』と『アメリカのデータ』にズレが生じちゃうんじゃないの?」

通常のデータベースだと、この「ズレ(整合性)」を保つのがめちゃくちゃ難しい。だから「ちょっと待ってね、今データを合わせているから……」と処理が遅くなったり、最悪の場合はデータが矛盾してしまうことがある。

しかし、Cloud Spannerが「世界最高峰」と言われる所以はここにある。
彼らは「TrueTime(トゥルータイム)」という、専用のGPS衛星と原子時計を使った驚異的な仕組みを持っているんだ。

これによって、世界中どこにデータがあっても、「何時何分何秒の何ミリ秒に、このデータが書き換わったか」を完全に同じ時間軸で管理できる。
つまり、東京で書き換わった瞬間、地球の裏側のアメリカでも「まったく同じタイミングの真実」としてデータが共有される。ズレが起きないんだ。

—

4. コードで見てみよう!……といっても、設定は驚くほどシンプル

「じゃあ、そのすごいマルチリージョンを使うには、何万行も複雑なプログラムを書く必要があるの?」
安心してほしい。Cloud Spannerの美しさは、その圧倒的なシンプルさにある。

私たちがやることは、データベースを作る時に「配置する場所(構成)」をちょこっと指定してあげるだけだ。

例えば、Google Cloudのコマンドラインツール(gcloud)を使って、日本とアメリカにまたがるマルチリージョン(例: `nam-eur-base1` みたいなイメージ)のデータベースを作るコマンドを見てみよう。

【Cloud Spannerのデータベース作成コマンドのイメージ】
gcloud spanner databases create my-global-db \
–instance=my-world-class-instance \
–ddl=”CREATE TABLE Users ( \
UserId INT64 NOT NULL, \
UserName STRING(100), \
) PRIMARY KEY(UserId)”

(※実際にはインスタンスを作成する段階で、配置するマルチリージョンのリージョンプロファイルを選択します)

驚いただろ?
アプリケーション側からは、ただの1つのデータベースに見えている。裏側で「東京とアメリカのどちらにデータを書きに行くべきか」「どうやって同期をとるか」は、すべてCloud Spannerのエンジンが勝手に裏でやってくれるんだ。

開発者は「どうやってデータを同期させよう?」という面倒な悩みから完全に解放され、「どんなアプリを作ろうか?」というクリエイティブな部分だけに集中できる。これがプロも唸るCloud Spannerの真価というわけだ。

—

5. 先輩エンジニアからのメッセージ

ここまで読んでくれてありがとう。
マルチリージョン構成と聞くと、なんだか雲の上の技術のように聞こえたかもしれない。でも、その本質は「大切なデータを世界中に賢く、安全に分散させて、ユーザーを笑顔にすること」に他ならない。

  • ユーザーの近くにデータを置いて速くする。
  • 地球のどこで何があってもデータを守り抜く。
  • そして、データのズレに悩まされない世界を提供する。

この基本さえ押さえておけば、君はもうCloud Spannerのアーキテクチャの核心をしっかりと理解している。自信を持って次のステップに進んでほしい。

さあ、次はどんな素晴らしいシステムを作ろうか? 分からないことがあったらいつでも私に聞いてくれよ!

コメント

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