今回の連載では、まだCDN(Content Delivery Network)を使ったことのない・よく知らないというWebデザイナーさん、Webディレクターさんや企業のWeb担当者の方に向けて、CDNとは?いくら掛かるの?リスクはないの?といった疑問への回答から、実際の設定方法、WordPressサイトでのCDN利用に気をつけることなどを扱っていく予定です。大規模システムというよりは、中小規模なWebサイトをターゲットに想定しています。

第1回の本記事では、CDNとは?という内容で、CDNの仕組み、概要、なぜサーバの負荷が下がるのか?をやさしく解説したいと思います。

より具体的な記事は、こちらの記事を。
CDNで機会損失を回避!CDNの仕組みから導入効果の試算まで分かりやすくご紹介。 | さくらのナレッジ

実際にレンタルサーバへ設定する方法などはこちらの記事を合わせてご覧ください。
ウェブアクセラレータでWordPressを無敵化!Service Temporarily Unavailable(503)エラーを出さなくする方法 | さくらのナレッジ

CDNはとっても身近

CDNという言葉自体を初めて聞く人は決して少なくないと思います。普段Webサイトの制作や運営をしていても特に気にする必要が無いからというのが大きな理由です。また、CDNが必要なほど大規模なサイトを運営している人や会社がまだそこまで多くないからということも考えられます。

ところがCDN、実はとても身近なところで使われているのです。そう、今お使いのパソコンのWindows UpdateやスマートフォンのOSアップデートで利用されています。特定の時間にリリースされ、大容量のファイルを複数の端末へ届ける場合、サーバの負荷は非常に高くなります。しかも、これらのアップデートは配布初日の負荷が非常に高く、その他の日の負荷は恐ろしいほど低くなります。

最高負荷の日に合わせてサーバやネットワークを用意すると、低負荷の日も最高負荷に備えたサーバを運用する必要があるので非常にコストがかかります。この場合のコストとは、電気代や回線代からサーバの保守費用、有償OSを使っている場合はそのライセンス費用などですね。1台のサーバには実にたくさんのコストがかかります。そこで、最高負荷の日だけサーバとネットワークを借りられたらどんなに楽だろう!というニーズに応えたのがCDNです。

ネットワークコストと言われるとピンと来ない方も多いと思いますが、たいていのサーバサービスでは100Mbps共有でサーバ料金とセットで提供されていることが多いため、お金がかかるという認識があまり一般的ではありません。さくらのクラウドで提供しているネットワーク帯域料金は、100Mbpsで月額4,320円なのに対して、3000Mbps(3Gbps)では324,000円にもなってしまいます。広帯域のネットワークはお金がかかるということを覚えておきましょう。

もちろん、アップデートファイルのようなファイル配布以外のWebサイトの配信などにもCDNは利用されています。天気予報、ニュースなどの公共性の高いサイト、テレビ連動企画など短時間で高負荷になるサイトで利用事例が見られます。災害時に提供されるNHKのインターネット同時放送などは、まさにCDNを利用して配信されています。

CDNなし

CDNあり

CDNは簡単に言うと負荷を肩代わりしてくれるレンタルサーバのようなものです。上図のように一部の負荷を肩代わりしてもらうおかげで自分のサーバの負荷が下がり、安定してサービスを提供できるようになるわけです。

CDNの仕組み

CNAMEとは

自分のサーバではないところにデータを置いて自分のサイトと同じURLからデータを配信するには、まずDNSの仕組みを理解する必要があります。DNSをよく設定する人は見たことがあるかもしれません。DNSでは様々な値を設定できますが、最も多く利用されるのはAレコードです。これは、 example.com のAレコードは ***.***.***.*** のIPアドレスですよ、と指定する設定タイプで、ドメインとサーバを紐付ける最も大切なリソースレコードです。その他に、MXレコードというものもあり、これはメールサーバを指定するのに利用します。

こういったリソースレコードの設定タイプの一つにCNAMEというタイプがあります。CNAMEはCanonical NAMEの略で、あるドメインを別のドメインに紐付けることができます。これにより何ができるかと言うと、 www.example.com のCNAMEを www.example.jp に設定すると、www.example.com へアクセスしたユーザは www.example.com のURL表示のまま、 www.example.jp へアクセスすることができます。

URLをリダイレクトしているようなイメージが湧くと思いますが、リダイレクトと違うのは、リクエストしたURLのまま別のサイトの内容を表示できる部分です。URLはそのままに他サイトのコンテンツを表示するような時に利用します。

このCNAMEを利用すると、URLは自サイトのまま、別のサーバからデータを配信することができます。その別のサーバに自サイトのファイルが丸ごと入っていればどうでしょう?自分のサーバを利用しないで自サイトを配信することができます。

オリジンサーバとは

日本でオリジンというとお弁当を思いつくかもしれませんが、この場合は違います。 Origin とは「原点」という意味ですが、CDNの場合は、「元のデータが入っているサーバ」を指します。反対に、データを代わりに配信してくれるサーバを「キャッシュサーバ」と呼びます(エッジサーバと呼ぶ場合もあります)。

CDNはざっくり言うと、DNS、キャッシュサーバ、オリジンサーバで成り立っています。

上図は大まかなアクセスの順番ですが、エンドユーザはDNSを経由してキャッシュサーバへリクエストを出し、キャッシュサーバからオリジンサーバへデータを取りに来るといったイメージになります。CDNの場合は、CNAMEにはCDNから払い出されたドメインを利用し、CDNの管理画面などでオリジンサーバのURLを指定する、といった設定が一般的です。

キャッシュサーバがオリジンサーバの代わりにデータを配信するまで

キャッシュサーバの中身は最初何も入っていませんので、オリジンサーバまで取りにいく必要があります。初回にオリジンサーバから取得したあと、2回目以降のアクセスはキャッシュサーバから直接配信され、オリジンサーバへのアクセスは発生しません。この状態を、「オリジンサーバのコンテンツをキャッシュサーバがキャッシュしている」と言います。「キャッシュ」という言葉は比較的耳慣れているかもしれませんが、CDNにおいてはオリジンサーバからデータを取得してキャッシュで持っている状態を指して「キャッシュしている」と言います。

「キャッシュ」という言葉については「キャッシュクリアしたらスマホの動作が軽くなった」「ブラウザのキャッシュを削除したら誤動作が直った」といった経験からなんとなく「キャッシュ=悪。削除するもの。削除すると動作が軽くなる」というイメージがあるかもしれません。しかし本来キャッシュとは複雑なデータベースリクエストなどで生成された完成品を一時的に置いておくもので、いわばカレー屋さんでカツカレーのカツを予め揚げておくようなものです。とんかつを揚げるのには7分程度かかりますが、作り置きしておけばカレーをかけるだけで出来上がるので高速でカツカレーを提供できます。

話が逸れましたが、オリジンサーバへアクセスが来ないということがCDNの重要なポイントです。このままキャッシュしていてくれればオリジンサーバの負荷がなくなる!と喜ばれるかもしれませんがちょっと待ってください。取りに来ないということはオリジンサーバのデータを更新しても反映されないことになります。もちろん、勝手にキャッシュサーバのデータが更新されるなんてこともありません。間違ったデータをアップロードしてキャッシュされた場合、間違ったデータが配信され続けることになります。

もし個人情報が掲載されたページがキャッシュされ、他の関係ない人に配信されたらどうなるでしょう?個人情報の漏洩となります。キャッシュ事故による個人情報や秘匿情報の意図しない曝露については、別の回で掲載予定です。

キャッシュ時間という考え方

オリジンサーバの代わりにキャッシュサーバがデータを「キャッシュ」してくれるという概念は上でご説明しました。さらに掘り下げて、「キャッシュ時間」という考え方をご紹介します。CDNを利用する上で、非常に重要な要素となります。

あるデータのキャッシュ時間を30秒と設定すると、初回アクセス時にキャッシュサーバがオリジンサーバからデータを取得してから30秒間はキャッシュサーバからデータを配信し、31秒後以降にアクセスがあった場合、再度オリジンサーバへデータを取得にいきます。この時、オリジンサーバ上のデータが更新されていてもされていなくても取りにいき、新しいデータをまた30秒間キャッシュします。

これがキャッシュ時間という考え方です。30秒間はオリジンサーバへのアクセスが発生しないので、負荷が回避されていることになります。例えば、秒間数億リクエストといったモンスター級のサイトであったとしても、キャッシュサーバが適切に処理していればオリジンサーバの負荷は30秒間に1リクエスト(実際は単一ファイルではないのでこううまくいきませんがあくまでイメージです)にすることができるわけです。


キャッシュサーバにファイルが見つかった場合、この図のようにオリジンサーバへはアクセスがいきません。キャッシュサーバではファイルのキャッシュ時間を管理しており、キャッシュ時間が過ぎると再度最初の図のようにオリジンサーバまでファイルを取りにいき、またキャッシュ時間分はCDNから直接配信するという流れを繰り返します。

カレー屋さんでも、とんかつの揚げ置きは時間が決められており指定時間を過ぎると廃棄(実際には廃棄にならないように揚げ置き残数をコントロールしますが)となります。キャッシュ時間とはこの揚げたものを置いておいていい時間と考えるとわかりやすいかもしれません。指定時間を過ぎて使用できなくなった場合、7分かけてとんかつを揚げる必要があるためカツカレーの提供時間は遅れることになります。

キャッシュ対象ファイルについて

CDNではキャッシュ時間と共に、キャッシュ対象ファイルを明確にしておく必要があります。WebサイトでのCDNの利用方法としては一部のファイルをサブドメイン配下に置いて、そのサブドメイン配下全体をキャッシュするやり方と、サイトのURLを丸ごとCDN経由にしてしまい、ファイル単位でキャッシュする/しないを決めるやり方があります。

前者の場合は主に画像や動画など、データ量の多いファイルだけをキャッシュする場合に用いられます。ファイル転送量は削減できますが、根本的なサーバへの負荷をへらすことはできません。後者は理論的には全てのファイルをキャッシュできますが、適切にキャッシュ対象ファイルを選定しないとキャッシュ事故が起きます。

カレー屋さんの場合、とんかつは揚げ置きしていてもご飯まで皿に盛って置いているところはあまり無いと思います。ご飯は炊飯器からお皿に盛るのにそこまで時間がかからないですし、大盛り、中盛り、普通盛りなどニーズが細かくキャッシュするメリットが無いからと言えます。

キャッシュ対象についてはまた別の回でじっくりご説明しますが、今の時点ではキャッシュ対象にする/しないが設定できて、これをきちんと考慮しないと大変なことになるとおぼえておきましょう。

CDNという仕組みの全体像

さて、連載第1回はCDNの全体像を知っていただくということで、

  • 実は身近なCDN
  • 切っても切れないCDNとDNS
  • オリジンサーバとキャッシュサーバの関係
  • キャッシュする、キャッシュ時間、キャッシュ対象ファイルという概念

についてご説明しました。
この段階では、何となくデータを代わりに配信してくれる便利なサーバがあるのだな、利用するにはDNSの設定が必要なのだな、キャッシュ時間っていうのを設定しないとだめなんだなぐらいの理解で構いません。

次回は、CDNを利用することのメリットやデメリット、非常に大事なキャッシュしていいファイル、ダメなファイルのご紹介をしていきたいと思います。