みなさまのサイトではCDNを使われていますでしょうか。CDNとはコンテンツ・デリバリー・ネットワークの略です。
有名どころでは、AkamaiやCloudflareやAWSのCloudFrontなどがあります。以下のようなロゴを見たことはありますか?
![](/html/upload/save_image/0723145526_669f45ce4c07e.png)
CDNとは、世界各地にサーバを置いていて、そのサーバに契約したサイトのコンテンツのキャッシュを保持してくれます。例えば、東京のサーバでECサイトを動かしていた場合、ニューヨークからアクセスするとレイテンシがあってアクセスが遅くなります。ですが、ニューヨークにキャッシュされたコンテンツが存在する場合、そのキャッシュサーバーからコンテンツを取得することで、レイテンシが低減され、快適に閲覧できます。CDNを利用する際には、DNS上ではAレコードではなくCNAMEレコードで指定し、CDNのDNSがユーザに最も近いキャッシュサーバにアクセスを誘導するようにコントロールされます。
・・と、ここまで読んで、ウチにはニューヨークのお客はいないから関係ないと思われるかもしれませんが、国内アクセスしかなくてもCDNを導入するメリットは結構多いのです。今回はそのあたりを紹介したいと思います。
メリットの1つはWEBサーバの負荷を軽減できるということです。ECサイトで1つのページを閲覧する際に、WEBサーバはphpを動かして1つのhtmlドキュメントを返しているだけではありません。cssやjsや数多くの画像ファイルなど、100個以上のファイルをリクエストすることも珍しくないと思います。その際、WEBサーバ上ではapacheが100個のファイルをユーザーに対して送っているわけです。ユーザー側でも、そのページにアクセスするたびに100個のファイルをダウンロードするのは時間の無駄なので、ユーザーのブラウザ側にcssやjsや画像ファイルなどキャッシュする仕組みがあり、2回目以降のアクセス時にはダウンロードするファイルは少なくなっています。それによってユーザーも快適になるのですが、サーバー側にも相当の負荷軽減効果があります。CDNは、そのようなキャッシュを、全国津々浦々にあるインターネットプロバイダーなどにおいてあるサーバにキャッシュします。そのため初めてサイトを訪問したユーザーも、オリジナルのサーバから100個のファイルをダウンロードするのではなく、ほとんどのファイルをCDNのキャッシュサーバ―からダウンロードすることになります。
ブラウザのキャッシュもあるのに、CDNが入ることによっていったいどれほど負荷軽減するのだろうかと思うかもしれませんが、実際運用してみるとびっくりするほど効果があります。CDNにはたいていキャッシュサーバ(エッジとも呼ぶ)へのリクエスト数と、キャッシュサーバからオリジナルサーバへのリクエスト数の統計情報を確認する機能がついています。あるサイトでは、95%はキャッシュから返していました。もちろん残りの5%はphpなどでデータベースなどにアクセスする必要があるリクエストなので、小さなpng画像1個を返すリクエストよりは負荷は重いので、単純に20分の1になったというわけではないのですが、相当にWEBサーバの負荷を減らすことができます。
それにより、WEBサーバ―の費用を軽減できるのですが、CDNにも費用がかかりますのでコストについては検討は必要です。ピーク時のアクセス数に合わせてWEBサーバを用意しようと思うとCPUを増やさないといけなくなります。CDNがあればピーク時のWEBサーバの負荷は抑えられます。逆に言えば、ピークもなく、リピーターがほどんどで、通常のアクセスもゆるやかな場合は、コストメリットはそれほど感じられないかもしれません。
しかし、CDNの利用をお勧めしたい理由はそれだけではありません。CDNにはWEBサーバへの直接の攻撃を緩和する効果もあります。オリジナルのWEBサーバの前にサービス用のサーバを置くという構成はWAF(WEBアプリケーションファイアーウォール)と同じでして、WAFにCDN機能がついているサービスや、CDNにWAFがついているサービスなどもあります。DoS攻撃などはいったんCDNが受け止めてくれますので、オリジナルのWEBサーバには負荷が少なかったりします。WAF機能もあれば、怪しいリクエストも事前に止めてもらえます。
その他にも、運用していて役に立つと思えることもあります。キャッシュサーバ―からオリジナルにどのようなリクエストが送られたのか、そしてそのレスポンスコードを見ることができます。この機能が便利がよいと感じます。404(Not Found)のエラーが返っているリクエストを見ると、ファビコンが置いてなかったということに気がついたり、あるいは他サイトのリンクがすでに存在しないページであるもののそれなりにアクセスがあってリダイレクトを設定したり、など、丁寧に見ていくと運用にも役立ちます。
いろいろなベンダーからCDNが提供されていますが、当社で使ったことがあるCDNを紹介します。
まずはAkamai。元祖CDNです。ややコストが高い印象ですが、UIも使いやすく、性能的にも老舗の信頼性があります。AkamaiはKonaというWAFも提供していて、合わせて使うとさらに強力です。赤米の粉って聞き間違えられますw
Amazon WEB ServiceにもCloudFrontというCDNがあります。AWSで完結させてしまいたい場合には、CloudFrontを選択するケースが多いです。AWSにもAWS WAFがあります。安全を考えて基本的にはセットで導入します。
CDNではなくWAFなのですが、Impervaも使ったことがあります。こちらはWAFの老舗ですね。同時に使えるCDNも提供しています。WAFはオリジナルのサーバの前にWAFのサーバをエッジとして配置するという方式上、CDNと使い勝手が似ており、WAFと同時にCDNもサービスとして提供しているケースもよく目にします。
当社は使ってみたことはないのですが、AzureやGoogleにもCDNはあります。CDNの老舗としてはCloudflareも有名どころです。
次の記事ではCroudFrontの実際の利用法について紹介してみたいと思います。