ku-sukeのブログ

Just another hatena blog

共用サーバへの回帰その3:CDNとは&CloudFlareの特殊性

 今日はCDN、とくに各所でおすすめしているCLoudFlareの特殊性について書いてみたいと思います。CDNとは、広い意味で言えば、データをいち早くお届けする仕組みです。

有名どころだと天下のAkamai、最近話題のAmazon CloudFront、ほかにもLimelight Networksなどがありますが、ごくごくシンプルな仕組みを書くと、その動作は2つのセクションに別れています。

名前解決時に最適なサーバを代返する

 さて、ホームページ上のとある画像を取得したい!となったときのブラウザの流れは次のようなものです。

  1. http://example.com/ero.jpg [Click]
  2. example.comのネームサーバを探す為、comドメインのネームサーバに問い合わせる
  3. example.comのネームサーバにアクセスし、example.comのIPを問い合わせる
    • 210.169.280.10 ですよーなどと帰ってくる
  4. 210.169.280.10の80番ポートにこんにちはこんにちはする
  5. ero.jpg頂戴
  6. やる
  7. うまー

ここで、CDNさんは、ネームサーバのお返事方法を変えることにより、本来のアドレス(210.169.280.10)ではなく、自社サーバのIPを返すようにする役割が有ります。
さらに、たいていの場合は、アクセス元IPに一番近いCDNサーバのIPを返す仕組みがついています。

その仕組みはだいたいCNAMEを使います。

  1. (ブラウザ)ero.example.comのIP頂戴
  2. DNSサーバ)それ、実体は cdn.user512476.ero.cdncompany.com なんだよ! とかえす
  3. (ブラウザ)cdn.user512476.ero.cdncompany.comのIP頂戴
  4. DNSサーバ)あなた日本だから東京のサーバ201.234.567.89にアクセスすると良いよ!

の様な仕組みで、本来のドメインをCNAMEでCDN会社のドメインに転送するような感じのことをします。

アクセスをキャッシュサーバで受ける

CDNで自社サーバを案内したら、そのアクセスはいったんCDN会社のサーバにやってきます。初回アクセス時は何もコンテンツがないので、元々のサイトから、そのデータを取得し、ブラウザに返します。
 2回目以降は、自分自身から返すので、元データのサーバが米国に有ったとしても、CDNサーバが東京に有れば海をまたがずデータをブラウザに返せるので高速というわけですね。

CloudFlareの変わった?ところ

そういったCNAMEでの対応が多い気がするんですが、CloudFlareはネームサーバを丸ごと預ける必要が有ります。なので、

  1. (ブラウザ)ero.example.comのIP頂戴
  2. DNSサーバ)あなた日本だから東京のサーバ201.234.567.89にアクセスすると良いよ!

という2ステップで完結してしまうことと、CNAMEで取り扱えないwww無しドメイン(http://ku-suke.jp/とか)にも対応できることが強みです。逆に、そのドメイン名で複数のサービスを運営している場合は、CloudFlare社のネームサーバの生き死にで最悪全てのサービスが吹っ飛んでしまうので、なかなか勇気がいるということになります。

なので、このドメインはこのサイトしか運営していないよ!という人にオススメなのがCloudFlareで、そうでも無い人は、無料のはほぼ有りませんが、CNAME形式のCDNをつかって、配信画像やJS等を高速化するのがよいと思いました。