CDN(Content Delivery Network)は、Webのコンテンツを効率良く配送するために開発されたネットワークです。Webトラヒックの大半はCDNを経由しており、企業のホームページからNetflixやYoutubeといった動画配信サービスまで、幅広いコンテンツがCDNから配信されています。
CDNは、インターネットを陰から支える存在ではありますが、その重要度に比してあまり技術的にスポットが当たることが少ない存在でもあります。本記事では、CDNの概要とCDNが解決する課題について解説し、読者にその役割を理解頂くことを目的としています。
CDN(Content Delivery Network)とは
CDNは、Webのコンテンツを効率良く配送するために開発されたネットワークです。 1988年にマサチューセッツ工科大学(MIT)の研究者によって設立された米Akamai Technologies社によって、インターネットのコンテンツ配信を高速化し、信頼性を向上させるための技術として開発されました。
その基本コンセプトは、コンテンツを毎回Webサーバーから配信する代わりに、地理的に分散して配置されたエッジサーバーからコンテンツのコピー(キャッシュと呼ばれる)を配信するというものです。ユーザーの近くからコンテンツの配送するため、レスポンスを高速化することができます。
以下で図を使ってCDNの動作を解説します。
ユーザー、エッジサーバー、オリジンサーバーが直列に接続されております。オリジンサーバーは、会社のホームページをホスティングしています。 初期状態では、オリジンサーバーのみがコンテンツ/index.html を持っています。CDNの文脈では、CDNのサーバーとユーザーが用意するWebサーバーの2種類のサーバーが存在します。そのため、前者をエッジサーバー(Edge Server)、後者をオリジンサーバー(Origin Server)と呼び、区別します。
ユーザーは、index.htmlをHTTPのGETリクエストで要求します。この時、エッジサーバーはindex.htmlのキャッシュを持っていないため、オリジンサーバーにGETリクエストを転送します。
オリジンサーバーはエッジサーバーからのリクエストに応え、200 OKで/index.htmlを返送します。この時、エッジサーバーは、ユーザーに/index.htmlをレスポンスしつつ、/index.htmlをキャッシュします。
次に、別のユーザーが/index.htmlをリクエストしてきました。この時、エッジサーバーは/index.htmlのキャッシュを持っているため、オリジンサーバーにはリクエストを転送せず、エッジサーバーが代理でレスポンスを行います。これにより、レスポンスの高速化とオリジンサーバーの負荷削減ができました。
この例では、ユーザーは2人だけでしたが、実際には、大手のサービスであれば、数万から数億の規模でユーザーが存在します。 エッジサーバーは最初の1回だけオリジンサーバーにリクエストを送りますが、それ以降はキャッシュが存在する限りはオリジンサーバーにはリクエストを送らないため、ユーザー数が増えたとしてもそれに比例してサーバー負荷が大きくなることが避けられます。 エッジサーバーは、CDNベンダーが十分な処理能力を提供しているため、リクエストの負荷を吸収してくれます。
CDNが解決する課題
ここまでCDNの基本動作を見てきました。ここでCDNが解決する課題をまとめます。
オリジンサーバーの負荷削減とレスポンス遅延の削減
CDNを導入していない場合、10万ユーザーが同時アクセスしてきた場合は10万回index.htmlをレスポンスすることになります。オリジンサーバーは実際には1台ではなく、ロードバランサーの後ろに複数台で稼働します。クラウドを利用している場合はオートスケーリング機能でサーバー台数を増減させることは容易ではありますが、サーバーの増設には一定の時間がかかります。そのため、突発的なアクセス増(スパイクトラヒック)にオートスケーリングだけで対応することは困難です。特に、EコマースサイトでのキャンペーンやSNS上で突発的に「バズり」、アクセスが急増した場合、レスポンス遅延が増加したり、最悪の場合サーバーダウンでレスポンスできなくなってしまいます。
せっかくのビジネスチャンスにも関わらず、機会損失になる上、UXが悪化しブランドイメージの低下にも繋がります。
CDNを導入した場合、エッジサーバーが代理で応答するため、オリジンサーバーには1回だけリクエストが来ることになり、大幅な負荷削減が実現できます。
攻撃を直接オリジンサーバーが受けてしまう
CDNを導入しない構成のデメリットがもう一つあります。それは、悪意を持ったユーザーのリクエストをオリジンサーバーが受けてしまうため、DDoS攻撃によるサーバーダウンや、より高度なSQLインジェクションなどの攻撃を受け、個人情報の流出などのリスクがあることです。
CDNにWAF(Web Application Firewall)を追加した場合、これらの攻撃をエッジサーバーでブロックでき、オリジンサーバーまで到達しません。また、キャッシュからレスポンスするCDNの性質上WAFを導入しない場合でも、ある程度のDDoS攻撃に対する耐性があります。
まとめ
今回は、CDNの基本コンセプトとCDNが解決する課題を紹介しました。
CDNを導入することでレスポンス速度の向上とオリジンサーバーの負荷削減のメリットがあります。また、WAFを追加することでSQLインジェクションなどの高度な攻撃に対して、自社のWebサイトを保護することができます。
次回は、CDNによる改善の効果をデモサイトを用いて測定し、CDNのどのような機能が改善に役立ったかを考察します。
記事一覧ページはこちらです。