CDN
引入
- CDN 的全称是 (Content Delivery Network),即内容分发网络。
- 组成: 分布式存储 + 负载均衡 + 网络请求的重定向 + 内容管理 + 全局的网络流量管理,后两项为核心。内容服务基于缓存服务器,也称作代理缓存。
- 将源站的资源缓存到位于全球各地的 CDN 节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都从源站获取。
- 解决由于网络带宽小、用户访问量大、网点分布不均等原因,避免网络拥塞、缓解源站压力,提高用户访问网站的响应速度。
CDN 回源
- 回源是 CDN 领域的专用词,指的是 CDN 缓存服务器从源站获取所需要分发的资源。
- CDN 缓存服务器一般是不会主动回源的,只有在缓存服务器缺少用户请求的资源时(可能是该资源 CDN 缓存服务器没有缓存,也可能是缓存过期),CDN 缓存服务器才会向源站发起请求,获取所需要分发的资源。
- 通常有三种情况:
- CDN 节点没有对应资源时主动到源站获取资源
- 缓存失效后,CDN 节点到源站获取资源
- CDN 管理后台或者使用开放接口主动刷新
CDN 工作原理
调度原理
传统网络访问过程
- 用户输入访问的域名,操作系统向 LocalDns 查询域名的 ip 地址
- LocalDns 向 ROOT DNS 查询域名的授权服务器(这里假设 LocalDns 缓存过期)
- ROOT DNS 将域名授权 dns 记录回应给 LocalDns
- LocalDns 得到域名的授权 dns 记录后,继续向域名授权 dns 查询域名的 ip 地址
- 域名授权 dns 查询域名记录后,回应给 LocalDns
- LocalDns 将得到的域名 ip 地址,回应给用户端
- 用户得到域名 ip 地址后,访问站点服务器
- 站点服务器应答请求,将内容返回给客户端
CDN 访问过程
用户-本地 DNS-根 DNS-授权 DNS-智能调度 DNS-CDN 节点 IP
- 用户输入访问的域名,操作系统向 LocalDns 查询域名的 ip 地址
- LocalDns 向 ROOT DNS 查询域名的授权服务器(这里假设 LocalDns 缓存过期)
- ROOT DNS 将域名授权 dns 记录回应给 LocalDns
- LocalDns 得到域名的授权 dns 记录后,继续向域名授权 dns 查询域名的 ip 地址
- 域名授权 dns 查询域名记录后(一般是 CNAME),回应给 LocalDns
- LocalDns 得到域名记录后,向智能调度 DNS 查询域名的 ip 地址
- 智能调度 DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的 CDN 节点 ip 地址回应给 LocalDns
- LocalDns 将得到的域名 ip 地址,回应给用户端
- 用户得到域名 ip 地址后,访问站点服务器
- CDN 节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)
缓存原理
如果用户首次访问个数据,数据会从源服务器缓存到 CDN 服务器上,当有其他用户在再次访问这些数据的时候,数据会从 CDN 服务器反馈给用户
- 用户输入 URL,浏览器将解析过后的域名发给 DNS 服务器
- CDN 返回该域名对应的 CNAME,此时浏览器需要再次对获得的 CNAME 进行解析,才能得到 CDN 缓存服务器的 IP 地址。在此过程中全局负载均衡 DNS 解析服务器会将用户的访问请求定位到离用户最近、负载最轻的 CDN 缓存服务器上。这种技术也被称为“DNS 重定向”。DNS 服务器不是为每个请求返回相同的 IP 地址,计算出距离这个用户最近的 CDN 服务器,于是返回一个悉尼 CDN 节点的 IP 地址。这种方法也不一定是最优的,因为地理位置上最近的两个点,延迟可能反而很高。
- 再次解析后,浏览器得到 CDN 缓存服务器的实际 IP 地址,向缓存服务器发起请求。
- 缓存服务器根据浏览器提供的域名,通过内部 DNS 解析得到此域名源服务器的真实 IP 地址,再由缓存服务器向该服务器发起访问请求。
- 缓存服务器拿到数据后,一方面将数据发回浏览器,另一方面进行本地保存,以备后用。之后再次访问,数据将从 CDN 缓存服务器中被返回。CDN 不会永久保存数据,可以设置 CDN 的刷新频率,来达到数据的更新。
- 浏览器得到由缓存服务器发回的数据,并将其显示出来。
技术手段
- 高速缓存: 适用于静态内容
- 镜像站点服务器: 让内容直截了当地进行分布,适用于静态和准动态的数据同步。
网络架构
当用户访问加入 CDN 服务的网站时,域名解析请求将最终交给全局负载均衡 DNS 进行处理。全局负载均衡 DNS 通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户能够得到快速的服务。同时,它还与分布在世界各地的所有 CDN 节点保持通信,搜集各节点的通信状态,确保不将用户的请求分配到不可用的 CDN 节点上,实际上是通过 DNS 做全局负载均衡。
CDN 节点组成:
- 负载均衡设备: 负责每个节点中各个 Cache 的负载均衡,保证节点的工作效率;同时,负载均衡设备还负责收集节点与周围环境的信息,保持与全局负载 DNS 的通信,实现整个系统的负载均衡。
- 高速缓存服务器: 负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。
- 中心: 指 CDN 网管中心和 DNS 重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房。
- 边缘: 指异地节点,CDN 分发的载体,主要由 Cache 和负载均衡器等组成。
动态 CDN 特点
通过智能路由、多线回源、协议优化、数据压缩等技术,达到加速目的
- 首页加载速度更快
- 更可靠的连接(只要负责连接边缘服务器,如果直接走回源线路的话,线路会很长,不可靠)
常见问题
CDN 能缓存接口吗
- 在一般情况下,CDN 只会对 HTTP GET 请求的 URL 进行缓存,而 HTTP POST 请求的数据是不进行缓存的。因为 HTTP POST 请求中的数据有可能是用户的个人信息或者其他重要数据,一旦被缓存下来就会存在安全问题。
- 在一些特殊情况下,CDN 也可以缓存服务接口。比如,当 CDN 作为反向代理服务器(Reverse Proxy)时,CDN 会缓存后端服务的响应内容并且将响应结果返回给用户,这时候 CDN 就会缓存服务接口。
图片各格式的区别
- PNG: PNG 是一种无损压缩格式,支持透明度和高品质图像,最适合用于对精度和细节要求较高的图像,但文件体积较大。
- JPG/JPEG: JPG 是一种有损压缩格式,可以压缩图像文件尺寸而不影响图像质量,适用于对文件大小有限制的情况,但对于较大的文件,它可能会导致失真。不支持透明度
- BMP: BMP 是一种无压缩的图像格式,可以保持完美的图像质量,但是文件体积很大,适合用于处理要求高质量的文件。
- SVG: SVG 是一种矢量图形语言,可无限缩放而不失真,支持亚像素级渲染,适合用于网页与移动设备。
- TIFF: TIFF 是一种无损压缩格式,支持多种色彩模式,可用于高品质打印和艺术品的制作,但文件体积较大。
- WebP: 由谷歌开发的 WebP 格式是一种无损压缩图像格式,与 JPG 相比,可大幅减少文件体积,但在一些老旧的浏览器中可能不受支持。
- 有损 WebP 压缩使用预测编码对图像进行编码,相同 VP8 视频编解码器用于压缩视频中的关键帧的方法。预测编码使用相邻像素块中的值来预测值在一个块中,然后只编码差异。
- 无损 WebP 压缩使用已经看到的图像片段,以便精确重建新像素。如果没有,它也可以使用本地调色板 找到有趣的匹配。
- GIF: GIF 是一种支持动画和透明度的图像格式,对于一些小的简单动画效果,它是最好的选择,但对于大多数图像类型,它可能会有限制和色彩限制。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Nanyin の 小屋!
评论