前回はCDN(Content Delivery Network)の概要についてお伝えしました。自分のサーバの負荷が減る、キャッシュ時間というものがある、DNSの設定が必要といったあたりをおぼろげにご理解いただけていれば大丈夫です。

第2回の今回は、CDNを導入するメリット、デメリットをご紹介していきます。前回、キャッシュファイルについても第2回でご紹介としておりましたが記事が長くなったため、キャッシュファイルについては次回とさせていただきます。

CDNを利用するメリット

CDNを利用するメリットについては第1回でご紹介したとおり、オリジンサーバ(自分のサーバですね)の負荷を下げられるという点が最大のメリットです。適切に設定すれば、月額515円のさくらのレンタルサーバをオリジンサーバにして、さくらのウェブアクセラレータをCDNとして利用することで非常に多くのトラフィックを処理することが可能です。

前回はオリジンサーバの負荷低減を主にご紹介しましたが、もちろん他にも注目すべきメリットがいくつかあります。

サーバの負荷低減の話をする前に、ざっくりとウェブサイトを公開する上でのボトルネックを知っておく必要があります。サーバ側の負荷、ネットワーク負荷など色々あります。2018年のWordCampOsakaでお話させていただいた際のスライドがありますので、こちらも合わせてご覧ください。
レンサバを落とさないお付き合いの方法@WordCamp大阪2018 – Speaker Deck

ウェブサイトのボトルネックは様々で、ウェブ制作者でもコントロールできる部分から、サーバの設定やネットワーク帯域、サーバのCPUやメモリといった一般ユーザが手を出せない部分まで多岐にわたっています。その中でもCDNを利用することでボトルネックを無くせる部分をご紹介していきます。

帯域制限を気にしなくていい

さくらのVPSやさくらのレンタルサーバでは、お客様に共有100Mbpsの回線をご提供しています。これは理論的には100Mbps以上のトラフィックは流せないことになりますので、アクセスが集中して帯域を圧迫するとタイムアウトが発生してウェブサイトが閲覧できなくなるリスクがあります。CDNを利用するとこの帯域制限を気にしなくてよくなります。さくらのウェブアクセラレータでは特に帯域制限は行っておりません。

※CDNの種類によっては料金プランなどで帯域が制限されているものもありますのでご注意ください。

サーバのCPU負荷を低減できる

WordPressなど動的サイトを生成するCMSにありがちなのですが、データベースリクエストやPHPの処理が非常に高負荷でCPUの負荷が高くなる傾向があります。こうなると、アクセスが殺到した際に共用レンタルサーバだとPHPプログラムの同時実行数制限、VPSなどであればリソース制限に引っかかってService Temporarily Unavailable(503)エラーやゲートウェイタイムアウトなどのエラーが発生する原因となります。

負荷を下げるにはPHPにより生成されるページのHTMLをキャッシュする必要があります。これによりサーバのCPU負荷を格段に下げることができます。WordPressサイトは非常にCPU負荷が高く、プラグインやテーマによってさらに高負荷となりエラーが出やすくなるため、CDNでキャッシュするメリットが非常に高くなります。

もちろん、WP Super CacheなどのキャッシュプラグインもCPU負荷の低減に効果的ではありますが、プラグインの場合はあくまで同じサーバ内で処理することになり、CDNでキャッシュ配信するよりは負荷に対して弱くなります。もちろん、転送容量やネットワーク帯域もサーバのプランに準じたものになります。キャッシュプラグインはお手軽ですが効果も限定的となるため、まずはプラグインで試してみて、ダメならCDNを使ってみるのもよいでしょう。

転送容量を気にしなくていい

レンタルサーバなどでは月間転送容量、1日の転送容量などが決まっているものが一般的です。動画や大きな画像などを多用しているサイトではこれがボトルネックになることにより費用の高いサーバを借りている方もいらっしゃるかと思います。

第1回でお話したとおり、CDNを利用することはオリジンサーバからの転送をなくすことになりますので、キャッシュファイルの配信はオリジンサーバの転送容量カウント対象外になります。これは、今までよりも安いプランに変更することができることを意味しています。もちろん、キャッシュ配信にもお金がかかりますので、事前のシミュレーションは必要です。

また、クラウドコンピューティングサービスではインスタンスからの転送容量に従量で課金される場合もあります。こういった場合もCDNを利用することでこの転送容量を削減することが出来るようになります。もちろん、インスタンスからの転送にかかる費用と、CDNからの転送にかかる費用を比較することは必要です。

メリットを簡単にまとめましたが、安価なレンタルサーバを借りている方から、クラウドコンピューティングサービスを利用している方まで、幅広くメリットがあることがご理解いただけたかと思います。

CDNのデメリット

ここまではCDNのメリットについて触れてきましたが、便利なサービスにはもちろんデメリットが存在します。CDNを利用する上でデメリットを把握することは非常に重要なことですので、是非ともご一読ください。

キャッシュ事故のリスクが生まれる

CDNを利用せずに自サーバ内でキャッシュをしている場合も同様ですが、個人情報が表示されたページをキャッシュしてしまいそのページが他人に表示されるというキャッシュの誤表示、誤キャッシュの事故は継続的に発生しています。こういった事故はキャッシュ配信が無ければ生まれないものです。CDN利用の際はキャッシュ対象ファイルの選別を慎重に行う必要があります。本連載でも次回第3回でキャッシュ対象ファイルの選び方などをご紹介する予定です。

キャッシュ事故とはこのような流れで発生します。まずは自分の個人情報を見ようとしてサイトへアクセスしたAさん。会員ページがキャッシュされる設定だったためCDNにAさんの会員ページのHTMLがキャッシュされます。Aさんは正しく自分の情報が見えているので気づきません。

次に、同じページを閲覧しようとしたBさん。キャッシュする設定だったためCDNはAさん用の会員ページをそのままBさんへ返してしまいます。BさんはAさんの会員ページを見てしまうことになり個人情報が意図しない人に見えてしまいます。キャッシュするファイルを選ぶことは非常に大切です。

キャッシュ時間中はファイル更新が反映されない

第1回でCDNにはキャッシュ時間というものが存在し、キャッシュ時間中はキャッシュサーバからデータが配信されるためオリジンサーバのファイルを更新しても修正が反映されないという点をご紹介しました。

もう少し具体的に説明すると、例えばECサイトでCDNを利用していて、新しい商品を登録した時に画像内に「激安!3,980円!」とするべきところを、「激安!398円!」にして画像をアップしてしまったとします。

キャッシュ時間が3600秒に設定されていた場合、何もしなければアップロードしてキャッシュされてから1時間は修正しても反映されない時間ができてしまいます。今回のように価格を間違って安く表示してしまった場合などには大きな問題となります。

キャッシュ削除の反映に時間がかかる場合がある

前項の続きになりますが、間違ったファイルがキャッシュされてしまった場合、内容によっては非常に大きな問題となります。そのようなときのために多くのCDNではキャッシュの削除機能を備えています。API経由で削除できるもの、ウェブの管理画面から削除できるものなど様々なものがあり、WordPressで画像を修正するとAPI経由でキャッシュを自動的に削除するといった機能を備えたWordPressプラグインもあったりします。

キャッシュ削除で注意したいのは、ものによってはキャッシュサーバからファイルを削除するのに時間がかかる場合があるという点です。大規模CDNサービスになると利用しているキャッシュサーバの量もかなりの数になるため、削除まで時間がかかることがあります。キャッシュ削除機能はあくまでも一つの手段であり、キャッシュ時間を調整する、キャッシュ対象ファイルを選定するなどでキャッシュが消えない場合も対応できるようにしておきましょう。

障害点が増える

今まで運用していたサイトでコンテンツ配信にCDNを利用する場合、単純にそのCDNが障害でダウンするとサイトの一部もしくは全てのコンテンツが表示されないリスクが増えます。もちろん、CDN事業者はこういったことがないように複数サーバ複数拠点など可用性を高めていますが、CDNを利用することでリスクが1つ増えるということは覚えておきましょう。

また、配信拠点の追加は障害発生時に原因切り分けを難しくすることにもなります。事前に検証環境でCDNダウン時をシミュレーションしてみるなど、いざという時に対応できる体制やマニュアルを作っておくことも重要です。

アクセスログが取れない

CDN事業者によりますが、これまでUrchinなどのログ解析型アクセス解析ツールを利用していた場合、ログが取得できずにアクセス解析ができなくなる可能性があります。最近はGoogleAnalyticsをはじめとしたJavaScriptによるビーコン型の解析ツールが主流となっているためあまり気にしなくても大丈夫ですが、ログが必要な方は注意する必要があります。ログのダウンロードサービスを提供しているCDN事業者もあります。

キャッシュしない場合は効率が悪くなる

CNAMEを利用して全アクセスをキャッシュサーバ経由とするCDNの利用方法は全ファイルキャッシュが出来る反面、全部のアクセスがCDNを通過することになりキャッシュしていなくてもトラフィック課金対象となる場合があります。また、全ファイルをキャッシュしない場合は直接オリジンサーバへアクセスするときよりも間に挟む経路が増えてしまうためパフォーマンスが多少ですが悪化する可能性もあります。

最初から全ファイルキャッシュを利用しないことがはっきりしていれば、 image.example.jp のようなサブドメインで必要なファイルだけキャッシュ配信する方式を利用した方が費用圧縮に繋がります。

まとめ

今回はCDNのメリットとデメリットをご紹介しました。コンテンツを配信するサーバ自体をアウトソースするということで、耳慣れないことが多かったかもしれません。CDNはアクセススパイクや大規模アクセスを高効率に処理してもらう代わりにお金を払うサービスですので、追加サーバ代を払ってその稼働に見合ったお金を払う必要があると考えるとわかりやすくなるかもしれません。

次回はCDNを利用する上でとても大事なキャッシュ対象ファイルの選び方をご紹介します。