今日はCDN、とくに各所でおすすめしているCLoudFlareの特殊性について書いてみたいと思います。CDNとは、広い意味で言えば、データをいち早くお届けする仕組みです。
有名どころだと天下のAkamai、最近話題のAmazon CloudFront、ほかにもLimelight Networksなどがありますが、ごくごくシンプルな仕組みを書くと、その動作は2つのセクションに別れています。
名前解決時に最適なサーバを代返する
さて、ホームページ上のとある画像を取得したい!となったときのブラウザの流れは次のようなものです。
- http://example.com/ero.jpg [Click]
- example.comのネームサーバを探す為、comドメインのネームサーバに問い合わせる
- ns.example.comですよー等と帰ってくる
- example.comのネームサーバにアクセスし、example.comのIPを問い合わせる
- 210.169.280.10 ですよーなどと帰ってくる
- 210.169.280.10の80番ポートにこんにちはこんにちはする
- ero.jpg頂戴
- やる
- うまー
ここで、CDNさんは、ネームサーバのお返事方法を変えることにより、本来のアドレス(210.169.280.10)ではなく、自社サーバのIPを返すようにする役割が有ります。
さらに、たいていの場合は、アクセス元IPに一番近いCDNサーバのIPを返す仕組みがついています。
その仕組みはだいたいCNAMEを使います。
- (ブラウザ)ero.example.comのIP頂戴
- (DNSサーバ)それ、実体は cdn.user512476.ero.cdncompany.com なんだよ! とかえす
- (ブラウザ)cdn.user512476.ero.cdncompany.comのIP頂戴
- (DNSサーバ)あなた日本だから東京のサーバ201.234.567.89にアクセスすると良いよ!
の様な仕組みで、本来のドメインをCNAMEでCDN会社のドメインに転送するような感じのことをします。
アクセスをキャッシュサーバで受ける
CDNで自社サーバを案内したら、そのアクセスはいったんCDN会社のサーバにやってきます。初回アクセス時は何もコンテンツがないので、元々のサイトから、そのデータを取得し、ブラウザに返します。
2回目以降は、自分自身から返すので、元データのサーバが米国に有ったとしても、CDNサーバが東京に有れば海をまたがずデータをブラウザに返せるので高速というわけですね。
CloudFlareの変わった?ところ
そういったCNAMEでの対応が多い気がするんですが、CloudFlareはネームサーバを丸ごと預ける必要が有ります。なので、
- (ブラウザ)ero.example.comのIP頂戴
- (DNSサーバ)あなた日本だから東京のサーバ201.234.567.89にアクセスすると良いよ!
という2ステップで完結してしまうことと、CNAMEで取り扱えないwww無しドメイン(http://ku-suke.jp/とか)にも対応できることが強みです。逆に、そのドメイン名で複数のサービスを運営している場合は、CloudFlare社のネームサーバの生き死にで最悪全てのサービスが吹っ飛んでしまうので、なかなか勇気がいるということになります。
なので、このドメインはこのサイトしか運営していないよ!という人にオススメなのがCloudFlareで、そうでも無い人は、無料のはほぼ有りませんが、CNAME形式のCDNをつかって、配信画像やJS等を高速化するのがよいと思いました。