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节点,需要考虑以下几个方面
- 覆盖范围:节点的位置,让用户尽可能地近距离访问到CDN。
- 用户密度:需要对不同地区的用户密度进行分析,并在密度较高的地区布局更多的节点。
- 网络条件:需要考虑网络环境,在网络较好的地区布局更多的节点,以保证高速传输。
CDN如何优化
- 缓存策略的优化:设置合适的过期时间,减少不必要的请求。
- 节点的选择和布局:选择离用户最近的节点,并合理地布局节点以提高访问速度。
- 开启Gzip压缩:减小传输数据量,提高访问速度。
- 协议优化:使用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 服务商定义的非标准响应头,用于标识请求资源的缓存命中状态。其值由两部分构成:
-
基础状态标识
HIT:资源命中缓存MISS:未命中缓存,需回源获取REFRESH_MISS:缓存已过期,触发刷新验证
-
缓存层级与类型标识
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
www-test.com
↓
CDN提供的 CNAME 域名
↓
CDN进行节点调度
↓
163.181.81.234
CDN相关问题
- 动态内容如何做CDN缓存
- 缓存有效期控制
- 缓存预热
- 源站选择
- 源站一定是对象存储吗