こんにちは!Cloud Spannerの世界へようこそ。
今日は、データベースの常識を覆す「Cloud Spanner」の心臓部、その中でも「読み取り専用レプリカ」と「データの同期・時間のマジック」についてお話ししますね。
「分散データベースってなんだか難しそう…」「レプリケーションラグって聞いただけでアレルギーが出る…」そんな風に思っていませんか?
大丈夫。今日は専門用語をできるだけ封印して、私たちの日常にある「あるお店の仕組み」に例えて優しく解き明かしていきます。
ここをクリアすれば、Cloud Spannerの本質的なすごさがグッと身近になりますよ。一緒にバッチリマスターしていきましょう!
—
1. 世界中にある「本店」と「分店」の物語
想像してみてください。世界中に大人気の「超巨大ドーナツ店」があるとします。
本店のカウンターには、たった一人の店長(これがデータベースのリーダーノードです)が座っています。この店長だけが、「今日のメニューの変更」や「新しいレシピの追加(データの書き込み)」を決めることができます。
世界中からお客さんが殺到するので、本店だけでドーナツを配っていたら大行列になってしまいますよね。そこで、世界各地に「分店」を作りました。これが「読み取り専用レプリカ」です。
分店の役割は、「ドーナツを買いたいお客さんに、商品を渡すこと(データの読み取り)」だけです。自分勝手に新しい味を作ったりはできません。必ず本店の店長からの指示を聞いて、「あ、今日の新商品はチョコ味ですね!」とメニューをコピーして、お客さんに提供します。
Cloud Spannerは、まさにこの「本店と分店のチームワーク」で世界中のアクセスをさばいているんです。
—
2. 「あれ?メニューが古い?」を防ぐ秘密
分店(読み取り専用レプリカ)を使うときに、私たちが一番心配なのは何でしょうか?
そう、「本店の最新情報がまだ分店に届いていなくて、古い情報を買わされてしまうこと(レプリケーションラグ)」ですよね。普通のデータベースだと、本店から分店へ情報が伝わるまでに少しタイムラグがあって、「さっき新商品が出たって聞いたのに、この分店にはまだないぞ!」ということが起きがちです。
でも、Cloud Spannerは一味違います。ここで登場するのが、Googleが誇る超高精度な時計の技術「TrueTime(トゥルータイム)」です。
TrueTimeってなに?(日常の例え)
世界中に時計はたくさんありますが、ちょっとずつズレていますよね。「私の時計の方が1秒早い!」なんてケンカになることも。
もし本店と分店の時計がズレていたら、「今すぐこのデータを読んで!」と言われても、時間が噛み合わなくて大混乱です。
そこでCloud Spannerは、世界中のサーバーに「GPS」と「原子時計」を搭載し、「絶対にズレない究極の時間(正確には、ズレの幅を数ミリ秒以内に抑えた時間)」を共有しています。
これによって、こんな魔法が可能になります。
> 「〇月〇日 12時00分00秒000時点の状態を教えて!」
お客さんが分店にこうお願いすると、分店の店員さんはTrueTimeを使って、
「かしこまりました。私の手元にある今のメニューはちょっと古いかもしれないので、『あの正確な時間の時点では、本店はどうだったか』をタイムマシンで確認して、その時の正しいメニューをお見せしますね!」
と答えてくれるのです。
つまり、分店に最新情報がまだ届ききっていなくても、「過去の正しい一瞬」を指定して、絶対に嘘偽りのないデータを読み取ることができる。これが、Cloud Spannerが誇る整合性のマジックです。
—
3. 実務でどう使う?コードで見てみよう
概念が分かったところで、実際にCloud Spannerで「読み取り専用の特別な見方(タイムマシン読み取り)」をするイメージを覗いてみましょう。
Cloud Spannerでは、データの読み取り方を指定するときに、次のようなおまじない(設定)を使います。
— 【例】「5秒前」の正確な世界を覗き見るクエリ
— 読み取り専用レプリカは、この指示を受けて安全に古いデータとの辻褄を合わせてくれます
SELECT
UserId,
UserName
FROM
Users
— ここがポイント!正確な時間を指定して過去を覗く(Stale Readと呼ばれる技術)
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 5 SECOND);
ここがエンジニアの腕の見せ所!
リアルタイムの最新情報がいち早く欲しいときは本店のリーダーノードに頼みますが、「昨日の売上を集計したい」「少し前の正確なログを読み込みたい」というような場合は、あえて少し過去の時間(Stale Read)を指定します。
すると、世界中に散らばる読み取り専用レプリカたちが一斉に分担して超高速でデータを探してくれるため、本店の負担をスッキリ逃がしながら、ズレのない完璧なデータを手に入れることができるんです。
—
4. 先輩からのまとめ
いかがでしたか? 難しい言葉の裏側にある本質を整理してみましょう。
- 読み取り専用レプリカ(分店)は、世界中で「読む専用」の仕事を分担して、システム全体の負担を軽くする心強い味方。
- レプリケーションラグ(情報の時差)は、普通のデータベースの悩みどころ。
- しかし、Cloud SpannerはTrueTime(超正確な時計)を使うことで、「過去のこの瞬間!」と時間を指定し、時差を完璧にコントロールしながら常に矛盾のないデータを読み取らせてくれる。
「レプリカだから古いデータが見えちゃうかも…」という不安は、このTrueTimeの仕組みを知れば綺麗に消え去りますよね。
ここをクリアできれば、Cloud Spannerがなぜ世界中の巨大なシステムで選ばれているのか、そのアーキテクチャの美しさがハッキリと見えてきたはずです。
基礎から一歩進んだあなたなら、もう実務でSpannerを設計・運用する準備はバッチリですよ!次のステップも一緒に楽しんでいきましょう。
コメント