建站日志 09-16:缓存的思想实验
接完 CDN 缓了一个周末,想清楚一件事:动态页不缓存,就是让每一只爬虫都打到源站。
这天没动生产。缓存体系接完,总得想想它到底意味着什么。
itswe 现在有四层缓存:程序内的页面缓存、边缘节点、浏览器本地、再加上资源文件版本号这套“改了必更新”的手艺。四层各管一段,理顺了相安无事,理不顺就是“我明明改了你怎么看不到”的灵异现场。
但真正让人睡不着的,是那一条规则:动态页面一律不缓存。
它的本意是保登录态和实时数据,没错。可它的另一面是:主站每个页面请求,不管来的是真人、谷歌还是爬虫洪水,边缘全都不接,原封不动打到源站。源站是台要渲染动态页的服务器,每一发都是真实成本。
数字很快会验证这个担心——后来的爬虫洪水,单日几万次请求全部是冲着最重的动态翻页去的。边缘不缓存等于城门对外敞开,城墙直接暴露。
解药其实早就在行业里摆着:把页面变成静态的,或者静态化缓存。静态产物可以被边缘无限期持有,源站只伺候 cache miss,洪水的火力再猛也砸不到肉上。这个念头这天种下了。后面给项目选博客程序时,静态优先几乎是一票通过——种子的来历就在这。
架构决策有时候就是这样:当时只是一个模糊的不安,几个月后回头看,它决定了整条技术路线。