前回(第1回)はCDNで何が出来てどういうメリットがあるのか?という部分にフォーカスしてご案内しました。
第2回となる今回は、CDNにはどんな種類があるのかをご紹介したいとおもいます。

CDNの種類

プッシュ型

プッシュ型というのは、負荷分散する対象のファイルをCDNベンダーのサーバーにFTPもしくはWEBコンソール経由でアップロードして利用する方法です。弊社でもオリジンつきCDNというのがこちらに相当します。
また、CDNベンダーが用意しているVOD(オンデマンド)ストリーミングサービスなどを利用する際にも、ストリーミング対象のMP4をアップロードする必要がありますので、だいたいこちらのCDNです。

 

cdn-push

メリット

既にサイトとは別にファイル配信専用のサーバーがある、もしくはファイル配信に別ドメイン名を使って分けている場合は、今までと同様ファイルをアップロードするだけのシンプルな運用が可能です。
CDNベンダーにファイルを預けることで、冗長構成がとれた場所にファイルを保管できるため、サーバーの障害やチューニングを気にする必要がありません。

デメリット

配信するファイルがサイトと同じドメイン名もしくは相対パスで指定されてる場合は、ファイル配信用に別ドメインを用意しさらにサイト内のパスを新しいドメインに書き換える手間が発生します。


 

プル型

CDNのメリットの中に、既存のサーバーに変更を加えず簡単に負荷分散できるというお話がありました。こちらに相当するのがプル型CDNです。Amazon CloudfrontなどもこちらのCDNとなります。

初回アクセス

 

cdn-pull1

プル型CDNはキャッシュサーバーと呼ばれるサーバー達が予め指定されたサーバー(オリジン)からファイルを取得し自分の中に一定時間コピーを保存します。

2回目以降のアクセス

cdn-pull2

キャッシュサーバー内にコピーがある場合はそのコピーしたファイルをユーザーに配信します。そのため、元サーバー(オリジン)にアクセスがくることはありません。この仕組みでオリジンサーバーの負荷が軽減されるというわけです。

メリット

ドメイン名を書き換える必要が無ければ、ファイルをアップロードし直す必要もありません。今あるサーバーを負荷分散できます。
動的コンテンツの負荷分散も対応している、たとえばクエリーストリングによって画像を動的にリサイズする弊社cdn Tokyoのようなことを、オリジンでしてる場合PULL型CDNしか負荷分散は出来ません。

デメリット

まずは、HTTPヘッダとお友達にならないといけない。
さらに、キャッシュ技術そのものの概念を理解する必要あり。
オリジンサーバーがダウンした場合の対策を行わなければいけない。

Pull型CDNで注意すべき点

さて、Pull型CDNは提供ベンダーによって様々なデフォルト条件があります。このデフォルト条件をきっちり理解しておく必要があります。

キャッシュ条件

どのような条件の時にコンテンツのコピーをオリジンサーバーから取得しにいくのか、ということです。
一般的にはクエリー別、パス別、Cookie別、ユーザーエージェント別など色々ありますが、判定する値が多ければ多いほどオリジンサーバーにアクセスが集中するため適度なチューニングが必要です。
弊社では、シンプルなダウンロード配信の場合リクエストヘッダ内のCookieやクエリストリングを削除してキャッシュするようにしています。この場合一番シンプルな運用となりキャッシュヒット率が向上します。

HTTP Method

RequestMethodDesignator

どのようなメソッドの時にコンテンツをキャッシュするのかしないのか、ということも各CDNベンダーにより動作が異なります。CDNはコンテンツダウンロード時の負荷分散を行うことがほとんどですので、弊社も含め大体のCDNベンダーはGETとHEADのみキャッシュ対象メソッドにしています。では、それ以外のメソッド(例えばWEBフォームなどで使われるPUT等)が来た場合はどうなるのでしょうか。

PASS動作

cdn-method-pass

キャッシュ対象でないメソッドが来た場合は、CDN側は何もせずそのままオリジンサーバーにリクエストをパスします。
そのため、キャッシュしてはいけないものは予めキャッシュしないで下さいね!というキャッシュコントロールヘッダーをオリジンサーバー側で設定する必要があります。

キャッシュ時間

CDNは大抵デフォルトのキャッシュ時間があります。弊社では最大24時間キャッシュしますが別途Cache Control headerが付与されている場合はその値に従います。CDNベンダーによっては管理画面で拡張子別・もしくはパス毎にキャッシュ時間を指定する事も出来ます。頻繁に更新されるコンテンツの場合はキャッシュ時間を短めにする、あまり変更がないコンテンツはキャッシュ時間を長めにするような時間調節も大切です。

 


 

番外編;P2P型CDN

CDNの種類にはPUSH型とPull型の他にP2PCDNがあります。P2Pという名前のとおり1対1で通信するCDNです。いろいろな技術がありますが一般的にはダウンロードしたユーザー自身がキャッシュサーバーに変身してしまうというものすごい仕組みです。

初回アクセス

cdn-p2p

Aさんがtest.jpgをダウンロードします。こちらは初回アクセスですので他のCDNと同様コンテンツを公開しているオリジンサーバーからダウンロードします。このとき、test.jpgのダウンロードが完了したAさんのブラウザやパソコンはキャッシュサーバーに変身します。

2回目以降のアクセス

cdn-p2p2

Bさんがtest.jpgをダウンロードします。ブラウザが既に同じファイルをダウンロードしている近くにいるユーザーがいないか確認し、Aさんの情報をBさんに送信、その後BさんはAさんが既にダウンロードしたtest.jpgをAさんからダウンロードします。
※もし誰もダウンロードしていないファイルだった場合は、Aさん同様オリジンサーバーからダウンロードされます。

P2PCDNとは

cdn-p2p3

つまり、P2PCDNを利用するとダウンロードしたユーザー自身がキャッシュサーバーになるんですね。P2P技術の特徴としては人気コンテンツであればあるほどユーザー間でファイルをダウンロードし合うため、ファイル配信元のネットワークコストが圧倒的に下がるということです。しかし、ファイル提供元が新しいファイルを公開した場合のキャッシュ削除をどうするかや、セキュリティの問題など課題がありますが、CMなどの動画配信では圧倒的なコストカットが可能です。
実はスタンフォード大学のメンバーがこのような技術を公開してプロジェクト化しています。PeerCDN
さらに最近では日本人が開発したミストCDNがあります。P2PCDNは今後のトレンドになってくるでしょう。

メリット

ユーザーは特殊な技術を理解することなく普通に利用できる。
特別なプラグインがいらない
コストが圧倒的にセーブできる可能性がある。

デメリット

WebRTC対応ブラウザでないと利用出来ないが、ほとんどのブラウザが対応してるはず。
提供側は今までの仕組みとは異なる運用になるためしっかり技術を理解しておかないといけない。

まとめ

今回はCDNの種類についていくつか代表的なものをピックアップしてみました。CDNにもいろいろな種類があり用途によって最適な形式を選ぶ必要があります。