著者:田中麻維
大手電機メーカー系のSierに入社後、インフラエンジニアとしてLinuxサーバーの構築や保守・運用、ソフトウェアの開発業務を経験。アイティベル入社後は、IT領域の執筆などを行う。
CDNは、Contents Delivery Networkの頭文字をとった略語で、Webサーバー(オリジンサーバー)のコンテンツをエッジサーバーと呼ばれるサーバーにキャッシュして配信する仕組みです。
CDNを使用することで、Webサイトへアクセスする際のレスポンスやセキュリティ向上、Webサーバーの負荷軽減、コスト削減といった多くのメリットを享受できます。
本記事では、CDNの概要、CDNの仕組み、CDNのメリットとデメリット、CDN導入手順を解説します。
1. CDNとは
CDN(Contents Delivery Network)は、Webコンテンツをユーザーに効率よく配信する仕組みです。
通常、ユーザーがWebサイトにアクセスする際には、Webサーバー(オリジンサーバー)に直接アクセスします。一方、CDNの場合は、Webサーバーの代わりに、エッジサーバーと呼ばれるサーバーにアクセスしてコンテンツを取得します。
エッジサーバーは、Webサーバーが保持しているコンテンツをキャッシュするサーバーです。各地域に分散配置されているため、ネットワークの遅延が起こりにくく、Webサーバーへ直接アクセスするよりも高いパフォーマンスを実現します。キャッシュは必要に応じて最新化され、ユーザーは最新のコンテンツを参照できます。
現在、インターネットを活用した情報発信は、企業活動において極めて重要であるといえるでしょう。ユーザーから信頼されるためには、Webサイトをダウンさせずに、最新の情報を発信し続けなければなりません。
ホームページのレスポンス悪化、もしくはサーバーダウンといった障害が発生した場合、ユーザーの離脱を招き、結果的に企業に対する信頼性が大きく損なわれます。CDNを使用することで、快適なレスポンスでコンテンツを提供でき、サイバー攻撃やシステムダウンといった問題も回避できます。こうした理由から、CDNの導入は、企業活動にとって極めて重要です。
2. CDNの仕組み
CDNには、オリジンサーバーやエッジサーバーと呼ばれるサーバーがあり、それぞれが重要な役割を果たします。本章では、CDNを構成する要素と仕組みを解説します。
CDNの構成要素
CDNを構成する要素は以下のとおりです。
- オリジンサーバー
- エッジサーバー
- キャッシュ
- DNSサーバー
それぞれの要素を解説します。
オリジンサーバー
オリジンサーバーは、Webサーバーを指しています。コンテンツの元データを保持しており、エッジサーバーへコンテンツを提供します。
CDNを採用した環境では、ユーザーがオリジンサーバーに直接アクセスすることはありません。
また、CDNではエッジサーバーによって冗長化が担保できるものの、オリジンサーバー自体も冗長化させた方がよいでしょう。オリジンサーバーがダウンした場合、エッジサーバーに最新のコンテンツを提供できなくなるためです。
エッジサーバー
エッジサーバーは、ユーザーに対してコンテンツを配信するサーバーです。アクセス数やアクセス元に応じて最適な場所に分散設置し、ユーザーは最も近い場所にあるエッジサーバーにアクセスします。
エッジサーバーの使用により、オリジンサーバーの負荷が軽減され、高速にコンテンツを配信できます。
キャッシュ
オリジンサーバーのコンテンツをエッジサーバーに保持することを、キャッシュといいます。
キャッシュでは、コンテンツの保持に関するさまざまな設定が可能です。導入時に指定したコンテンツを保持するように設定できるほか、キャッシュ対象外とするコンテンツの設定やキャッシュの保持期間も設定できます。
エッジサーバーにコンテンツがキャッシュされていない場合は、オリジンサーバーからコンテンツを取得してキャッシュします。
DNSサーバー
ユーザーがアクセスするURLの名前解決を行うサーバーです。名前解決とは、ユーザーがアクセスに用いるドメイン名を、IPアドレスに変換することです。
CDNは、DNSサーバーを使用して、ユーザーのリクエストをエッジサーバーに振り分けます。ユーザーの地理的位置やネットワークの状態にもとづき、最も近いエッジサーバーにアクセスを転送します。
CDNを使用する際には、エッジサーバーを参照するようにレコードを設定します。具体的には、CNAMEと呼ばれるオリジンサーバーの別名を登録し、エッジサーバーを参照できるようにします。
CDNの仕組み
CDNの仕組みは以下のとおりです。
- オリジンサーバーのコンテンツをエッジサーバーにキャッシュ
- ユーザーがブラウザからWebサイトへアクセス
- アクセス先をエッジサーバーへ転送
- ユーザーはエッジサーバーからキャッシュを取得
- エッジサーバーから取得したコンテンツを表示
3. CDNのメリット
CDNを使用するメリットは以下のとおりです。
- 高速なコンテンツ配信
- セキュリティの向上
- サーバー負荷の軽減
- 可用性向上
それぞれのメリットを解説します。
高速なコンテンツ配信
CDNは各地域に分散配置されており、アクセスするユーザーから最も近い場所にあるエッジサーバーにアクセスを転送します。アクセスするサーバーまでの物理的な距離が短くなるため、ユーザーは長時間待つことなくコンテンツを利用でき、結果としてWebサイトの離脱率が下がります。
セキュリティの向上
エッジサーバーへのアクセスによりオリジンサーバーへの直接アクセスがなくなるため、オリジンサーバーに対するDoS攻撃やDDoS攻撃の影響を限定できます。また、オリジンサーバーの乗っ取り、ウイルス感染といったサイバー攻撃にも対応可能です。
たとえば、外部からの攻撃によりエッジサーバーのキャッシュが書き換えられた場合は、該当エッジサーバーを切り離し、ほかのエッジサーバーへアクセスするように変更します。この対応により、オリジンサイトをダウンさせずに、コンテンツを提供し続けられます。
サーバー負荷の軽減
オリジンサーバーへのアクセス集中を分散できるため、負荷分散が可能です。より多くのエッジサーバーを分散配置することで、負荷はさらに軽減できます。オリジンサーバーへの負荷軽減のほか、ネットワークにかかる負荷も軽減できます。
可用性向上
仮にオリジンサーバーがダウンした場合でも、エッジサーバーのキャッシュで応答すれば、完全なサイトダウンは避けられます。ただし、最新のコンテンツは提供できず、コンテンツによってはエラーを返すおそれもあるため注意が必要です。
また、エッジサーバーは分散配置されているため、エッジサーバー自体のダウンにも対応可能です。たとえば、エッジサーバーAがダウンした場合は、ほかのエッジサーバーにロードバランシングすることで可用性を確保します。
4. CDNのデメリットと解決策
CDNを使用するデメリットは以下のとおりです。
- キャッシュによるトラブル
- キャッシュ管理
- エッジサーバーの偏り
- 導入や運用の難易度
- アクセスログ取得の問題
- CDN導入と利用によるコスト増加
それぞれのデメリットを解説します。
キャッシュによるトラブル
本来キャッシュすべきでないコンテンツをキャッシュした場合、意図せずエッジサーバーを通じて情報が漏えいするおそれがあります。キャッシュすべきでない情報としては、以下のものが挙げられます。
- 企業の機密情報
- 社内外の個人情報
- 特定の人向けに提供されているコンテンツ
- 未公開の製品情報 など
キャッシュによるトラブルを未然に防ぐためには、キャッシュすべきコンテンツとキャッシュしないコンテンツを明確に区別したうえで、適切なキャッシュポリシーを設定することが重要です。さらに、キャッシュ制御ヘッダ(たとえば「Cache-Control」)を使用し、個別にキャッシュの管理を行うことが推奨されています。
定期的な監査とセキュリティチェックを行い、キャッシュの設定に問題がないか確認することも有効な対策のひとつです。
キャッシュ管理
キャッシュが古い場合、最新のコンテンツを提供できません。古い情報がユーザーに伝わると、誤解や誤認につながり、結果として企業の信頼性低下や機会損失といった悪影響を及ぼします。
最新のコンテンツを配信するためには、エッジサーバーに最新のコンテンツをキャッシュする必要があります。対象とするコンテンツ、対象外のコンテンツ、キャッシュ時間といった設定を適切に行うことが重要です。
たとえば、キャッシュの保持期間(TTL)を短くして最新のコンテンツを提供できるようにする、あるいはキャッシュパージ機能を利用して、必要に応じて手動でキャッシュをクリアするといった設定があります。
エッジサーバーの偏り
エッジサーバーの配置が適切でない場合、分散配置による効果が出づらい場合があります。特定のエッジサーバーにアクセスが集中すると、負荷が高まり、追加のリソースを割り当てる必要が生じて、コスト増加につながりかねません。
エッジサーバーを適切に配置するためには、アクセス元IPアドレス、頻繁にアクセスされるコンテンツ、アクセスが集中する時期や時間帯といったアクセス履歴を中長期に分析する必要があります。
導入や運用の難易度
CDNは導入や運用のハードルが極めて高いといえます。
たとえば、以下の点が挙げられます。
- エッジサーバーの適切な配置計画
- 構築や設定に必要な技術
- 運用とアクセス分析のノウハウ
特に、導入を計画する際には、既存のアクセス状況を分析のうえ、アクセスが集中する地域や時間、コンテンツを特定しなければ導入の効果が望めません。設定や運用にはノウハウが必要であり、効率的な運用ができない場合は、運用負荷が高まるおそれがあります。
自社で環境を整備するよりも、外部のCDNサービスを利用した方が、導入や運用の難易度は下がります。
アクセスログ取得の問題
Webサイトへのアクセスはエッジサーバーに対して行われるため、アクセス情報を一元的に収集できません。エッジサーバーごとにアクセスログを出力するため、ログ収集サーバーにログ転送を行い集計する仕組みが必要です。
しかし、ログの集計には工数がかかり、管理も煩雑になります。アクセスログの一元的な取得と多角的な分析をしたい場合は、外部のCDNサービス利用を検討した方がよいでしょう。
CDN導入と利用によるコスト増加
CDN導入には、エッジサーバーの導入や運用といったコストが発生します。特に、自社ですべての基盤を整備する場合、莫大なコストと運用の手間がかかります。そのため、可能であれば外部のCDNサービス利用を検討する方がよいでしょう。
クラウド型のCDNサービスには、以下のメリットがあります。
- アクセス数やトラフィック量に応じた従量課金
- トラフィック量に応じた柔軟な拡張性
- CDN導入時のコストが不要
CDN導入の際には、クラウド型CDNも選択肢のひとつとして検討してみてください。
5. CDNの導入手順
CDNを導入する方法としては、以下の2つが挙げられます。
- 自社でCDNの環境を構築する
- 外部のCDNサービスを利用する
CDN導入のステップは、以下のとおりです。なお、オリジンサーバーは既存のWebサーバーを使用するものとします。
- オリジンサーバーの設定
- エッジサーバーの準備
- エッジサーバーの設定
- DNSサーバーの設定
- 動作確認
1.オリジンサーバーの設定
既存のWebサーバーを、オリジンサーバーとして使用するために設定を行います。具体的には、アクセス権や基本的なセキュリティ設定などです。CDNを導入するための特殊な設定はありません。また、パフォーマンスチューニングを見直し、問題があれば是正します。
なお、利用するCDNサービスによっては、オリジンサーバー側でキャッシュの有効化設定が必要な場合もあるため注意しましょう。キャッシュの有効化設定が必要な場合は、「Cache-control: s-maxage = 300」のように、HTTP応答ヘッダを追加します。
HTTPヘッダの設定は、Apache(アパッチ)、Nginx(エンジンエックス)といったWebサーバーのソフトウェアによって異なるため、CDNサービスの仕様とともにあらかじめ確認することが必要です。
2.エッジサーバーの準備
アクセス数やアクセスが多い地域、アクセスが多いコンテンツを分析のうえ、エッジサーバーを配置するサイトや台数を計画し、データセンターを確保してハウジングします。外部のCDNサービスを利用する場合は、複数のCDNサービスを比較検討のうえ、要件に合ったサービスを決定します。
3.エッジサーバーの設定
エッジサーバーの準備後に、以下の設定を行います。
- オリジンサーバーのIPアドレス・URL
- キャッシュするコンテンツ
- キャッシュの保持期間
- 配信ルール
配信ルールは、特定のコンテンツを配信するエッジサーバーを特定するために設定します。たとえば、動画コンテンツはエッジサーバーAのみで配信し、そのほかのコンテンツはすべてのエッジサーバーで配信するといった設定が可能です。
また、SSL/TLSを使用する場合は、エッジサーバーに証明書をアップロードする必要があります。
4.DNSサーバーの設定
ユーザーがエッジサーバーを参照するようにDNSを設定します。オリジンサーバーのCNAMEとしてエッジサーバーのドメイン名を登録し、ユーザーがWebサイトのURLにアクセスした際に、エッジ―サーバーへリダイレクトさせます。CNAMEは、Canonical Nameの略で、ドメイン名を別のドメイン名として登録するものです。
5.動作確認
DNS登録後に動作確認を行います。DNSの登録情報は伝播に時間がかかるため、動作確認は時間をおいて実施しましょう。動作確認をする際は、一部のエッジサーバーのみCNAMEを登録し、動作確認後にすべてのCNAMEを登録して切り替えを行います。
問題が発生した場合には切り戻しを行います。DNS登録の切り戻しのほか、エッジサーバーを停止したときにオリジンサーバーへ直接アクセスできるように、想定される問題ごとに切り戻し計画を立てることが重要です。
まとめ
CDNは、Webサーバー(オリジンサーバー)のコンテンツをエッジサーバーにキャッシュし、ユーザーからのアクセスを受け付ける役割を担います。CDNの使用により、レスポンス向上、セキュリティ対策、リソースの負荷軽減、コスト削減といったさまざまなメリットを享受できます。
一方で、導入には技術的な知識が必要で、機器の購入や運用コストといった点も考慮しなければなりません。そのため、自社でCDNを構築するよりも、外部のCDNサービス利用を検討した方が現実的です。最適なCDNサービスを選択し、ユーザーに快適なアクセス環境を提供できるようにしましょう。