CDN(Content Delivery Network, 内容分发网络)是指一种通过互联网互相连接的电脑网络系统, 利用最靠近每位用户的服务器, 更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户, 来提供高性能、可扩展性及低成本的网络内容传递给用户。
典型的 CDN 系统由下面三个部分组成:
Cache 设备, cache(边缘 cache)负责直接响应最终用户的访问请求, 把缓存在本地的内容快速地提供给用户。同时 cache 还负责与源站点进行内容同步, 把更新的内容以及本地没有的内容从源站点获取并保存在本地。Cache 设备的数量、规模、总服务能力是衡量一个 CDN 系统服务能力的最基本的指标GSLB)和本地负载均衡(SLB)。全局负载均衡主要根据用户就近性原则, 通过对每个服务节点进行“最优”判断, 确定向用户提供服务的 cache 的物理位置。本地负载均衡主要负责节点内部的设备负载均衡CDN 一般会用来托管 Web 资源(包括文本、图片和脚本等), 可供下载的资源(媒体文件、软件、文档等), 应用程序(门户网站等)。使用 CDN 来加速这些资源的访问。
引入 CDN 的作用在于:
CDN, 减少了服务器的负载CDN 有助于防御 DDoS、MITM 等网络攻击:
DDoS: 通过监控分析异常流量, 限制其请求频率MITM: 从源服务器到 CDN 节点到 ISP(Internet Service Provider), 全链路 HTTPS 通信除此之外, CDN 作为一种基础的云服务, 同样具有资源托管、按需扩展(能够应对流量高峰)等方面的优势。
CDN 和 DNS 有着密不可分的联系, 先来看一下 DNS 的解析域名过程, 在浏览器输入 www.test.com 的解析过程如下:
hosts 文件ISP(网络服务提供商)的 LDNS 服务器查询LDNS 服务器没找到, 会向根域名服务器(Root Server)请求解析, 分为以下几步:
TLD)服务器如 .com, .cn, .org 等的地址, 该例子中会返回 .com 的地址SLD)服务器的地址, 本例子会返回 .test 的地址IP, 本例子会返回 www.test.com 的地址Local DNS Server 会缓存结果, 并返回给用户, 缓存在系统中用户未使用 CDN 缓存资源的过程:
DNS 对域名进行解析(就是上面的 DNS 解析过程), 依次得到此域名对应的 IP 地址IP 地址, 向域名的服务主机发送数据请求用户使用 CDN 缓存资源的过程:
URL, 经过本地 DNS 系统的解析, 发现该 URL 对应的是一个 CDN 专用的 DNS 服务器, DNS 系统就会将域名解析权交给 CNAME 指向的 CDN 专用的 DNS 服务器CND 专用 DNS 服务器将 CND 的全局负载均衡设备 IP 地址返回给用户CDN 的全局负载均衡设备发起数据请求CDN 的全局负载均衡设备根据用户的 IP 地址, 以及用户请求的内容 URL, 选择一台用户所属区域的区域负载均衡设备, 告诉用户向这台设备发起请求IP 地址返回给全局负载均衡设备IP 地址返回给用户如果缓存服务器没有用户想要的内容, 那么缓存服务器就会向它的上一级缓存服务器请求内容, 以此类推, 直到获取到需要的资源。最后如果还是没有, 就会回到自己的服务器去获取资源。
CDN 服务: 如果想要开源一些项目, 可以使用第三方的 CDN 服务CDN 进行静态资源的缓存: 将自己网站的静态资源放在 CDN 上, 比如 js、css、图片等。可以将整个项目放在 CDN 上, 完成一键部署CDN 也是支持流媒体传送的, 所以直播完全可以使用 CDN 来提高访问速度。CDN 在处理流媒体的时候与处理普通静态文件有所不同, 普通文件如果在边缘节点没有找到的话, 就会去上一层接着寻找, 但是流媒体本身数据量就非常大, 如果使用回源的方式, 必然会带来性能问题, 所以流媒体一般采用的都是主动推送的方式来进行