CDN
CDN-内容分发网络
前言
服务器可能距离自己很远,越远的距离就意味着可能要经过越多的节点,节点之间还可能会发生阻塞或者丢包的状况。服务器不知道用户会在什么事件什么地点来访问,那么服务器采取了一个策略,备份多个服务器到世界各地,形成了一个网络,这个网络就是CDN-内容分发网络。
在这些服务器中会有很多台边缘服务器提供服务,所谓边缘服务器就是接近用户的这些服务器。
CDN这个网络就是帮服务器近距离给用户分发网页内容的,那么网页上这么多内容,CDN要负责分发哪些内容呢?
分发内容
首先我们需要了解,网页的内容分为两种:
静态内容:长期不需要改变的内容,可以固定
动态内容:经常需要改变的,固定不了
注意:即使是静态内容也不是一直保存在CDN里面的
源服务器发送文件给CDN时,可以利用HTTP头部的cache-control设置文件的缓存形式,这样CDN就可以知道哪些资源可以保存,哪些不能,哪些需要保存多久等等。
分发内容的流程
静态内容
- 源服务器将静态内容提前缓存到CDN
- 源服务器没有把静态内容提前备份给CDN,当用户访问时,CDN去源服务器索取对应的静态内容,之后再有用户请求,就可以通过CDN备份直接获取,不需要向源服务器索取。
动态内容
根据每个时间段来变化,或者根据用户变化,源服务器很难做到提前预测到每一个用户的动态内容,然后提前给到CDN,如果等用户索取动态内容,CDN再问源服务器索取,这样CDN提供不了多少加速服务,也就没有存在的意义了。
那CDN可以提供哪些动态服务呢?
比如说:时间,时间是一直变动的,如果一直让源服务器提供时间动态内容,万一网络不稳定,时间就没有办法同步。
因此,有些CDN会提供可以运行在CDN上的接口,让源服务器用这些CDN的接口,而不是源服务器自己的代码,这样用户就可以直接从CDN获取时间,而不是源服务器上。
安全性和可靠性
CDN的存在无疑是给源服务器增加了一个墙,使用户不能直接访问源服务器,只能通过CDN进行访问,所以不用担心恶意的DDos攻击。
那么问题又来了,攻击CDN,CDN可以承受的了吗?CDN的服务器宕机了怎么办?
布局多台CDN服务器在各个地方,然后监控这些CDN服务器的负载情况,如果某个服务器超载,就会把用户那边的请求转移到没有超载的CDN服务器上,为的就是平均分配网络流量,也叫负载均衡
那么,CDN用什么方式转移流量?
采用任播的通信方式,服务器对外都拥有同样一个IP地址,如果这个IP地址收到用户请求以后,就会由距离用户最近的服务器来响应。
利用任播的技术把流量转移到另外没超载的服务器就可以缓解
不过,国内CDN厂家好像并没有用任播
CDN还会采用TSL/SSL证书来给网站进行保护
一加一减
CDN有一个加速器的称号,除了前面说的因为距离变近以后加载速度变快以外,加速的方法还有很多,那CDN会帮你把文件进行最小化或者压缩文档(比如说把你的代码空格压缩掉)。
CDN也会优化自己的硬件软件。
一减:减少费用
大部分的网站都是由主机方托管的,网站主就需要向主机商支付费用,其中网络带宽的费用就是让人头疼的一项费用,消耗的网络带宽越大,支付的费用越高。
因为CDN更接近用户提供服务了,大大减少了CDN到源服务器之间带宽的占用和使用