「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>SaaS設計のポイント]]
--[[HTTPキャッシュのコントロール]]
--CDN(Content Delivery Network)

*目次 [#xe5ec04b]
#contents

*概要 [#y5093cd2]
-大手Akamaiが1990年代に提唱したといわれているコンテンツを配信するためのネットワーク。
-単なるスケールアウトではなく、距離的に一番近い場所にあるサーバを自動で選択できる。

-国内配信の場合([[地理分散>#oe54538c]]が有効でない場合)にも、導入の[[メリット>#k2016d00]]がある。

*タイプ [#kd391e94]
このページでは、主に、主流の[[プル型>#qec4039c]]のCDNについて説明する。

**プッシュ型 [#sfffec22]
配信したいファイルをアップロードして配信。~
([[オリジン・サーバ>#c893a912]]がストレージの[[プル型>#qec4039c]]は≒プッシュ型)

**プル型 [#qec4039c]
[[キャッシュ・サーバ>#x6aed1f0]]が、[[オリジン・サーバ>#c893a912]]から~
ファイルを取得し自分の中に一定時間キャッシュする。

-[[オリジン・サーバ>#c893a912]]の可用性対策が必要になる。
-HTTPの仕組みを理解して使用する必要がある。
-[[キャッシュ>#he6b470e]]条件を理解して使用する必要がある。

**P2P型 [#w5f824cf]
P2P型ファイル共有ソフトみたいな仕組み。

*メリット・デメリット [#w0df34f2]

**メリット [#k2016d00]

***トラフィック分散による性能向上 [#s1a9e937]
主にパフォーマンスの向上
-サーバのCPU負荷を低減できる
-LBからのOUTトラフィックがボトルネックとならない構成。

***転送容量を気にしなくていい [#re1f847d]
-月間転送容量、1日の転送容量などの制限の影響を受けない。
-転送容量の従量課金が無い(出力は無課金、入力のみの課金)

***高可用性(対障害性) [#ka3ccd05]
回線、ロードバランサーが冗長化された構成で、DDoSにも強い。

***ファイル再配置の必要なし [#z982e976]
-ただし、[[プル型>#qec4039c]]の場合に限る。
-[[オリジン・サーバ>#c893a912]]にWebサイトを使う場合~
(ストレージを使用する場合などは再配置が必要になる)

***その他、様々な[[機能>#qb8c6f9f]]を利用可能。 [#vb7c48ba]

**デメリット [#g62cbb2e]

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

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

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

***レイヤが増える事で起きる問題 [#de3f0f7c]
-障害点が増える。
-キャッシュしない場合は効率が悪くなる。

***アクセスログが取れない可能性 [#p13521b8]
CDNによっては、機能を提供している。

*構成 [#ef3457c1]

**サーバ構成([[プル型>#qec4039c]]) [#v46b5811]

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

***オリジン・サーバ [#c893a912]
元のデータが入っているサーバ

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

**DNSとの関係 [#e27037de]

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

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

-以下のようなCNAMEレコードは設定ができない。
--同じドメイン名で複数CNAME設定すること
--CNAME以外のレコード(Aレコード)との同居
--MXレコードとの同居
--NSレコードとの同居
--Apexドメイン~
ホスト部が無いドメインでNSレコードが存在するため。

-上記の回避策
--Aliasレコード(あくまでDNSベンダー独自実装)
--CNAME Flattening対応DNSサービス

*機能 [#qb8c6f9f]

**ドメイン [#c8bcdaa9]

***別のドメインで運用 [#b203f6dc]
Webサイトと配信用のドメインを分けた場合
-既存のWebサイトには一切影響がないため切り分けや導入が楽。
-配信用ドメインだけ書き換える必要があるため手間が発生する。

※ ≒ [[プッシュ型>#sfffec22]]

***同じドメインで運用 [#c90ccd8a]
-Webサイトと配信は同じドメインで運用できる。

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

※ ≒ [[プル型>#qec4039c]]

**キャッシュ [#he6b470e]

***キャッシュ条件 [#e9b668cd]
-[[オリジン・サーバ>#c893a912]]は[[キャッシュ・サーバ>#x6aed1f0]]のHTTPヘッダの値によって、

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

>をコントロールする。

-[[キャッシュ・サーバ>#x6aed1f0]]が、参照するHTTPヘッダ

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

--パス別
---特定のパスのコンテンツはキャッシュする・しない。
---特定の拡張子(JPG・PNG・MP4)のコンテンツはキャッシュする・しない。

--Cookie別~
認証Cookieが付与されている場合はキャッシュしない。

--クエリ別~
クエリ毎にキャッシュ

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

--, etc.

-[[キャッシュ・サーバ>#x6aed1f0]]が、キャッシュしない場合~
[[オリジン・サーバ>#c893a912]]に要求をパススルーする([[プル型>#qec4039c]])。

***キャッシュ時間 [#t1feb0be]
[[キャッシュ・サーバ>#x6aed1f0]]がキャッシュする時間の制御。

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

***動的→静的化 [#h0bc942a]
動的コンテンツ配信を静的コンテンツ配信に近づけるには、

-パス別
-クエリ別
-Cookie別

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

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

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

--デメリット
---設定の工数が発生
---テストの工数が発生

-CDN「を」制御する方法~
[[オリジン・サーバ>#c893a912]]のHTTPヘッダで制御する方法。

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

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

***削除方法 [#kf0b07a7]
キャッシュ削除方法がある。
-シングルパージ(単一ファイルのキャッシュ削除)
-正規表現パージ(正規表現で細かく指定可能)
-タグパージ(レスポンスヘッダにタグでグループ化されたキャッシュ削除)

**VOD配信 [#g6e54a06]
動画配信をCDNで負荷分散する

***ダウンロード配信 [#e3ba89ef]
ダウンロードによる配信

***プログレッシブ配信 [#e8f05369]
ダウンロードしつつ再生できる配信。

***RTMPストリーミング配信 [#e91a94f9]
初期のTCP ベースのストリーミング・プロトコル

***HLSストリーミング配信 [#m87a122f]
現在主流のAppleが提唱したストリーミング・プロトコル

**セキュリティ対策 [#g4d18c93]

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

***CDN+WAF [#s8140c5e]
CDNには、WAF 機能が組み込まれていることが多い。

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

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

**圧縮・変換 [#h4b31134]

***Gzip圧縮 [#i97fd9b0]
HTTP圧縮ではGzip圧縮が一般的

***Brotli圧縮 [#u9419a87]
BrotliはGzipよりも圧縮率が高い。

***転送量削減 [#pc5d44bc]

***WEBP圧縮 [#yc02a953]
非可逆圧縮のJPEGや可逆圧縮のGIF、PNGの置き換えを意図する規格
-非可逆圧縮モードでJPEGと比較して25-34%小さくなり、
-可逆圧縮モードでPNGと比較して28%小さくなる。

**[[HTTP/2 Server Push>https://techinfoofmicrosofttech.osscons.jp/index.php?HTTP%2F2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82]] [#m2fed284]
プッシュ配信

*参考 [#e2da875f]
-コンテンツデリバリネットワーク - Wikipedia~
https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%87%E3%83%AA%E3%83%90%E3%83%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF

-CDN とは?| Akamai JP~
https://www.akamai.com/jp/ja/cdn/what-is-a-cdn.jsp

**さくらのナレッジ [#l961ac4d]
-〜Web制作/運営の幅が広がるCDNを知ろう〜
--第1回:CDNってそもそも何?なんかサーバの負荷が下がるって聞いたんだけど!~
https://knowledge.sakura.ad.jp/19191/
--第2回:CDNのメリットとデメリット~
https://knowledge.sakura.ad.jp/19825/
--第3回:知らないと怖いキャッシュ対象の選び方~
https://knowledge.sakura.ad.jp/19831/
--第4回:とっつきにくいCDNの課金方法を攻略!~
https://knowledge.sakura.ad.jp/20217/
--第5回:実際にCDNを使ってみよう!~
DNS設定からキャッシュ配信まで一連の設定をご紹介~
https://knowledge.sakura.ad.jp/20370/
--第5回:レンタルサーバで提供されるキャッシュ機能の違い~
https://knowledge.sakura.ad.jp/20648/

**REDBOX Labo [#mdd482a4]
**キャッシュ屋ブログ | REDBOX Labo [#mdd482a4]
-CDN カテゴリ~
https://blog.redbox.ne.jp/category/cdn

--CDNの仕組み
---第1回:https://blog.redbox.ne.jp/what-is-cdn.html
---第2回:https://blog.redbox.ne.jp/what-is-cdn2.html
---第3回:https://blog.redbox.ne.jp/what-is-cdn3.html
---第4回:https://blog.redbox.ne.jp/what-is-cdn4.html

--構成
---CDN とCNAME Apexドメインの制限~
https://blog.redbox.ne.jp/cdn-cname-apex.html
---CDNとWAFが選ばれる理由(セキュリティ対策)~
https://blog.redbox.ne.jp/cdn-waf.html

--キャッシュ

---HTTPヘッダチューニング Etag・Last-Modified~
https://blog.redbox.ne.jp/http-header-tuning.html
---HTTPヘッダチューニング Expiresヘッダについて~
https://blog.redbox.ne.jp/http-header-expires.html
---CDN の設定 キャッシュコントロールする手段 メリット・デメリット~
https://blog.redbox.ne.jp/cdn-cache-control.html

--圧縮・変換

---CDN でWEB高速化 コンテンツ圧縮(gzip)の設定と注意点~
https://blog.redbox.ne.jp/cdn-gzip-compress.html
---WEBスピード向上・転送量削減する Brotli 圧縮と CDN の連携~
https://blog.redbox.ne.jp/category/cdn
---画像変換 サービスの仕組み転送量削減と WebP~
https://blog.redbox.ne.jp/image-optimize-service.html
---オンライン学習動画をCDNで負荷分散(テレワーク対策)~
https://blog.redbox.ne.jp/online-movie-cdn-education.html

--デバッグ・チューニング
---CDN で高いHIT率にするチューニングとは~
https://blog.redbox.ne.jp/cdn-high-hitrate-cookie-query.html
---CDN のデバッグ方法 ツールとレスポンス測定~
https://blog.redbox.ne.jp/cdn-debg-tool.html

--プロトコル
---TCP FAST OPENとは?~
https://blog.redbox.ne.jp/tcp-fast-open-cdn.html
---HTTP/2の特徴 HTTP/1.1との違いについて~
https://blog.redbox.ne.jp/http2-cdn.html
---HTTP/2 Server Pushとは?(CDN サーバープッシュでWeb高速化)~
https://blog.redbox.ne.jp/http2-server-push-cdn.html

--CMS 
---DrupalをCDNで爆速にする方法~
https://blog.redbox.ne.jp/drupal-advent-calendar2016-cdn.html
---CDNでWordPressを安全にHTTPS化する方法~
https://blog.redbox.ne.jp/wordpress-ssl-cdn.html

--その他
---CDN 料金 一覧2017年(高いCDNと安いCDNの違い)~
https://blog.redbox.ne.jp/cdn-price.html

**マイクロソフト系技術情報 Wiki [#b2ba7818]
***[[AzureのCDN>https://techinfoofmicrosofttech.osscons.jp/index.php?Azure%E3%81%AECDN]] [#a467cba1]
***[[キャッシュ・コントロールのHTTPヘッダ>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AEHTTP%E3%83%98%E3%83%83%E3%83%80]] [#e06ba5cb]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS