CDNってなんだろう?(1)
はじめに
こんにちは。川名(亮)です。
インターネットの普及によりWebサービスやECサイト(通販サイト)などビジネスに利用される機会が増えました。同時に利用者も増え、Webサイトの運用者は高速化や大規模アクセスへの対策に頭を悩ませています。
このような悩みを解決する方法としてCDN(Content Delivery Network)と呼ばれる技術が活用されています。
今回はこのCDNについての概要を説明します。
概要
- CDNが求められる背景
- CDN(Content Delivery Network)とは
- 【特徴1】大規模アクセスへの対策
- 【特徴2】サーバや拠点の冗長化
- 【特徴3】高速なレスポンス
- 【特徴4】グローバル配信
- CDNキャッシュの特性に注意
- まずは静的コンテンツのキャッシュから
- さいごに
CDNが求められる背景
単に「Webサイトが欲しい」というだけであればWebサーバが1台あれば解決します。WordPressのようなCMSベースのWebサイトやEC-CUBEのようなECサイトであっても同じサーバでDBサーバを稼働させるだけで済みます。しかし実際にビジネスとして運用するとなるとそう簡単にはいきません。
Webサイト運用の悩み
「多数の訪問者がアクセスし、Webサイトが高負荷でエラー表示となる」
「Webサーバやデータセンターの障害でWebサイトが表示できない」
「ビジネスをグローバル展開し始めたが、海外からのアクセスが遅い」
特に大規模アクセスは大きな懸念となります。インターネットが普及し、1人1台以上のスマートフォン所持も珍しくない時代となった今では一瞬で数百倍、数千倍というアクセスが発生することもあり得ます。
機会損失を防ぐためにいつ発生するか分からない大規模アクセスへの対策として、過剰な回線やサーバを常に用意するというのはコスト面で大きな負担となります。
このような悩みを解決する手段のひとつとしてCDNが活用されています。
CDN(Content Delivery Network)とは
では前述の問題を解決するCDNとは何でしょうか。
定義は人によって多少異なりますが、現在では概ね以下のような特徴が挙げられます。
- 大規模アクセスへの対策
- サーバや拠点の冗長化
- 高速なレスポンス
- グローバル配信(海外への配信)
一般的にはオリジンサーバと呼ばれるWebサイト本体となるWebサーバを用意し、その前面にCDNサーバ(CDNキャッシュサーバ)を配置する構成にします。
(CDNは必ずしもキャッシュサーバを利用するとは限りませんが、以降はキャッシュサーバの利用を前提に記載します)
CDNを利用した配信
クライアントからのリクエストはCDNサーバが担当し、必要に応じてCDNサーバがオリジンサーバからコンテンツを取得します。取得したコンテンツはCDNサーバにキャッシュされるため、時間が経過するにつれオリジンサーバからコンテンツ取得をする必要が少なくなります。これはオリジンサーバの負荷が減少することを意味します。
CDNサーバはCDNサービス事業者が管理/運用するインフラなので、Webサイト運用者はオリジンサーバやWebサイトの運用に集中することができるようになります。
では、これらの特徴をひとつひとつ解説します。
【特徴1】大規模アクセスへの対策
大規模アクセスの対策としてシンプルな方法は「サーバおよび回線を増強する」です。しかしこれらはランニングコストの増加となるため、平常時とピーク時の差が激しい場合にはピーク時をベースにインフラ環境を整えるというのは無駄が多いです。
また多くのサーバやネットワークを管理することになるため、運用負荷が上がります。
CDNによる大規模アクセス対策
CDNを適用すれば大規模なサーバや回線の増強は不要となります。CDNサービス利用料(主に転送量課金)を支払う必要があるものの、自身でインフラ増強するより安くなるはずです。
【特徴2】サーバや拠点の冗長化
大規模アクセスに耐えられるインフラ環境を冗長化することはコスト面で大きな負担となります。
CDNサービスでは複数拠点に膨大なサーバと広帯域の回線が用意されています。これらはCDN事業者によって常時利用可能な状態となっていますが、その維持費用をWebサイト運用者が支払う必要はありません。さらにCDNを適用しただけでこれらの冗長化が実現できるので手間がかかりません。
CDNによる配信冗長化
注意点としてオリジンサーバの冗長化について考えておく必要があります。オリジンサーバが故障した場合やその拠点が障害となった場合、CDNサーバはキャッシュされていないコンテンツをオリジンサーバから取得することができなくなるからです。
なお、静的なWebサイト(アクセスする人によって変わることのないWebサイト)であれば、オリジンサーバがダウンしていてもCDNキャッシュを利用してWebサイトを閲覧可能な状態なままにすることができます。
【特徴3】高速なレスポンス
多くのCDNサービスはクライアントが地理的に近い場所にあるサーバへアクセスするような仕組みを導入しています。海外も含めて多数の拠点を持つCDNですが、この仕組みによりサーバからのレスポンス遅延は起きず、高速なレスポンスを維持しています。
その他にもCDN事業者ごとに様々な高速化を行っています。たとえばCDNサーバの配信ソフトウェアの改良や物理的なサーバの性能を上げるなどです。
【特徴4】グローバル配信(海外への配信)
これは前述の【特徴2】と【特徴3】を組み合わせたものです。
日本国内での通信ではあまり気になりませんが、海外との通信は距離的な遅延を実感することができます。海外拠点を持っているCDNサービスであれば、海外からアクセスしようとした場合、そのクライアントから近い場所にある海外拠点のCDNサーバへアクセスさせることができます。
CDNを利用した海外配信
この時CDNサーバが対象コンテンツのキャッシュを持っていた場合、CDNサーバはそのキャッシュデータをクライアントへ送信します。クライアントとCDNサーバは自動的に近いもの同士で通信してくれるため、手間をかけずに海外向けのサービスやビジネスを展開することができます。
CDNキャッシュの特性に注意
手軽でいいことずくめのようにみえるCDNですが、CDNキャッシュの扱いには注意が必要です。
特に以下の2点は運用上よく理解しておく必要があります。
CDNキャッシュを持っていない場合はオリジンサーバから取得しようとする
「初めてリクエストされたコンテンツはCDNサーバがオリジンサーバから取得し、CDNキャッシュしてからクライアントへ配信する」という点です。
たとえば公開された直後のゲームソフトやパッチに大量のアクセスがあったとします。CDNサーバにキャッシュされていないのでオリジンサーバに大量の「初回リクエスト」が発生し、負荷に耐えきれなくなったオリジンサーバがダウンしてしまうといったことです。
動的ページをキャッシュさせると情報漏洩となる可能性がある
分かりやすい例がユーザのログイン処理があるようなサイトを全部キャッシュしてしまう事故です。
- Aさんがログインする
- Aさんはログイン後の自分のプロフィールページを閲覧する
- AさんのプロフィールページがCDNキャッシュされる
- Bさんがログインページへアクセスする
- Bさんは認証を行わずにログイン後のページへアクセスできる
- BさんにAさんのログイン後の情報が表示され、プロフィールページにもアクセスできる
Aさんの閲覧したページがCDNキャッシュされてしまった上に、これらのキャッシュコンテンツはCDNサーバ上ではアクセス制限がかかっていないため、誰でもアクセス(閲覧)可能となります。
ECサイトでは住所や購入履歴などセンシティブな情報があるため、「何をキャッシュさせるか(させないか)」をしっかりと考える必要があります。
まずは静的コンテンツのキャッシュから
Webサイトの運用担当者がシステムの細かいところまでは分からない、という場合もあると思います。そのような時はまず静的コンテンツのキャッシュから始めるのがよいです。
ユーザごとに画像が生成されるような仕組みがないWebサイトであれば「.jpg」「.png」のように画像ファイルだけをCDNキャッシュするといった方法です。ロゴ画像あたりはほとんど変更されることはないのに、ほぼ毎回アクセスされるため、ファイルサイズが小さくともCDNの効果が得られます。
さいごに
次回はCDNの仕組みについてもう少し技術的な話を書きます。その後はAWSサービスのCloudFrontを利用して実際にCDNを設定するハンズオン予定していますので、興味がある方は一緒に設定してみましょう。
Discussion