こんにちは!現場のパケットの動きを眺めるのが何よりの楽しみ、SRE兼クラウドアーキテクトの執筆担当です。
「Webサイトの表示が遅いな……」「転送量(ネットワークの通信量)が増えて、コストがかさんできたな……」そんな悩みに直面したことはありませんか?
インターネットという巨大な道路網をデータが駆け抜けるとき、その「サイズ」をいかに小さくし、いかに効率的な「梱包」をするかは、エンジニアにとって永遠のテーマです。今日は、Google Cloud(GCP)が提供する強力なコンテンツ配信ネットワーク「Cloud CDN」の舞台裏を覗いてみましょう。
特に、データをギュギュッと凝縮する「Brotli(ブロトリ)」や「Gzip(ジップ)」による圧縮と、オリジンサーバーとのやり取りをスムーズにする「最適化」の仕組みについて、郵便配達の仕組みに例えながら、一歩ずつ丁寧に紐解いていきますね。
—
1. なぜ「圧縮」が必要なの?——大きな荷物を真空パックにする魔法
想像してみてください。あなたが友人に、巨大な「ぬいぐるみ」をプレゼントとして郵送するとします。そのままのサイズで送ると、大きな段ボール箱が必要になり、送料も高くなりますし、配達員さんも運ぶのが大変で時間がかかってしまいますよね。
でも、もしそのぬいぐるみを「真空パック」にして、空気を抜いてペシャンコにできたらどうでしょう?
箱は小さくなり、送料は安くなり、トラックにもたくさん積めるので早く届きます。受け取った友人が袋を開ければ、ぬいぐるみは元のふわふわな姿に戻ります。
Webの世界の「圧縮」も、これと全く同じです。
- 圧縮前: HTMLやCSS、JavaScriptといったテキストファイル。
- 圧縮: サーバー(Cloud CDN)がデータを特殊な計算で小さくする。
- 転送: 小さくなったデータをインターネット経由で送る。
- 展開: ブラウザ(ChromeやSafari)が受け取ったデータを元の形に戻す。
この魔法を使うことで、ユーザーは一瞬でサイトが表示される快感を得られ、私たちはクラウドの通信費を節約できるという、まさに「三方良し」の仕組みなのです。
—
2. BrotliとGzip:2種類の「真空パック機」
Cloud CDNでは、主に2種類の圧縮方式が使われます。
Gzip(ジップ)
古くから愛されている、大ベテランの圧縮方式です。ほとんどすべてのブラウザやサーバーが対応しており、安心感があります。
Brotli(ブロトリ)
Googleが開発した、期待の超新星です。Gzipよりもさらに10〜20%ほどデータを小さくできる優れものです。現代の主要なブラウザはほぼすべてこれに対応しています。
Cloud CDNは、ユーザーのブラウザが「私はBrotliが分かりますよ!」と言えばBrotliで送り、「Gzipしか分かりません……」と言えばGzipで送る、という「出し分け」を自動でやってくれるのです。賢いですよね!
—
3. パケットが駆け巡る裏側:リクエストとレスポンスの合言葉
では、実際にブラウザとCloud CDNの間でどのような会話(通信)が行われているのか、その中身を見てみましょう。
1. ブラウザからのお願い:
ブラウザは「このページをください!ちなみに私はBrotliとGzipの解凍ができますよ」という目印を付けてリクエストを送ります。
- これが
Accept-Encoding: gzip, brというヘッダー(お手紙の表書きのようなもの)です。
2. Cloud CDNの判断:
Cloud CDNのエッジサーバー(世界中にあるGoogleの拠点)がそのお手紙を見て、「お、このブラウザはBrotliが使えるな。じゃあ、一番効率よく圧縮して送ってあげよう」と判断します。
3. オンザフライ圧縮:
Cloud CDNは、オリジンサーバー(あなたの元のサーバー)から届いたデータをその場でシュッと圧縮します。これを「オンザフライ(その場ですぐに)」と呼びます。
4. 返信:
「はい、Brotliでギュッと小さくしておきましたよ!」という印(Content-Encoding: br)を付けて、ブラウザにデータを届けます。
—
4. オリジンプロトコル最適化:サーバー間の「専用レーン」
Cloud CDNのもう一つのすごい機能が、オリジンプロトコル最適化です。
これは、Cloud CDNのエッジサーバーと、あなたのオリジンサーバー(Cloud StorageやCompute Engineなど)の間の通信をスピードアップする仕組みです。
通常、通信を始める前には「これから送りますよ」「いいですよ」「準備できました」という何度も確認のやり取り(ハンドシェイク)が発生します。Cloud CDNは、このやり取りを省略したり、一度作った「通り道」を使い回したりすることで、無駄な待ち時間を極限まで削ぎ落としてくれます。
特に、オリジンとの通信に HTTPS を使うことで、Googleの堅牢で高速なネットワーク網を最大限に活かした「特急便」が利用できるようになります。
—
5. 実践!Cloud CDNで圧縮を有効にする設定
「難しそう……」と思うかもしれませんが、Google Cloudでの設定は驚くほど簡単です。ここでは、gcloud コマンドを使った設定例を見てみましょう。
Cloud CDNの圧縮設定を有効化する
Backend Service(バックエンドサービス)に対して、圧縮を「自動(AUTOMATIC)」に設定するだけです。
# バックエンドサービスの設定を更新し、圧縮を有効にします
# --enable-cdn: CDNを有効化
# --compression-mode: AUTOMATIC に設定することで、BrotliやGzipを自動で選んでくれます
gcloud compute backend-services update [あなたのサービス名] \
--enable-cdn \
--compression-mode=AUTOMATIC \
--global
なぜ AUTOMATIC なのか?
この設定にすると、Cloud CDNが以下の条件を自動でチェックしてくれます。
- クライアント(ブラウザ)が圧縮に対応しているか?
- そのファイルが「圧縮して効果があるもの」か?(画像などは元々圧縮されているので、二重に圧縮しないように配慮してくれます)
—
6. 本当に圧縮されているか確認してみよう!
設定ができたら、実際にパケットが小さくなっているか確認してみましょう。Google Chromeを使えば、誰でも簡単に「健康診断」ができます。
1. 自分のサイトを開き、右クリックして「検証」を選択(デベロッパーツールを開く)。
2. 「Network」タブをクリックします。
3. ページを再読み込みします。
4. リストに出てきたHTMLやJavaScriptファイルを選択し、「Headers」タブを確認します。
ここで、Content-Encoding: br (または gzip)と表示されていれば、おめでとうございます!Cloud CDNの魔法が正しく働いています。
# 成功している時のレスポンスヘッダーのイメージ
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Encoding: br <-- これがBrotli圧縮の証!
Vary: Accept-Encoding <-- 「ブラウザの対応状況によって中身を変えたよ」という印
—
まとめ:一歩ずつ、快適なネットワーク作りを
「ネットワーク」と聞くと、目に見えない電気信号や複雑な英語の羅列を想像して構えてしまうかもしれません。でも、その本質は「いかに効率よく、丁寧に荷物(データ)を届けるか」という、私たちの日常にある物流と同じです。
Cloud CDNの圧縮機能を使うことで、
- ユーザーの待ち時間が減り、
- サーバーの負担が減り、
- お財布(通信費)にも優しくなる。
そんな素敵なサイクルが出来上がります。まずは管理画面のボタンを一つポチッと押すところから、あるいはコマンドを一つ打つところから、あなたのインフラを「特急便」に変えてみませんか?
これからも、パケットが元気にネットワークを駆け巡る様子を一緒に楽しんでいきましょう。分からないことがあっても大丈夫。一歩ずつ、理解を深めていけばいいのですから!
コメント