NHN Cloud Meetup 編集部
TOAST CDNの紹介(TOASTサービスをのぞいてみる)
2019.09.04
1,002
CDN(Content Delivery Network)とは?
CDN(Content Delivery Network)は、コンテンツ(画像、テキスト、メディアファイルなど)を最適化されたパスから転送できるように、世界中に分散されたサーバーで構成されたプラットフォームです。
CDNを使用しない場合、オリジン(origin)サーバーと呼ばれるコンテンツサーバーは、すべてのエンドユーザーのリクエストを処理する必要があります。オリジンサーバーは予測できないエンドユーザーのリクエストを処理する必要があるため、多くのトラフィックが流入すると、負荷を引き起こす可能性があり、障害が発生しやすくなります。また、エンドユーザーとオリジンサーバー間の品質が保証されていないネットワークからコンテンツが送信されるため、レスポンスの品質が保証されません。
CDNは、エンドユーザーとオリジンサーバー間の仲介役として機能します。
エンドユーザーからコンテンツダウンロードのリクエストは、地理的位置、ネットワークの品質などを考慮したうえで、最適なCDNエッジサーバーへと伝達されます。CDNエッジサーバーは、エンドユーザーに代わってオリジンサーバーへコンテンツのリクエストを送信し、リスポンスの内容を保存(キャッシュ)した後、エンドユーザーに送信します。以降、エッジサーバーは、キャッシュされたコンテンツがあれば、オリジンサーバーを介さずに直接エンドユーザーからのコンテンツのリクエストに応答することができます。
これにより、エンドユーザーは、最適なパスのエッジサーバーからコンテンツを速やかにダウンロードできるようになります。
また、オリジンサーバーを運営するコンテンツプロバイダは、CDNエッジサーバーを通じてエンドユーザーの要請に応答することで、トラフィックの負荷を軽減し、オリジンサーバーの可用性を向上させることができます。
- エンドユーザー(End-User):コンテンツをリクエストするブラウザ、端末など
- エッジサーバー(Edge server):複数の地域に分散したサーバーで、エンドユーザーからのコンテンツのリクエストを受け取り、オリジンサーバーに代わって応答するサーバー
TOAST CDNの紹介
TOASTのCDNを利用すると、簡単な設定でCDNサービスを利用することができます。またCDNサービスを管理できるAPIも提供しています。
特徴
- コンソール/APIを通じてCDNサービスの作成と設定変更を簡単に行えます。
- コンソール/APIを通じてキャッシュの再配布(Purge / キャッシュされたデータを再構築する操作)ができます。
- ネットワーク転送量、HTTPステータスコード別の統計情報や、頻繁に要請された上位コンテンツなどの統計データを提供しています。
CDNサービスの作成
1)サービス地域とソースサーバー(オリジンサーバー)を入力するだけでCDNサービスを作成することができます。
- サービス地域
- KOREA:韓国に位置するエッジサーバーを利用してサービスします。GLOBALサービスエリアよりも利用料金が安くなります。
- GLOBAL:全世界に位置するエッジサーバーを利用してサービスします。
- ソースサーバー
- コンテンツ、ストレージ、サーバーのドメインアドレス、またはIPを入力します。
- ソースサーバーは、エッジサーバーがコンテンツをダウンロードできるようにアクセスが許可されます。アクセスが制限されている場合、エッジサーバーがオリジンサーバーのコンテンツを取得することができないため、正常にサービスが行えません。
2)[OK]ボタンをクリックして、CDNサービスを作成します。
3)約10分後、サービスの状態が緑色(サービス中)になると、CDNサービスが正常に生成された状態です。サービス作成後、提供された{random-service-name}.cdn.toastcloud.comサービスのドメインは、エンドポイントのドメインアドレスとして使用されます。
CDNの追加設定
キャッシュ設定
キャッシュ設定を使うとエッジサーバーがオリジンサーバーのコンテンツをどの程度キャッシュするか(TTL秒単位)を設定できます。基本的にエッジサーバーは、オリジンサーバーのキャッシュ設定を使用します。したがって、TOAST CDNを使用してキャッシュの設定をする場合、オリジンサーバーのキャッシュ設定は、削除する必要があります。
リファラー(referer)ヘッダのアクセス制御
リファラーヘッダのアクセス制御の設定により、許可されたウェブページから参照された場合のみCDN経由でコンテンツをリクエストをできるよう、アクセス制御が可能になっています。HTTPのリファラーリクエストヘッダは、現在リクエストされているページの前リンクのウェブページのアドレスが含まれています。リファラーヘッダを参照してアクセス許可の可否を設定でき、アクセスポリシーは、ホワイトリスト方式とブラックリスト方式を提供しています。
- 例:リファラーヘッダがhttp://www.toast.comで始まる場合にのみアクセスを許可
- アクセスポリシー:Whitelist
- ^http://www\.toast\.com.*
- 参考
- リクエストヘッダにリファラーヘッダがない場合は、ヘッダのアクセス制御が動作しません。
- アクセスが拒否された場合は、コンテンツの要請に403 Forbidden HTTP Statusを応答します。
キャッシュ再配布(Purge)
オリジンサーバーのコンテンツが更新されても、エッジサーバーのキャッシュされたコンテンツは、設定されたTTL時間の間は更新されません。したがって、オリジンサーバーの最新コンテンツをエンドユーザーに提供しようとする場合は、キャッシュ再配布機能を使ってエッジサーバーのキャッシュを無効にする必要があります。キャッシュ再配布はキャッシュされたデータを一掃し再構築することで、完了まで数分程度かかります。
キャッシュ再配布(Purge)は、3つのタイプを提供します。
- 特定ファイル(ITEM):特定パスの単一ファイルのエッジサーバーのキャッシュを無効にします。
- 例:/images/toast_logo.png
- ワイルドカード(WILDCARD):ワイルドカード文字を使用して、マッチングされたファイルのキャッシュを無効にします。
- 例:/images/*/toast?.png
- 全体ファイル(ALL):エッジサーバーのすべてのキャッシュデータを無効化します。
【注意】キャッシュ再配布が完了した後は、エッジサーバーにキャッシュされたコンテンツがないため、オリジンサーバーへトラフィックが流入することがあります。
【注意】キャッシュ再配布は、リクエストタイプに応じて使用量の制限があります。
- 特定ファイル:時間当たり60回の制限、1回にリクエストできる最大Path数:1000個限定
- ワイルドカード:時間当たり60回の制限、1回にリクエストできる最大Path数:10個限定
- 全体ファイル:時間当たり5回の制限
FAQ
1)キャッシュが正常に動作していることを確認したいです。
- Response headerを参照すると、どのようなエッジサーバーを通じてキャッシュされているか確認できます。
- Cache Missの場合
- X-Pxヘッダから任意のエッジサーバーを通じてコンテンツを収集したか確認できます。
- ms h0-s1708.p59-icn (h0-s1707.p59-icn), ms h0-s1707.p59-icn (origin)は、次のように解釈されます。
- msはcache missを意味し、htはcache hitを意味します。
- ms h0-s1708.p59-icn(h0-s1707.p59-icn)
- h0-s1708.p59-icnはcache missが発生し、h0-s1707.p59-icnエッジサーバーにコンテンツがあるか要請します。
- ms h0-s1707.p59-icn(origin)
- h0-s1707.p59-icnもcache missが発生し、originからコンテンツを取得します。
- Cache-Controlのmax-ageヘッダを見ると、キャッシュTTL(604800、単位:秒)を確認することができます。
- Ageを見ると、キャッシュされたTTL時間が分かります。cache missのためAgeが0です。
- X-Pxヘッダから任意のエッジサーバーを通じてコンテンツを収集したか確認できます。
- Cache hitの場合
- ht h0-s1708.p59-icn.cdngp.net
- 上記cache missの例を見ると、すでにオリジンからコンテンツをキャッシュしているため、以降の要請からcache hitになったことが確認できます。
- Ageヘッダを通じてキャッシュされてから31秒が経過したことが分かります。
- ht h0-s1708.p59-icn.cdngp.net
2) {random-service-name}.cdn.toastcloud.comドメインではなく、私が所有しているドメインからサービスしたいです。
- コンソールでCDN基本設定のドメイン別称(Domain Alias)に所有しているドメインを設定します。
- ドメインプロバイダが提供するコンソールを通じて、{random-service-name}.cdn.toastcloud.com ドメインをCNAMEレコードに追加してください。
3)キャッシュ再配布(Purge)の進行状況が100%になりません。
- エッジサーバーの状態によって、一部のエッジサーバーはサービスから除外される場合があります。サービスから除外されたエッジサーバーがある場合、進行状況が100%にならないことがあります。