CDNを使用して静的コンテンツの配信を高速化する方法

導入

現代のウェブサイトやアプリケーションは、しばしばエンドユーザーに大量の静的コンテンツを提供する必要があります。このコンテンツには、画像、スタイルシート、JavaScript、およびビデオが含まれます。これらの静的アセットが数やサイズで増えるにつれて、帯域使用量が増加し、ページの読み込み時間が長くなり、ユーザーの閲覧体験が損なわれ、サーバーの利用可能容量が減少します。

ページの読み込み時間を大幅に短縮し、パフォーマンスを向上させ、帯域幅とインフラストラクチャのコストを削減するためには、CDN、またはコンテンツデリバリーネットワークを導入して、これらのアセットを地理的に分散したサーバー群にキャッシュすることができます。このチュートリアルでは、CDNの概要と動作方法、およびウェブアプリケーションに提供できる利点について概説します。

CDNとは?

A content delivery network is a geographically distributed group of servers optimized to deliver static content to end users. This static content can be almost any sort of data, but CDNs are most commonly used to deliver web pages and their related files, streaming video and audio, and large software packages.

A CDN consists of multiple points of presence (PoPs) in various locations, each consisting of several edge servers that cache assets from your origin, or host server. When a user visits your website and requests static assets like images or JavaScript files, their requests are routed by the CDN to the nearest edge server, from which the content is served. If the edge server does not have the assets cached or the cached assets have expired, the CDN will fetch and cache the latest version from either another nearby CDN edge server or your origin servers. If the CDN edge does have a cache entry for your assets (which occurs the majority of the time if your website receives a moderate amount of traffic), it will return the cached copy to the end user.

これにより、地理的に分散したユーザーは、近くのエッジのキャッシュから直接コンテンツを取得する必要があるホップ数を最小限に抑えることができます。その結果、大幅にレイテンシとパケットロスが減少し、ページの読み込み時間が速くなり、オリジンインフラストラクチャへの負荷が大幅に軽減されます。

CDNプロバイダーはしばしば、追加費用でDDoS対策やレート制限、ユーザーアナリティクス、ストリーミングやモバイル利用ケース向けの最適化など、追加の機能を提供します。

CDNはどのように機能するのですか?

ユーザーがウェブサイトを訪れると、まずDNSサーバーからホストウェブサーバーのIPアドレスが含まれた応答を受け取ります。その後、ブラウザはウェブページのコンテンツをリクエストしますが、これにはHTMLページ、CSSスタイルシート、JavaScriptコード、および画像など、さまざまな静的ファイルが含まれることがよくあります。

CDNを展開し、これらの静的アセットをCDNサーバーにオフロードした後、ウェブサーバーに静的コンテンツへのリンクを書き換えて、これらのリンクがCDNによってホストされるファイルを指すように指示します。WordPressなどのCMSを使用している場合、このリンクの書き換えは、CDN Enablerなどのサードパーティプラグインを使用して実装できます。

多くのCDNは、カスタムドメインをサポートしており、CDNエンドポイントを指すドメインの下にCNAMEレコードを作成できます。 CDNは、このエンドポイントでユーザーのリクエストを受信すると(エッジに配置された、バックエンドサーバーよりもユーザーに近い場所にある)、その後、リクエストをユーザーに最も近い場所にあるポイント・オブ・プレゼンス(PoP)にルーティングします。このPoPは、通常、インターネットエクスチェンジポイント(IxP)に共有された1つ以上のCDNエッジサーバーから成り、インターネットサービスプロバイダー(ISP)がネットワークを相互接続するために使用するデータセンターです。 CDNの内部負荷分散装置は、その後、このPoPにあるエッジサーバーにリクエストをルーティングし、そのエッジサーバーがユーザーにコンテンツを提供します。

CDNプロバイダーによっては、キャッシュメカニズムが異なりますが、一般的には次のように機能します:

  1. CDNが静的アセット(例えば、PNG画像)の最初のリクエストを受信すると、そのアセットがキャッシュされておらず、近くのCDNエッジサーバーまたはオリジンサーバーからアセットのコピーを取得する必要があります。これはキャッシュの「ミス」として知られ、HTTP応答ヘッダーを検査して検出することができます。X-Cache: MISS。この最初のリクエストは、このリクエストを完了した後、アセットがエッジにキャッシュされているため、将来のリクエストよりも遅くなります。
  2. このアセットに対する将来のリクエスト(キャッシュ「ヒット」)は、このエッジロケーションにルーティングされ、通常はHTTPヘッダーを介して設定された有効期限までキャッシュから提供されます。これらの応答は、初回リクエストよりもかなり高速であり、ユーザーの待機時間を劇的に短縮し、WebトラフィックをCDNネットワークにオフロードします。CDNキャッシュから応答が提供されたことを確認するには、HTTP応答ヘッダーを検査してください。これには今や X-Cache: HIT が含まれるはずです。

特定のCDNがどのように機能し、実装されているかについて詳しくは、CDNプロバイダーのドキュメントを参照してください。

次のセクションでは、2つの人気のあるタイプのCDN、プッシュプルCDNを紹介します。

プッシュ対プルゾーン

ほとんどのCDNプロバイダーは、データをキャッシュする2つの方法、プルゾーンとプッシュゾーンを提供しています。

Pull Zonesは、オリジンサーバーのアドレスを入力し、CDNが自動的にサイトで利用可能なすべての静的リソースを取得してキャッシュすることを含みます。プルゾーンは、HTML、CSS、JavaScriptファイルなどの頻繁に更新される中~小規模のWebアセットを配信するために一般的に使用されます。CDNにオリジンサーバーのアドレスを提供した後、次のステップは通常、静的リソースへのリンクを書き換えて、それらがCDNによって提供されたURLを指すようにすることです。その時点から、CDNはユーザーの入力されたアセット要求を処理し、地理的に分散されたキャッシュおよび必要に応じてオリジンからコンテンツを提供します。

Push Zonesを使用するには、データを指定されたバケットやストレージ場所にアップロードし、CDNがその後、分散されたエッジサーバーのキャッシュにプッシュします。プッシュゾーンは、アーカイブ、ソフトウェアパッケージ、PDF、ビデオ、オーディオファイルなどの大容量であまり変更されないファイルに通常使用されます。

CDNを使用する利点

ほぼすべてのサイトがCDNを導入することで提供される利点を受けることができますが、一般的にその主な理由は、オリジンサーバーからの帯域幅をCDNサーバーに移し、地理的に分散されたユーザーのレイテンシを減らすことです。

以下では、CDNを使用することによってもたらされるこれらおよびその他の主要な利点について説明します。

オリジンオフロード

サーバーの帯域幅容量に限界が近づいている場合、画像、動画、CSS、JavaScriptファイルなどの静的アセットをオフロードすると、サーバーの帯域幅使用量が劇的に低減します。コンテンツデリバリーネットワーク(CDN)は、静的コンテンツの配信に特化して設計され、最適化されています。このコンテンツへのクライアントリクエストは、エッジCDNサーバーにルーティングされ、それらによって提供されます。これにより、オリジンサーバーの負荷が軽減され、それらはこれらのデータをはるかに低い頻度で提供することになります。

改善されたユーザーエクスペリエンスのための低レイテンシー

ユーザーベースが地理的に分散しており、トラフィックのかなりの部分が遠隔地から来る場合、CDNを使用することで、静的アセットをユーザーに近いエッジサーバーにキャッシュすることでレイテンシーを低減できます。ユーザーと静的コンテンツの距離を縮めることで、コンテンツをユーザーにより速く配信し、ページの読み込み速度を向上させることで、ユーザーエクスペリエンスを向上させることができます。

これらの利点は、主に帯域幅が多いビデオコンテンツを提供するウェブサイトの場合には特に顕著であり、高いレイテンシーや遅い読み込み時間がユーザーエクスペリエンスやコンテンツのエンゲージメントに直接影響します。

トラフィックの急増を管理し、ダウンタイムを回避

CDNは、大規模なトラフィックの急増やバーストを、大規模で分散されたエッジサーバーのネットワーク全体にリクエストを負荷分散することによって処理できます。配信ネットワーク上で静的コンテンツをオフロードしてキャッシュすることで、既存のインフラストラクチャでより多くの同時ユーザーを収容できます。

単一のオリジンサーバーを使用するウェブサイトでは、これらの大規模なトラフィックの急増がしばしばシステムを圧倒し、計画外の停止やダウンタイムを引き起こすことがあります。高可用性で冗長性のあるCDNインフラストラクチャにトラフィックを移行することで、ウェブトラフィックの変動レベルを処理するために設計されています。

コスト削減

静的コンテンツを提供することは通常、帯域幅の使用量の大部分を占めるため、これらのアセットをコンテンツ配信ネットワークにオフロードすることで、月間のインフラストラクチャ費用を大幅に削減できます。帯域幅のコストを削減するだけでなく、CDNはオリジンサーバーへの負荷を軽減することでサーバーのコストを削減し、既存のインフラストラクチャをスケーリングすることができます。最後に、一部のCDNプロバイダーは、変動する月間帯域幅の使用量を安定した予測可能な定期的な支出に変換できる固定価格の月額請求を提供しています。

セキュリティを強化する

CDNのもう1つの一般的な使用例は、DDoS攻撃の緩和です。多くのCDNプロバイダーは、エッジサーバーへのリクエストを監視し、フィルタリングする機能を提供しています。これらのサービスは、ウェブトラフィックを疑わしいパターンで分析し、悪意のある攻撃トラフィックをブロックしながら、信頼できるユーザートラフィックを継続的に通過させます。CDNプロバイダーは、通常、インフラストラクチャレベル(OSIレイヤー3および4)での一般的な攻撃保護から、より高度な緩和サービスやレート制限までさまざまなDDoS緩和サービスを提供しています。

さらに、ほとんどのCDNでは、CDNとエンドユーザー間、およびCDNとオリジンサーバー間のトラフィックを暗号化できるように、CDN提供またはカスタムのSSL証明書を使用して完全なSSLを構成できます。

最適なソリューションの選択

もしボトルネックがオリジンサーバーのCPU負荷であり、帯域幅ではない場合、CDNは最適な解決策ではありません。この場合、NGINXやVarnishなどの人気のあるキャッシュを使用したローカルキャッシングにより、システムメモリからアセットを提供することで負荷を大幅に軽減できる可能性があります。

CDNを展開する前に、JavaScriptやCSSファイルの最小化と圧縮、ウェブサーバーのHTTPリクエスト圧縮などの追加の最適化手順も、ページの読み込み時間や帯域使用量に大きな影響を与える可能性があります。

A helpful tool to measure your page load speed and improve it is Google’s PageSpeed Insights. Another helpful tool that provides a waterfall breakdown of request and response times as well as suggested optimizations is Pingdom.

結論

A content delivery network can be a quick and effective solution for improving the scalability and availability of your web sites. By caching static assets on a geographically distributed network of optimized servers, you can greatly reduce page load times and latencies for end users. In addition, CDNs allow you to significantly reduce your bandwidth usage by absorbing user requests and responding from cache at the edge, thus lowering your bandwidth and infrastructure costs.

WordPress、Drupal、Django、Ruby on Railsなどの主要フレームワーク向けのプラグインやサードパーティのサポート、DDoS対策、完全なSSL、ユーザーモニタリング、アセットの圧縮などの追加機能を備えたCDNは、高トラフィックのウェブサイトを安全かつ最適化するための効果的なツールとなります。

Source:
https://www.digitalocean.com/community/tutorials/using-a-cdn-to-speed-up-static-content-delivery