本文已参与「新人创作礼」活动,一起开启掘金创作之路。
CDN通过使用分布式服务器网络向用户交付资源来提高站点性能。
因为 CDN 减少了服务器负载,所以它们降低了服务器成本并且非常适合处理流量高峰。
CDN 的性能优势源于几个原则:
- CDN 服务器比源服务器更靠近用户,因此具有更短的往返时间 (RTT)延迟;
- 与从源服务器“直接”加载内容相比,网络优化允许 CDN 更快地交付内容;
- CDN 缓存消除了将请求传送到源服务器的需要。
源服务器是指 CDN 从中检索内容的服务器。
资源交付 Resource delivery
当使用 CDN 从源头交付资源时,会在客户端和附近的 CDN 服务器之间建立新连接。
旅程的其余部分(CDN 服务器和源服务器之间的数据传输)发生在 CDN 的网络上——这通常包括与源的现有持久连接。
这样做的好处有两方面:
- 在尽可能靠近用户的地方终止新连接,消除了不必要的连接设置成本(建立新连接很昂贵,需要多次往返);
- 使用预热连接允许以最大可能的吞吐量立即传输数据。
一些CDN在此基础上进一步改进,将流量通过分布在互联网上的多个CDN服务器路由到源服务器。
CDN服务器之间的连接是通过可靠和高度优化的路由进行的,而不是由边界网关协议(BGP)决定的路线。虽然BGP是互联网事实上的路由协议,但它的路由决定并不总是以性能为导向。因此,BGP确定的路由可能比CDN服务器之间的精细调整的路由性能要差。
缓存 Caching
在CDN的服务器上缓存资源,就不需要为了获得服务而让请求一直跑到源服务器。因此,资源的交付速度更快;这也减少了源服务器的负载。
向缓存添加资源
最常用的填充CDN缓存的方法是让CDN在需要时 "拉 "出资源--这被称为 "原点拉(origin pull)"。
第一次从缓存中请求特定的资源时,CDN将从原点服务器请求该资源,并对响应进行缓存。
通过这种方式,随着时间的推移,缓存的内容会随着更多未缓存的资源被请求而建立起来。
从缓存删除资源
CDN使用缓存驱逐(cache eviction)来定期从缓存中删除不那么有用的资源。
此外,网站所有者可以使用清除(Purging)操作主动明确地删除指定资源。
缓存驱逐 Cache eviction
缓存有一个有限的存储容量。当缓存接近其容量时,它会通过移除最近没有被访问过的资源或占用大量空间的资源来为新资源腾出空间。
这个过程被称为缓存驱逐(cache eviction)。一个资源从一个缓存中被驱逐,并不一定意味着它已经从CDN网络的所有缓存中被驱逐。
清除 Purging
- Purging清除(也称cache invalidation)是一种从CDN的缓存中删除资源的机制,而不必等待它过期或被驱逐。
它通常通过API执行。在需要撤回内容的情况下,清除是至关重要的(例如,纠正错别字、定价错误或错误的新闻文章)。除此之外,它还可以在网站的缓存策略中发挥关键作用。
- 如果CDN支持近乎即时的Purging,他就可以作为管理动态内容缓存的机制:使用一个长的TTL来缓存动态内容,然后在资源更新时清除。
通过这种方式,可以最大限度地延长动态资源的缓存时间,尽管事先不知道该资源何时会改变。这种技术有时被称为 "保持到被告知的缓存"。
- 当Purging被大规模使用时,它通常与一个被称为 "缓存标签 "或 "代理缓存键 "("cache tags" or "surrogate cache keys")的概念一起使用。
这种机制允许网站所有者将一个或多个额外的标识符(有时被称为"标签tags")与缓存资源联系起来。然后,这些标签可以用来进行高度细化的Purging。
例如,你可以给所有包含网站页脚的资源(例如,/about,/blog)添加一个 "页脚 "标签。当页脚需要被更新时,指示你的CDN去清除所有与 "页脚 "标签相关的资源。
Reference: web.dev/content-del…