跳到主要内容

CDN

  • cdn刷新
  • cdn缓存
  • cdn预热
  • 静态资源部署到CDN
  • CDN可以分布到各个地区的服务器
    • 可以将内容分发到全球的每个地区服务器上
  • CDN可以根据用户自动找到距离用户最近的服务器进行内容分发

CDN (Content Delivery Network,即内容分发网络)指的是一组分布在各个地区的服务器。用于更加有效的向用户发布内容, 这些服务器存储着数据的副本,因此服务器可以根据哪些服务器与用户距离最近,来满足数据的请求。 CDN 提供快速服务,较少受高流量影响。

COS/OSS和CDN配合​

  • COS/OSS:对象存储(源站)、CDN是内容分发网络
    • COS (Cloud Object Storage) 对应腾讯云
    • OSS (Object Storage Service) 对应阿里云
  • 把静态资源上传到源站对象存储之后,源站会进行CDN的内容分发,分发到每个地区中,提高用户访问资源的响应速度

把资源直接放在对象存储中(源站)会出现的问题

  • 偏远地区用户访问慢
  • 当用户量很大的时候,服务器可能顶不住

​

OSS配合CDN​

可以将OSS作为CDN的源站。用户将静态资源存储在OSS中,然后通过CDN进行缓存和加速。当用户请求资源时,CDN会根据离用户最近的节点提供缓存内容,减少延迟。如果缓存中没有,CDN会回源到OSS获取资源,并缓存到节点。这样可以降低源站(OSS)的压力,同时利用CDN的全球节点加速访问

  • OSS作为CDN的源站,通过绑定加速域名,设置缓存规则,优化资源分发
  • OSS作为源站存储静态资源,CDN回源获取数据,这样可以减少OSS的外网流量费用,同时提高访问效率
  • 考虑点:HTTPS配置、缓存命中率优化

为什么要用 CDN​

  • 提升首次请求的响应能力,借助 CDN 的能力是更好不过了
  • 使用CDN,分散服务器压力 !! !!
  • 如果应用程序web服务器离用户更近,那么一个http请求的响应时间将缩短.
  • 就近增强用户访问体验

CDN的内部原理​

  • CDN就是把一些静态资源分散在各个区域的服务器
  • 用户访问的时候,返回离用户最近的资源

CDN是如何工作?​

1、用户在自己的浏览器中输入要访问的网站域名。 2、浏览器向本地DNS服务器请求对该域名的解析。 3、本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。 4、本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以迭代方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。 5、浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址 。 6、浏览器获取IP地址之后,经过标准的TCP握手流程,建立TCP连接。 7、浏览器向服务器发起HTTP请求。 8、服务器将用户请求内容传送给浏览器。 9、经过标准的TCP挥手流程,断开TCP连接。

CDN的缓存和回源​

  • CDN 的核心点有两个,一个是缓存,一个是回源。(CDN有个源站的概念,源站就是提供内容的站点(网站的真实服务器), 从源站取内容的过程叫做回源。)
  • “缓存”就是说我们把资源 copy 一份到 CDN 服务器上这个过程,“回源”就是说 CDN 发现自己没有这个资源(一般是缓存的数据过期了),转头向根服务器(或者它的上层服务器)去要这个资源的过程。

CDN 与前端性能优化​

  • CDN 往往被用来存放静态资源
  • 所谓“静态资源”,就是像 JS、CSS、图片等不需要业务服务器进行计算即得的资源
    • 而'动态资源',顾名思义是需要后端动态生成的资源

CDN回源理解​

  • 当 cdn 缓存服务器中没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后如果还是没有,就会回到我们自己的服务器去获取资源。 那都有哪些时候会回源呢?没有资源,资源过期,访问的资源是不缓存资源等都会导致回源

CDN是如何更新数据的?​

  • cdn可以设置缓存,缓存失效了可以更新数据
    • CDN可以通过配置,定期获取源服务器上的内容,来定期同步更新
  • cdn 是如何更新数据的?分两种,主动和被动。被动就是利用回源就可以被动在途经的 cdn 节点缓存数据。 而主动指的是,我们从服务器主动往 cdn 推送数据。
  • 如果数据已经过期,CDN发出回源请求,来拉取最新的数据
    • 回源:就会回到当前最新的服务器去获取资源

CDN如何合理布局节点​

CDN合理地布局节点以提高访问速度 CDN节点布局是影响CDN性能的关键因素之一,为了合理布局CDN节点,需要考虑以下几个方面

  1. 覆盖范围:节点的位置,让用户尽可能地近距离访问到CDN。
  2. 用户密度:需要对不同地区的用户密度进行分析,并在密度较高的地区布局更多的节点。
  3. 网络条件:需要考虑网络环境,在网络较好的地区布局更多的节点,以保证高速传输。

CDN如何优化​

  1. 缓存策略的优化:设置合适的过期时间,减少不必要的请求。
  2. 节点的选择和布局:选择离用户最近的节点,并合理地布局节点以提高访问速度。
  3. 开启Gzip压缩:减小传输数据量,提高访问速度。
  4. 协议优化:使用HTTP/2或QUIC协议,提高传输效率。

协议优化指的是使用更高效的网络传输协议来提高CDN的性能。两种常用的协议是HTTP/2和QUIC。

  • HTTP/2 它通过多路复用、二进制传输、服务器推送等技术来提高传输效率
  • QUIC是网络传输协议,基于UDP,用于提高网络传输效率的协议

CDN预热​

CDN加速​

跨区域加速不稳定情况​

  • cdn加速根据区域配置,配置了国外加速,大陆内访问可能会有节点不稳定情况

问题分析​

1、当CDN加速区域仅配置为中国大陆以外时,中国大陆用户访问可能面临以下问题:

  • 节点调度偏差:未备案域名可能被强制解析到海外节点(如中国香港),导致高延迟(>150ms)。
  • 网络路径劣化:跨境链路受国际带宽波动影响,出现丢包(如电信跨境链路丢包率可达5%-10%)。
  • 合规限制:未完成ICP备案的加速域名在中国大陆被拦截,触发访问阻断

解决方案​

区域配置方案实现方式
中国大陆独立加速域名(如cn-cdn.example.com),开启ICP备案,选择“仅中国内地”加速区域通过阿里云CDN控制台分区域配置,结合DNS解析(国内用户解析至境内CNAME)
海外区域独立加速域名(如global-cdn.example.com),选择“全球(不含中国内地)”加速区域使用海外CDN服务商(如Cloudflare)或阿里云国际版,配置GSLB智能调度

CDN缓存标识​

  • 可以通过响应标头的x-cache

x-cache​

X-Cache 是 CDN 服务商定义的非标准响应头,用于标识请求资源的缓存命中状态。其值由两部分构成:

  1. 基础状态标识

    • HIT:资源命中缓存
    • MISS:未命中缓存,需回源获取
    • REFRESH_MISS:缓存已过期,触发刷新验证
  2. 缓存层级与类型标识

    • TCP_MEM_HIT:命中内存缓存(内存加速层,响应速度最快)
    • TCP_HIT:命中磁盘缓存(持久化存储层)
    • TCP_MISS:完全未命中任何缓存层
    • TCP_REFRESH_MISS:缓存过期后重新验证失败

如x-cache响应标头示例

  • x-cache HIT TCP_MEM_HIT dirn:-2:-2
    • 通过MEM_HIT标识 表示缓存
  • x-cache MISS TCP_MISS dirn:-2:-2
    • 通过MISS标识 表示不缓存

CNAME​

  • CNAME(Canonical Name)就是“域名指向另一个域名”
  • DNS 常见的两种记录可以这样区分
    • 域名 -> ip
    • 域名 -> CNAME -> 另一个域名 -> ip
  • CDN中,通常需要配置 CNAME
    • CDN 厂商希望自己决定用户应该访问哪个 CDN 节点
    • CDN 厂商可以根据地区、网络、节点负载等因素动态返回不同 IP,而你不需要自己维护这些 IP
text
www-test.com
↓
CDN提供的 CNAME 域名
↓
CDN进行节点调度
↓
163.181.81.234

CDN相关问题​

  • 动态内容如何做CDN缓存
  • 缓存有效期控制
  • 缓存预热
  • 源站选择
  • 源站一定是对象存储吗