エッジサーバーは、利用者に近い場所に置かれ、配信や処理を受け持つサーバーです。 CDN の中核であり、利用者との物理的な距離を縮めることで応答を速くします。
オリジンとの関係
配信は2階建てになっています。大元のデータを持つのがオリジンサーバー、利用者に近い場所で代わりに返すのがエッジサーバーです。
つまりエッジの効果はヒット率で決まります。「CDN を入れたのに速くならない」ときは、そもそもキャッシュされているかを疑ってください。レスポンスヘッダーにヒット・ミスを示す情報が入っているのが普通です。
何をキャッシュしてよいかを決めるのはオリジン
エッジは勝手に判断しません。オリジンが返す Cache-Control を見て、保存の可否と保存期間を決めます。キャッシュ設定はCDN側ではなくアプリ側の仕事である、という理解が実務では重要です。
いちばん怖い事故
ログイン後のページをキャッシュしてしまうと、他人のマイページが別の利用者に表示されます。 実際に起きている事故です。
防ぐには、個人ごとに内容が変わる応答へ確実にキャッシュ禁止を指定し、Cookie の有無で応答が変わる場合はその旨を伝える設定を入れます。「静的ファイルだけキャッシュする」と明示的に決めるのが、もっとも事故が少ない運用です。
エッジで動かす処理
近年は配信だけでなく、エッジ上で軽い処理を実行できるサービスが一般的になっています。リダイレクト、A/Bテストの振り分け、認証チェックなどをオリジンへ届く前に済ませられます。ただし実行環境には制約があり、通常のサーバー用コードがそのまま動くとは限りません。
実務で見るポイント
- 更新したのに古い内容が出るときは、キャッシュのパージ(削除)が必要
- 画像やCSSはファイル名にハッシュを含めると、パージ自体が不要になる
- 動的なAPIを無条件にキャッシュしない。速さより正しさが先