CDN 服务本身并不具备域名解析功能,而是依托于 DNS 智能解析功能,由 DNS 根据用户所在地、所用线路进行智能分配最合适的 CDN 服务节点,然后把缓存在该服务节点的静态缓存内容返回给用户。
如果域名转换为 IP
这一过程可用性低且延迟高,那么肯定会对 CDN 性能产生不良影响。
另外,请确保在 DNS 记录上使用较高的 TTL
(生存时间),以便解析器可以长时间缓存记录。
保持 CDN 与源之间的等待时间短暂,是 CDN 应对缓存未命中响应的有效的优化方法。
如果无法将源站点放在 CDN 附近,请考虑使用源防护(origin shield
)。
Origin shield
是 CDN 和源之间的额外缓存层。origin shield
有助于减轻源点负担,它会在在源级别将来自多个 edge CDN 的传入请求折叠成一个请求,以加快缓存未命中响应的速度。
一个好的 origin shield
可以减少 70%
到 80%
的源负载,即使它前面有一个性能良好的 edge CDN
。
IPv6 能提高「网速」通常是指新建的 IPv6 网络通常具有更大的带宽(比如中国正在新建的 CERNET2 骨干网动辄 10Gbps、100Gbps 的连接带宽)、更好的流量控制、更少的 NAT 从而实现更高效的网络拓扑结构(IP 地址资源多从而不需要对数据包进行多次地址翻译和转发)。在这些方面 IPv6 确实是能提高「网速」的。
Facebook 已经对 IPv6 对性能的影响进行了大量研究,并得出了积极的效果:
我们已经观察到,与 IPv6 相比,访问 Facebook 的速度可以提高 10-15%。
原始服务器上的初始拥塞窗口参数(initcwnd
)的值可能为 10
。这意味着服务器在第一次往返过程中通过新连接发送了 10
个数据包。
值为 10
不是不可以,但是更高的 initcwnd
可能会对 TCP 性能产生明显的积极影响,从而导致源和 CDN 之间的内容传输更快。
一些 CDN 的 initcwnd
为 10,其他 CDN 的值则高得多。
重要提示:请勿「简单的」的增加服务器上的 initcwnd
值并认为这样会很好。
阅读更多:
当 CDN 需要从您的源服务器中提取内容时,两个服务器之间必须存在 TCP
连接。
理想情况下,该连接已经存在并且可以重复使用,从而节省了建立新的连接时的往返时间和宝贵的毫秒值。
CDN 或源可能会终止连接,您无法控制 CDN 保持连接存活的时间,但是您可以控制源上的 keep-alive
行为。
永远不要在源端关闭连接 - 担心许多 CDN 服务器与您的源点建立 TCP 连接并且该源无法处理该问题?设置一个 Origin shield
。
您有安全的 HTTPS 来源吗?如果是,可以执行几种优化来提高 CDN 性能。
举个例子:TLS
错误启动,TLS
会话恢复和 TLS
记录大小优化。
在开始使用这些 TLS
优化之前,请检查您的 CDN 是否需要其他方面的帮助,才能使这些优化生效。
进一步阅读:
减少内容的字节大小或「权重」对于加快 CDN 性能非常有效。传输的字节越少,内容到达用户的速度就越快。
您可以通过多种方法来最小化字节大小以增强 CDN 性能,压缩是最有效且通常最容易实现的方法。
延伸阅读两篇减少字节大小的文章 minification 和 图像优化。
如何使 CDN 尽可能长时间地缓存对象并最大化缓存命中率?
开箱即用,大多数或所有 CDN 都将遵循源服务器通过 Cache-Control
标头发送的缓存指令,这是提高 CDN
性能的非常有效的工具。
一些例子:Cache-Control
: max-age=86400
告诉 CDN 和浏览器该对象可能被缓存 86400
秒。
Cache-Control
: max-age=3600, s-maxage=86400
通知 CDN 它可能将对象缓存 24
小时,而浏览器应将对象缓存不超过 1
小时。注意:s-maxage
默认情况下,并非所有 CDN `都支持。
Cache-Control
: max-age=86400, stale-while-revalidate=300
指示 CDN 和浏览器将对象缓存 24
小时,然后在这 24
小时结束时,当从原始位置获取新内容时,CDN 可以提供陈旧的响应长达 300
秒。
推荐看本专栏这篇文章:彻底理解浏览器缓存机制。
了解有关缓存控制的更多信息:
当 CDN 收到对过期对象的请求(在高速缓存中,但已过期)时,CDN 必须先联系源站点,然后再向用户发送响应。
如果缓存的对象具有Last-Modified / ETag
标头,则 CDN
可以通过添加 If-Modified-Since / If-None-Match
标头来有条件地发起请求,源站点可以决定以轻量级 304
非修改响应(只有标头响应),还是以 200 OK
重新返回响应(标头和正文)。
推荐看本专栏这篇文章:彻底理解浏览器缓存机制。
显然,304
非修改响应的性能要优于 200 OK
响应,因为响应的大小要小得多,因此 CDN
与源之间的往返次数更少。
将原始服务器配置为始终发送 Last-Modified / ETag
标头,因为这大大有助于提高缓存的性能。
你的源不应该向 CDN 提供带有诸如 Vary: Referer
、Vary: User-Agent
,Vary: Cookie
或 Vary: User-Agent,Cookie
标头,这些 Vary 标头对缓存命中率和 CDN 性能有很大的负面影响。
重点:
Vary: *
,具有该标头的对象将永远不会存储在 CDN 缓存中。Vary: Accept-Encoding
带有(Gzip)压缩内容的标头。进一步阅读:使用 Vary 标头的最佳做法
分享这篇文章的原因:我认为原作者是一位网络性能优化大师,他本人的博客优化的非常棒。
同系列文章:
参考链接: