CDN、CDNエッジサーバー、エッジコンピューティング

CDN(Content Delivery Network)
- 大容量のデジタルコンテンツをインターネット上で大量配信するためのネットワーク
- 大量配信の為のネットワークだけでなく、大量配信を通して収益を上げるための課金・認証システムも含めてCDNと呼ばれるようになってきている
- 簡単に言うと、負荷を肩代わりしてくれるレンタルサーバ+ネットワークのようなもの
なぜCDNを利用するか?
- 身近な例だと、PCやスマホのOSアップデートにも利用される
- アップデート初日は高い負荷がかかるが、それ以外はとても低い
- 最高負荷に合わせて、大容量サーバや高速通信ネットワークを用意すると低負荷の日にも無駄なコストがかかってしまう
- 上記の様な場合にコストよく運営する場合に存在しているのがCDN
CDNのおかげで、本体サーバには負荷がかからないようになる為、安定してサービスを提供できるようになる。

CDNは、DNSのCNAMEが利用される。
CNAMEで、あるドメインと別ドメインを紐付ける事が可能。
www.example.com のCNAMEを www.example.jp に設定すると、
www.example.com へアクセスしたユーザは www.example.com のURL表示のまま、
www.example.jp へアクセスすることができます。

リダイレクトと少し似ているが、異なるのは、リクエストしたURLのまま別サイトの内容を取得できる部分。
これを利用すれば、URLは自サイトのまま、別サーバからデータを配信することが可能。

オリジンサーバについて
CDNの場合、元のデータが入っているサーバを指す。
反対に、データを代わりにに配信してくれるサーバをキャッシュサーバやエッジサーバと呼ぶ。
CDNはざっくりいうと、DNS、キャッシュサーバ、オリジンサーバで成り立っている。

CDNの場合は、DNS経由(CNAME)でエッジサーバのドメインへアクセス
CDNの管理画面へは、オリジンサーバのドメインへアクセス
するのが理想

キャッシュサーバは、最初何も入っていない為、オリジンサーバまでデータを取得しに行く必要がある。
初回にオリジンサーバからデータを取得した後、2回目以降のアクセスは、キャッシュサーバから直接配信され、オリジンサーバへのアクセスは発生しない。
この状態を「キャッシュしている」という。
正しくデータをキャッシュしてくれれば良いが、オリジンサーバのデータを更新してもキャッシュサーバがデータを取りに来てくれなくて、間違ったデータが配信され続けるなんてこともある。
上記を防ぐために、CDNにはキャッシュ時間がある。
キャッシュ時間を30秒とすると、初回アクセスから30秒間は、キャッシュを持ち、
31秒後のアクセスからは、キャッシュサーバが再度オリジンへアクセスし、データを取得してくれる。
そして、また30秒間データを保持する。
このおかげで、ドメインへのアクセスが集中しても、初回アクセスから30秒間はオリジンサーバへのアクセスはなく、すべてCDNがさばくことになる。

CDNはキャッシュ時間と共に、キャッシュ対象ファイルを明確にしておく必要あり
- 一部のファイルをサブドメイン配下において、サブドメインは以下全体をキャッシュする方法
- URLごとCDN経由にし、ファイル単位でキャッシュするしないを決める方法

改めてこれを読む

VercelのEdge Function

CDNエッジで実行される関数を提供するプラットフォーム
CDNで実行する系
- Cloudflare Workers
- Fastly Compute@Edge
- AWS CloudFront Functions
- AWS Lambda@Edge
- Deno Deploy
- Vercel Edge Functions
- Netlify Functions

CDNだとキャッシュがコントロールしにくいが、Edge Functionだとそれが可能。
nginxやapache等でやっていたことがCDNで出来る。
キャッシュを聞かせつつ、オリジンへの負荷もかけない。

そしたらISRの話に行き着くのか?

エッジコンピューティングについて整理

エッジコンピューティングとは
クラウドで実行するプロセスを減らし、減らした分のプロセスを別のPCやサーバで処理することで、遅延、帯域幅の消費などを低減することを目的としたネットワークのこと。
クライアントとサーバ間で発生する長距離通信の量が最小限に抑えられる。