テレビのアニメはどこから来る? / 第14話

第14話:イトは、二度目の『本館行き』を止めた|CDNはなぜ速い?

ピコルート第14話。最初のposter requestは遠いoriginへ走った。直後、同じposterを求める二人目が来る。残り5秒、イトは近いedgeのcopyを返すか、本館へもう一度送るかを選びます。

CDNキャッシュエッジサーバーオリジンサーバー10分更新

二度目のrequestが、遠い本館行きのrailへ入ろうとした。

イトが、gateを閉じた。

posterの正本は本館にある。

それでも彼は、取りに行かせなかった。

preview開始まで、あと五秒。

第13話で最後まで遅れていた上映posterを、二台の端末がほぼ同時に求めている。

GET /media/finale-poster

一人目のrequestは、すでに近くの配信拠点へ届いていた。

しかし、青い棚は空だった。

受付の灯りが、赤へ変わる。

CACHE MISS。

ここには、まだ返せるposterがない。

イト

近い棚が空なら、結局は本館へ行くしかない

ピコ

一人目はね。でも、そのresponseを通り過ぎさせるだけでいい?

ユイ

二人目が、もう入口まで来ています

origin railの奥で、poster cardが動き始めた。

残り四秒。

一人目は、遠いoriginを消せない

CDNは、世界中のどのrequestも最初から魔法のcopyで満たせるわけではない。

このfictional CDNでは、viewerのrequestを、そのrequestへ応答しやすいedgeへ送る。

物理的にいちばん近い建物だと断定する話ではない。networkのlatencyや経路、serviceの設定によって、応答を担当する拠点が選ばれる。

edgeにrequestと合うresponseがなければ、cache missだ。

そのときはoriginへrequestを送り、材料を取得する必要がある。

Amazon CloudFrontの公式配信手順でも、requestを応答に適したedge locationへ送り、objectがcacheになければoriginから取得し、viewerへ転送すると同時に次回のためcacheへ加える流れが説明されている。

CDN productや構成は一つではない。

ここで使うのは、その流れを持つ一つのfictional構成だ。

遠いoriginから、一人目のposter responseが戻ってくる。

イトの前に、二つの出口が開いた。

一つは、一人目のbrowserへ続くlane。

もう一つは、edgeの青い棚へ続く短いlane。

posterをviewerへ渡すだけなら、一人目の画面は完成する。

だが、棚は空のままだ。

イトはresponseを二つに裂いたのではない。

同じresponseをviewerへ流しながら、次のrequestに再利用できるcopyとしてedgeへ保存した。

一人目の画面に、posterがはまる。

青い棚にも、同じtargetへ結び付くposter cardが残った。

残り三秒。

二人目のrequestが来た

二人目のrequest tokenが、分岐へ入った。

targetは一人目と同じだ。

GET /media/finale-poster

origin行きの長いrailは、まだ一人目のtransferの光を引きずっている。

ピコが、三枚のroute cardを開いた。

  1. 正本があるoriginへ、もう一度送る
  2. edgeにある別の派手なimageを、すぐ返す
  3. requestを照合し、再利用できる同じposterをedgeから返す

一枚目なら、正本を取りに行ける。

けれど、一人目と同じ長い往復がもう一度増える。

二枚目なら速い。

しかし、頼まれたtargetとは違う。速く届いても、別の上映posterでは失敗だ。

三枚目を選ぶには、ただ「似た絵が棚にある」だけでは足りない。

requestを、保存したresponseのcache keyと照合する必要がある。

同じURLに見えても、同じcopyとは限らない

cache keyは、どのrequestがどのstored responseを再利用できるかを見分ける鍵だ。

このfictional CDNでは、今回のposterについてrequest targetを中心にkeyを組み立てている。

実際の構成ではquery、header、cookieなど、ほかのrequest要素をkeyへ含める場合がある。

CloudFrontのcache key公式説明でも、requestが同じcache keyになり、有効なobjectがedge cacheにあればcache hitになる。missならoriginへ取りに行き、取得したobjectをedgeへ保存する。

イトは二人目のtokenと、青い棚のposter cardを重ねた。

targetが合う。

このrequestへ再利用できる。

まだfreshとして扱える。

RFC 9111 HTTP Cachingでは、cacheはresponse messageのlocal storeと、その保存・取得・削除を制御する仕組みとして定義される。freshなstored responseは、originでのvalidationなしに再利用でき、latencyとnetwork overheadを減らせる。

ピコ

近いから、何でも返していいわけじゃないよ

マコト

同じrequestに使えるcopyかを確かめて、初めて近道になる

イト

二人目は、同じposterをもう一度本館へ取りに行かなくていい

残り二秒。

イトは、一枚目のorigin cardを伏せた。

二枚目の別image cardも戻す。

三枚目を、二人目のrequestへ重ねた。

長いorange railのgateを閉じる。

近いedge shelfからbrowserへ続く、短いcyan laneを開く。

CACHE HIT。

poster cardが、二人目の空frameへ滑り込んだ。

イトが二人目のrequestの前で長いorange origin laneのgateを閉じ、同じ上映posterを持つ近いedge shelfから短いcyan laneをbrowserへ開いている
一人目のmissがedgeへ残したcopyを照合し、二人目のorigin往復を一つ消す。

速くしたのは、距離だけではない

残り一秒。

二台の画面に、同じposterが表示された。

一人目は、edge missからoriginへ取りに行った。

二人目は、edge hitで近いcopyを受け取った。

一人目: browser → edge MISS → origin → edge → browser
二人目: browser → edge HIT → browser

二人目の経路から、origin往復が一つ消えている。

同じrequestが何度も来る場面では、edgeのstored responseが使えるほど、originへ届くrequestも減らせる。

originの負荷を分け、viewerが待つ時間を短くできる場合がある。

ただし、CDNという名前だけで必ず速くなるわけではない。

cache missならoriginへ行く。

cacheしないresponseもある。

keyが細かく分かれれば、見た目が同じrequestでも別物として扱われる。

networkの状態や設定によって、edgeを経由するcostが勝つ場合もある。

今回、二人目を速くしたのは、一人目が持ち帰ったresponseを、同じrequestに使えるcopyとしてedgeへ残していたからだ。

ユイ

近い拠点、再利用できるcopy、originへ戻らないhit。三つがつながって速さになりました

イト

一人目の待ち時間を、二人目の近道に変えたんだ

preview開始の光が点いた。

二人目を速くしたのは、CDNという名前ではない。

一人目のresponseをedgeへ残し、origin往復を一つ消したことだ。

棚のposterだけ、昨日のまま

そのとき、本館のorigin shelfでposterが差し替わった。

上映開始時刻が変わった新版だ。

originのcardは、新しい青い縁へ変わる。

だが、イトの近くにあるedge shelfのcardは、古い橙の縁のままだった。

三人目のrequest lightが近づいてくる。

targetは同じ。

cache keyも合う。

edgeの時計は、まだそのcopyをfreshとして示していた。

速く返す条件は揃っている。

新しく返す条件は、揃っているのだろうか。

イトの手が、cyan laneのswitchの上で止まった。

「originが変わったのに、ここはどうやって気づくんだ?」

次回:速いcopyは、いつ古くなる?

一人目のcache missでoriginからposterを取得し、edgeへcopyを残した。

二人目のcache hitでは、そのcopyを使ってorigin往復を省いた。

次に迫るのは、速さと新しさの衝突だ。

freshness、validation、browser cache、CDN cacheはどうつながるのか。

次回、ピコルート第15話。

昨日のposterを、いつ疑う?

画面のむこう側をもっと知る

CDN、edge、origin、cache hit/missの流れを図で整理するなら、CDNとはで確かめられます。

この物語を、解説で深める

第14話で生まれた疑問を、解説記事で少し深く見ていきます。物語で感じた不思議さを残したまま、言葉と仕組みを順番に整理しましょう。

CDNとは?配信の仕組みとキャッシュ・オリジンの違いを読む