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
在处理流媒体的时候与处理普通静态文件有所不同, 普通文件如果在边缘节点没有找到的话, 就会去上一层接着寻找, 但是流媒体本身数据量就非常大, 如果使用回源的方式, 必然会带来性能问题, 所以流媒体一般采用的都是主动推送的方式来进行