请教 CDN 即使缓存失效 (Instant Cache Invalidation) 的原理

2022-01-11 16:47:10 +08:00
 FaiChou

知名的部署平台如 Netlify 、AWS Amplify 都支持这个功能。

Netlify Edge 介绍: https://www.netlify.com/blog/2015/09/11/instant-cache-invalidation/

AWS Amplify 介绍: https://aws.amazon.com/cn/blogs/mobile/aws-amplify-console-supports-instant-cache-invalidation-and-delta-deployments/

大概表现为源站更新后,不同于传统 CDN 刷节点需要等待十几分钟,客户端立即可以拿到最新的文件。我大概了解怎么通过版本化来标识同名文件,但想不通 CDN Edge 是怎么知道当前版本已经失效,要去源站拉取最新版本的。

如果主动通知 CDN Edge, 那不是和传统的刷新一样了吗。。

1749 次点击
所在节点    程序员
8 条回复
coolzjy
2022-01-11 16:54:41 +08:00
猜测是一个类似 stale-while-revalidate 的机制吧,定期查询源站是否更新。
只要没有源站主动触发 CDN flush 应该是做不到更新后的第一个请求就可以拿到最新版本的。
eason1874
2022-01-11 16:56:47 +08:00
节点是他们自己的,他们想让哪部分资源失效不就跟实时更新 CDN 配置一样么

也可以说跟传统刷新一样,只是粒度不一样,一个整站一个 URL
shunia
2022-01-11 17:10:28 +08:00
居然都支持这么多年了吗?我们还在用那个传统的 html 不缓存的套路。。。赶紧学习一下,让运维看看
它图里的源站指的是 aws 或者 netlify 自己的源站,所以文件变更就触发下次刷新基本上就和 edge 拉取 origin 的接口返回了不同的值一样简单,应该是在 edge 上部署了支持版本立即触发更新的逻辑,比如说在 edge 上都部署了支持版本管理的 sidecar ,通过接收 push ( pull 还是做不到“下一次更新”)的能力来支持下一次请求更新。
wonderfulcxm
2022-01-11 17:17:18 +08:00
我点进去读了一下 netlify 的文章,最后的 The tech part 说了一点,部署到 Netlify 时,它会对 js,css ,图片做一个指纹对比,这部分是使用 Akamai 的 CDN ,如果指纹不一致就刷新文件,估计跟传统 CDN 刷新是一样的。html 是放在自己的 CDN 上,这部分是它自己刷新的。
为什么立刻就可以看到更新的效果?因为它用了多层的 CDN ,你看到的是最新的,其他的节点也是需要时间更新。
alphanow
2022-01-11 21:10:37 +08:00
HTTP 有一组 header ETag / If-None-Match.
版本比对是在服务端完成的
ragnaroks
2022-01-12 12:43:12 +08:00
etag ,事实上客户端(浏览器)才是让你看到最新页面的功臣
liaohongxing
2022-01-12 13:45:36 +08:00
现阶段最强的 stale-while-revalidate ,nextjs 的增量静态再生。全自动,无需特别设置
https://vercel.com/docs/concepts/edge-network/caching
liaohongxing
2022-01-12 13:49:57 +08:00
比如下面这个 ,你点击 github 的 like , 当前套上 CDN 的页面数字马上会有反应 :
https://reactions-demo.vercel.app/
这是详细介绍:
https://vercel.com/docs/concepts/next.js/incremental-static-regeneration

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/827616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX