Umi Blog
ウミブログ
こんにちは。
突然ですが、スマートフォンやPCでネットサーフィンしている時にストレスを感じることは何でしょうか。
種々あるかと思いますが、「ページの読み込み速度が遅い」が1つに挙げられると思います。
では、ページの読み込み速度の改善のアプローチとして何が考えられるでしょうか。
例えば、次のことが挙げられると思います。
上記で挙げた4と5に関しては、CDN(Content Delivery Network)を利用することで対応することができます。
前置きが長くなりましたが、この記事ではDrupalサイトへのCDNサービスの導入について、簡単に紹介させていただきたいと思います。
CDNを利用することで次のことが期待できると思います。
上記についてイメージしやすいように、図等を用いて説明したいと思います。
閲覧者がWebブラウザからサイトのURLにアクセスした場合、オリジンサーバーにリクエストが集中し、リクエストに対して処理をしてレスポンスする必要があります。仮にロードバランサー等で負荷分散をしていても、オリジンサーバーがすべてのリクエストに対して処理しなければならない状況は変わりません。
結果、オリジンサーバーに負荷がかかり、レスポンスが遅延し、閲覧者からは「ページ読み込みに時間がかかる」と思われてしまいます。 大規模でアクセスの多い人気サイトの場合だと負荷がかかりすぎてサーバーダウンしてしまうリスクがあります。
CDNを利用する場合は、オリジンサーバーに閲覧者のすべてのリクエストが行くのではなく、中間にあるキャッシュサーバーが代行する形になります。
キャッシュサーバーは、リクエストされたコンテンツをキャッシュしている場合は、そのページのコンテンツを配信します。したがって、リクエストされたページがキャッシュされていれば、オリジンサーバーへのアクセスは発生しません。
一方で、キャッシュサーバーにキャッシュが存在しないコンテンツのリクエストがあった場合は、オリジンサーバーから取得します。基本的に、1回オリジンサーバーから取得したデータはキャッシュサーバーでキャッシュされます。(意図的にキャッシュさせないコンテンツ等も設定できます)
また、コンテンツを配信するキャッシュサーバーは閲覧者に最も近いPOP(Point of Presence)が選択されるため、素早い通信が期待できます。
キャッシュサーバーにキャッシュがある場合、ない場合の振る舞いは、下記の画像のようになります。
キャッシュサーバーのおかげで、オリジンサーバーへの負荷軽減、コンテンツ配信速度向上が見込めますが、問題がない訳ではありません。
例えば、Webサイトのコンテンツを更新したけども、コンテンツ配信はキャッシュサーバーが行なっているので、更新内容が閲覧者まで渡らないという場合があります。 この場合は、パージ(キャッシュサーバー上にあるキャッシュを破棄)する必要があります。
CDNサービスを利用する上で、この点は事前に留意しておく必要があります。
CDNサービスはFastly、Cloudflareなど種々あります。DrupalではこれらのCDNと連携するためのコントリビュートモジュールが提供されています。
コントリビュートモジュールを利用して、連携・コンテンツ更新時のパージなどを実施する流れになります。Drupalではこういったモジュールが無償で提供されており、CDNの導入・連携も比較的容易かと思います。
利用する場合は、次のようなことを事前に考えなければなりません。
Cache-Control: s-maxage=0, max-age=0, no-cache, privateがある場合などキャッシュする・しない、残存時間の指定はレスポンスヘッダー、またはCDNサービスが提供している管理画面から設定が可能です。
何れにせよ、自身が管理しやすい手段を選ぶのが良いかと思います。
小さなご意見も、私たちにとっては大きなヒントです!
ぜひ率直なご感想をお寄せください
この

Masters of Drupal Engineering.
人に、