今回はCDNを使うとナゼWEBサイトの高速化ができるのか?というお話をしたいと思います。正しい理解をしていないと逆効果になる恐れもあるためポイントをしっかり押さえておきましょう。
高速化=CDN 解説
新規サイトを立ち上げ、だれもアクセスしていない状態のページ表示速度が仮に2秒かかるとします。この状態で、CDNを導入してページ表示速度が1秒になったり0.5秒になったりすることは恐らくほとんどのケースであり得ません。ではナゼCDNは高速化できると言われているのでしょうか。
CDNの仕組み
CDNはアナタのWEBサーバーの代わりに、静的コンテンツ(jpegやzip等)を配信するサービスです。そのため、ファイルを配信するという負荷がかかる作業をCDNサービスで肩代わりします。
オリジンサーバー(サイト)の配信作業がCDNによって削減→サイトの負荷が減る→高速化される
技術的な根拠は色々ありますが、ざっくり説明するとこういう感じです。
CDNは確かにWEBサイトを高速化する一つの手法ですが、これはある一定の条件がそろって初めて高速化出来たと実感出来るサービスです。ではどのようなケースで高速化が出来た!と実感できるのか、おおきく分けて2つのケースがあります。
ケース1 同時アクセス時の負荷軽減
まずはサイトに複数人が同時アクセスした際の負荷を軽減するケースです。少し具体的な数字に当てはめてみます。
前提条件
負荷がかかっていないサーバーを「負荷0」とする
一人WEBサイトにアクセスするとサーバーの負荷は1上昇する
負荷の許容量は100とする ※つまり最大100人しか同時アクセスが出来ない
CDNを利用すると負荷が-50される
1:150人が同時にWEBサイトにアクセスしてきました。
2:WEBサイトの負荷は最大許容量100を超え150になりました。
※この状態は50人分の負荷がオーバーしており、WEBサイトを表示させるための待ち行列状態が発生しサイト表示までの時間が延びているよろしくない状況。
3:ここでCDNを利用し、WEBサイトの負荷を軽減させ150-50=100になりました。
※先ほどの50人の待ち時間は無くなりアクセス数が許容範囲内に収り100人全員スムーズなサイト閲覧が可能となりました。
こちらの例は、サーバーやネットワーク帯域の上限以上にアクセスが発生し、待ち状態となりWEBサイトの表示が本来より遅くなっている状況をCDNで緩和させるという例です。
サーバースペックの問題で横並びにコンテンツサーバーを増やせないケースや、単純にネットワーク回線不足を補う用途でも利用されます。
逆に、サーバーやネットワークの許容範囲内のアクセスの場合、CDNを利用すると中継するポイントが増えるため厳密に言うとページスピードは若干遅くなるもしくは変化がない場合があります。
ケース2 動的コンテンツの負荷軽減
ケース2ではケース1とは少々意味合いが異なる、動的コンテンツ※1をキャッシュして高速化を図る方法です。
動的コンテンツとは
動的コンテンツとは以下の例のように、アクセスする度に異なるコンテンツを返答することを指します。
例
・アクセスする度にランダムに画像を表示させる。
・AmazonのようにブラウザのCookieを見てオススメ商品一覧を表示させる。
・アクセスした瞬間に現在の降水量を計算し表示させる。
例えば弊社が運営している無料のCDNサービスcdnTokyoでは、URLを変更するだけで大きな画像を任意のサイズに動的リサイズできる機能があります。
こちらも動的コンテンツを扱うサイトといえます。
画像リサイズ機能はアクセスする度にサーバー側で毎回リサイズ処理を行う為、大変負荷がかかる作業で、正直処理は遅いです。毎回アクセスされる度に遅いリサイズ処理を行うのはとてもよろしくないですね。
そこで1度リサイズされた画像をCDNでキャッシュ(コピー)し、次回以降のアクセス時はキャッシュされた画像を返すような運用をしています。これにより既にリサイズされた画像は再リサイズするという作業が削減される、つまり動的コンテンツが静的コンテンツになるため、大変高速に配信できると同時にサーバー側の負荷も削減出来ます。
動的コンテンツを扱うシステム
動的コンテンツを扱う代表的なシステムは、他にもECサイトやCMSなどがあります。
wordpressが重いといわれているのは動的コンテンツとして構成されており、ランディングページのようにHTML・CSSなどの静的コンテンツだけで構成されているワケではないことが理由の一つです。
動的コンテンツはサーバー側で何かしらの処理をしてから、ブラウザに結果を返すようなコンテンツです。
DBやPHPキャッシュ、プロセスのメモリ容量やハードウェア増設などでも勿論高速化出来ますが、動的コンテンツを高速化させるための基本はあくまで、「静的コンテンツ配信に近づける」ということを覚えておいて下さい。
画像1つを読み出す場合、毎回DBに問い合わせをするようなCMSはDBに問い合わせるという作業自体がページレスポンスを低下させている要因となるため、次回以降DBに問い合わせを行わないようCDNでキャッシュし静的コンテンツにして高速化を図るという手法がよく利用されます。
※1
静的コンテンツとは、アクセスしても常に同じコンテンツを返す(画像やhtml等)
動的コンテンツとは、アクセスする度に結果が異なるコンテンツを返す(アクセスするとアクセスした現在の時間が表示されるPHPなど)
まとめ
今回はCDNを使うとナゼ高速化出来る!と言われているのか、簡単にご紹介しました。それほどアクセスがなくサーバーやネットワークの許容範囲内で収っていれば、わざわざCDNを導入する理由はあまりないと思います。(CDNベンダーの弊社が言うのも変ですが・・
逆に、ある一定のアクセスがあり静的コンテンツ以外にも動的コンテンツも扱っているサイトはCDNを利用する事によりアクセス数の波に左右されない、安定したサイト運営が期待できます。