Skip to content

DNET_CDN

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

CDN(Content Delivery Network)

概要

  • 大手Akamaiが1990年代に提唱したといわれているコンテンツを配信するためのネットワーク。

  • 単なるスケールアウトではなく、距離的に一番近い場所にあるサーバを自動で選択できる。

  • 国内配信の場合(地理分散が有効でない場合)にも、導入のメリットがある。

タイプ

このページでは、主に、主流のプル型のCDNについて説明する。

プッシュ型

配信したいファイルをアップロードして配信。
オリジン・サーバがストレージのプル型は≒プッシュ型)

プル型

キャッシュ・サーバが、オリジン・サーバから
ファイルを取得し自分の中に一定時間キャッシュする。

P2P型

P2P型ファイル共有ソフトみたいな仕組み。

メリット・デメリット

メリット

トラフィック分散による性能向上

主にパフォーマンスの向上

  • サーバのCPU負荷を低減できる
  • LBからのOUTトラフィックがボトルネックとならない構成。

転送容量を気にしなくていい

  • 月間転送容量、1日の転送容量などの制限の影響を受けない。
  • 転送容量の従量課金が無い(出力は無課金、入力のみの課金)

高可用性(対障害性)

回線、ロードバランサーが冗長化された構成で、DDoSにも強い。

ファイル再配置の必要なし

  • ただし、プル型の場合に限る。
  • オリジン・サーバにWebサイトを使う場合
    (ストレージを使用する場合などは再配置が必要になる)

その他、様々な機能を利用可能。

機能を参照。

デメリット

誤キャッシュの事故は継続的に発生

個人情報が表示されたページをキャッシュするなど、誤キャッシュの事故は継続的に発生

キャッシュでファイル更新が反映されない

クライアント側でキャッシュされると、ファイル更新が反映されない

キャッシュ削除の反映に時間がかかる場合がある

ものによってはキャッシュサーバからファイルを削除するのに時間がかかる場合がある

レイヤが増える事で起きる問題

  • 障害点が増える。
  • キャッシュしない場合は効率が悪くなる。

アクセスログが取れない可能性

CDNによっては、機能を提供している。

構成

サーバ構成(プル型)

  ┌─> DNSで名前解決。
  │
クライアント ─> キャッシュ・サーバ ─> オリジン・サーバ

DNSとの関係を参照)

オリジン・サーバ

元のデータが入っているサーバ

キャッシュ・サーバ

  • データを代わりに配信してくれるサーバで、エッジ・サーバと呼ぶ場合もある。
  • リバース・プロキシ(リバース・プロキシ・キャッシュ)的に動作する。

DNSとの関係

地理分散

CDNはDNSの仕組みを上手く利用し
アクセス元から一番近いエッジ・サーバのIPアドレスを応答後、
最終的にネットワーク的に近い場所にあるエッジ・サーバへ誘導

CNAME

CDNベンダーが提供するサブドメインに
CNAMEレコードを定義する方式が必須になる。

  • 以下のようなCNAMEレコードは設定ができない。

    • 同じドメイン名で複数CNAME設定すること
    • CNAME以外のレコード(Aレコード)との同居
    • MXレコードとの同居
    • NSレコードとの同居
    • Apexドメイン
      ホスト部が無いドメインでNSレコードが存在するため。
  • 上記の回避策

    • Aliasレコード(あくまでDNSベンダー独自実装)
    • CNAME Flattening対応DNSサービス

機能

ドメイン

別のドメインで運用

Webサイトと配信用のドメインを分けた場合

  • 既存のWebサイトには一切影響がないため切り分けや導入が楽。
  • 配信用ドメインだけ書き換える必要があるため手間が発生する。

※ ≒ プッシュ型

同じドメインで運用

  • Webサイトと配信は同じドメインで運用できる。

  • Webサイトが複雑で特殊な構造だと動作を理解した上で
    キャッシュさせる・させないというハンドリングを実施する必要がある。

※ ≒ プル型

キャッシュ

キャッシュ条件

  • オリジン・サーバキャッシュ・サーバのHTTPヘッダの値によって、

    • キャッシュする・しない。
    • HTTPヘッダ値毎にキャッシュしたり、

    をコントロールする。

  • キャッシュ・サーバが、参照するHTTPヘッダ

    • HTTP Method
      多くは、GETとHEADメソッド
      コレ以外のメソッドはキャッシュしない。

    • パス別

      • 特定のパスのコンテンツはキャッシュする・しない。
      • 特定の拡張子(JPG・PNG・MP4)のコンテンツはキャッシュする・しない。
    • Cookie別
      認証Cookieが付与されている場合はキャッシュしない。

    • クエリ別
      クエリ毎にキャッシュ

    • User-Agent別
      User-Agent毎にキャッシュ

    • , etc.

  • キャッシュ・サーバが、キャッシュしない場合
    オリジン・サーバに要求をパススルーする(プル型)。

キャッシュ時間

キャッシュ・サーバがキャッシュする時間の制御。

  • 既定値は、最大XX(e.g.24)時間キャッシュ
  • 別途、オリジン・サーバのHTTPヘッダの値に従う。

動的→静的化

動的コンテンツ配信を静的コンテンツ配信に近づけるには、

  • パス別
  • クエリ別
  • Cookie別

のHTTPヘッダ値、毎にキャッシュするようにする(プル型)。

設定方法

  • CDN「で」制御する方法
    CDNベンダーが用意している管理画面からキャッシュの設定を行う方法。

    • メリット
      Webサーバの設定変更が不要

    • デメリット

      • 設定の工数が発生
      • テストの工数が発生
  • CDN「を」制御する方法
    オリジン・サーバのHTTPヘッダで制御する方法。

    • メリット

      • そのままCDN化出来てしまう可能性がある。
      • ほとんどのCDNベンダはRFC7234に準拠しているため。
    • デメリット

      • CDNベンダによっては独自のルールを設けている場合があり、
        これらを確認しないと意図した動作とならず大惨事になるケースがある。
      • WordPressやDrupalなど人気CMSの場合、
        管理者が意図しないヘッダをレスポンスしてしまうケースがある。

削除方法

キャッシュ削除方法がある。

  • シングルパージ(単一ファイルのキャッシュ削除)
  • 正規表現パージ(正規表現で細かく指定可能)
  • タグパージ(レスポンスヘッダにタグでグループ化されたキャッシュ削除)

VOD配信

動画配信をCDNで負荷分散する

ダウンロード配信

ダウンロードによる配信

プログレッシブ配信

ダウンロードしつつ再生できる配信。

RTMPストリーミング配信

初期のTCP ベースのストリーミング・プロトコル

HLSストリーミング配信

現在主流のAppleが提唱したストリーミング・プロトコル

セキュリティ対策

DDos対策

CDNには、DDos対策機能が組み込まれていることが多い。

CDN+WAF

CDNには、WAF 機能が組み込まれていることが多い。

  • 裏に、WAFをかますことで、セキュリティ対策が可能。
  • WAF単体では難しいDDos攻撃も防御できる。

認証

  • オリジン・サーバの仕組みを流用できないので、
    (認証認可されたコンテンツはキャッシュできないので)
  • CDN毎に別途、使用できる認証の仕組みがある。

圧縮・変換

Gzip圧縮

HTTP圧縮ではGzip圧縮が一般的

Brotli圧縮

BrotliはGzipよりも圧縮率が高い。

転送量削減

(元 Wiki では見出しのみで本文が無い。)

WEBP圧縮

非可逆圧縮のJPEGや可逆圧縮のGIF、PNGの置き換えを意図する規格

  • 非可逆圧縮モードでJPEGと比較して25-34%小さくなり、
  • 可逆圧縮モードでPNGと比較して28%小さくなる。

HTTP/2 Server Push

プッシュ配信(HTTP/2について調べてみた。を参照)

参考

さくらのナレッジ

キャッシュ屋ブログ | REDBOX Labo

マイクロソフト系技術情報 Wiki

移行メモ

  • さくらのナレッジの連載で「第5回」が 2 つ並んでいたため、 後者を「第6回」に修正した。
  • 元 Wiki では見出しそのものが他ページへのリンクになっていた箇所 (「HTTP/2 Server Push」「AzureのCDN」「キャッシュ・コントロールのHTTPヘッダ」)は、 GitHub Wiki では見出しからアンカが生成されるため、 見出しをプレーン・テキストとし、リンクは直下の本文(箇条書き)に置いた。
  • マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの HTTP/2について調べてみた。 / AzureのCDN / キャッシュ・コントロールのHTTPヘッダ に張り替えた。
  • 本文の無い見出し(「転送量削減」)は、その旨を明示した。
  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 同一ページ内のアンカは見出しから生成されるアンカに張り替えた。

Tags: 移行, CDN, キャッシュ, Akamai, オリジンサーバ, エッジサーバ, CNAME, WAF, HTTP/2, Brotli

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally