CDN
CDN即内容分发网络,没有CDN的时候,不管哪里的用户访问我们的站点,都需要到我们数据中心来获取数据(单纯的DNS过程)。而有了CDN之后,用户根据自己的地理位置会选择距离自己最近的缓存数据中心来获取数据。不会每次都到源站(应用服务器)来获取数据。
-
提高页面加载速度:这是最显而易见的一个优势,通过上面的图,大家也可以直观感受下,用户访问距离自己最近的机器,速度肯定是最快的。并且网站的加载速度越快那么用户体验越优秀,你的网站更会受到对应用户的喜爱。至于如何实现就近访问的,后面原理部分介绍。
-
增加内容的冗余:CDN是一个典型的分布式架构,它通过增加数据的冗余,一方面保障在大流量面前有多台服务器能够提供相同的数据;另一方面当部分机器出现故障时,可以进行故障转移。
-
节省带宽:如果大家自己买过云服务就知道,带宽每增加一点价格就飙升。使用CDN后,由于流量被分流了,那么原机器带宽要求自然就降低了。当然带宽费用降低了,你还需要为CDN付费。
-
保障服务安全:CDN可防止的攻击:DDOS攻击,该攻击就是通过巨大流量打满你的带宽,让你丧失服务能力。那么由于CDN的存在,它将巨大的流量进行了分流。那么源站压力自然小了。这其实也是高并发需要考虑的。CDN目前不仅仅是只能缓存静态的HTML、CSS、JS、VIDEO,现在还有能够缓存动态接口内容的CDN,这为我们在架构高并发的服务时,提供了更多的手段进行选择。
工作原理
在介绍DNS的时候,介绍了客户端是如何获取到IP地址的。那么有了CDN之后,这个过程该怎么处理呢?
CDN其实就是放在应用服务器与用户之间的一层缓存。所以如果使用DNS的时候,返回给客户端的是CDN机器的IP而不是应用的IP,那么自然就走到了CDN机器上。
为了实现上述目的,我们会为该域名配置一个CNAME(大家注意上面提到的CNAME与A记录的优先级),那么这个CNAME是最终如何解析到对应的CDN机器呢?其实流程与DNS解析是一样的。当发现一个域名设置了CNAME时,DNS解析器会继续解析这个CNAME别名(其实就是另一个域名)。对这个CNAME解析的时候会用到全局负载DNS解析,它会根据访问者的地理位置信息返回对应的IP(CDN机器的IP)。因此客户端实际上得到的是距离它最近的CDN机器的IP地址。
如果说用户访问CDN,但是CDN上没有对应内容会怎么办?此时CDN机器其实会根据自身专用的DNS解析服务,根据域名得到源站的IP,然后向源站发送请求获取数据,并把这些数据缓存到本地,方便后续使用;同时返回本次结果,完成本次请求的访问。
需要说一下的是,CDN其实也是分层的。距离用户最近的称之为边缘节点。而CDN的中心服务器集群被称为二级缓存。在上面就是应用部署的源站。一般边缘节点没数据就去找二级缓存,二级缓存没数据就去找源站(被称为回源)。