CDN
CDN (全称 Content Delivery Network),即内容分发网络
官方的话
- 构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块, 使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。
人话
- CDN 就是根据用户位置分配最近的资源。
所以用户在上网的时候不用直接访问源站,而是访问离他 “最近的” 一个
CDN
节点,术语叫边缘节点,其实就是缓存了源站内容的代理服务器。如下图:
- 原理分析
在没有应用 CDN 时,我们使用域名访问某一个站点时的路径为 > 用户提交域名 → 浏览器对域名进行解释 →
DNS
解析得到目的主机的IP
地址 → 根据IP
地址访问发出请求 → 得到请求数据并回复 应用CDN
后,DNS
返回的不再是IP
地址,而是一个CNAME
(Canonical Name
) 别名记录,指向CDN
的全局负载均衡CNAME
实际上在域名解析的过程中承担了中间人(或者说代理)的角色, 这是CDN
实现的关键。
静态资源尽量使⽤ CDN
加载,由于浏览器对于单个域名有并发请求上限,可以考虑使⽤多个 CDN
域名。对于 CDN
加载静态资源需要注意 CDN
域名要与主站不同,
否则每次请求都会带上主站的 Cookie
。
负载均衡
由于没有返回
IP
地址,于是本地DNS
会向负载均衡系统再发送请求 ,则进入到CDN
的全局负载均衡系统进行智能调度:- 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点
- 看用户所在的运营商网络,找相同网络的边缘节点
- 检查边缘节点的负载情况,找负载较轻的节点
- 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等 结合上面的因素,得到最合适的边缘节点,然后把这个节点返回给用户,用户就能够就近访问 CDN 的缓存代理
- CDN 缓存更⽅便
- 突破浏览器并发限制
- 节约 cookie 带宽
- 节约主域名的连接数,优化⻚⾯响应速度
- 防⽌不必要的安全问题
http 重定向负载均衡:调度者根据策略选择服务器以 302 响应请求,缺点只有第⼀次有效果,后续操作维持在该服务器 dns 负载均衡:解析域名时,访问多个 ip 服务器中的⼀ 个(可监控性较弱)。
反向代理负载均衡:访问统⼀的服务器,由服务器进⾏调度访问实际的某个服务器,对统⼀的服务器要求⼤,性能受到 服务器群的数量。
多台服务器共同协作,不让其中某⼀台或⼏台超额⼯作,发挥服务器的最⼤作⽤。
内容分发⽹络,基本思路是尽可能避开互联⽹上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
缓存代理
缓存系统是
CDN
的另一个关键组成部分,缓存系统会有选择地缓存那些最常用的那些资源其中有两个衡量CDN
服务质量的指标:- 命中率:用户访问的资源恰好在缓存系统里,可以直接返回给用户,命中次数与所有访问次数之比。
- 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比。
缓存系统也可以划分出层次,分成一级缓存节点和二级缓存节点。
- 一级缓存配置高一些,直连源站。
- 二级缓存配置低一些,直连用户。
回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,可以有效地减少真正的回源。
现在的商业 CDN
命中率都在 90%
以上,相当于把源站的服务能力放大了 10
倍以上。
CDN
目的是为了改善互联网的服务质量,通俗一点说其实就是提高访问速度。
CDN
构建了全国、全球级别的专网,让用户就近访问专网里的边缘节点,降低了传输延迟,实现了网站加速。
通过 CDN
的负载均衡系统,智能调度边缘节点提供服务,相当于 CDN
服务的大脑,而缓存系统相当于 CDN
的心脏,缓存命中直接返回给用户,否则回源。