对CDN的一个个人理解

之前在学习学校的课程的时候,就了解到了CDN这个东西,只知道它是内容分发网络,可以选择最近的服务器来提供资源,怎么做到选择最近的?为什么可以加快资源的传输速度,提高页面的访问速度?带着这些疑问去探索吧。

准备工作(DNS解析相关)

DNS解析分为两种,递归解析和迭代解析。用网上的两个图来解释

递归解析

迭代解析

What is CDN ?

Content Deliver Network, 内容分发网络.

Content指的是内容,也就是网站使用的静态资源(image, JS, CSS文件)

Deliver指的是分发,CDN服务器根据请求客户端的地理位置选择一个比较近的边缘服务器对请求进行响应。

Network指的是网络,多个CDN服务器组成的一个网络

CDN的工作过程

首先需要对比没有使用CDN的普通网站请求才能更加深刻的认识到CDN的作用。

客户端对一个资源发起一个GET请求,DNS解析host域名,得到服务器的IP地址,向该服务器请求资源,服务器响应请求,将资源发给客户端。

如果这个源服务器离客户端较远,那么可能需要经过的路由比较多,经过的线路比较长,而且一般使用TCP来传输数据,而TCP是可靠的,面向连接的,当服务器与客户端的距离过长时,遇到丢包或者是网络拥塞等的概率可能会增加,而TCP要保证数据可靠到达,那么资源传输时间将会延长,那么页面加载的速度就会变缓慢。通俗的讲,服务器离用户越近,HTTP的响应时间越短。反之亦然。

CDN的Network主要分为两部分,中心和边缘,中心服务器主要负责DNS解析和全局负载均衡,边缘服务器指的是异地服务器,作为CDN分发的载体,包括高速缓存和负载均衡。

首先我们通过io.chenpt.cc来获取静态资源,而这个二级域名已经添加了个CNAME解析记录解析到xxx.cdn.com,然后再通过CDN本身的DNS服务器解析该域名得到中心CDN的IP地址,然后中心CDN服务器通过DNS服务器,根据请求者的地理位置(IP,某个IP段一般来说都是分配给了固定的区域,所以可以通过IP来判定地址),还有预设好的规则,计算出一个合适的edge CDN的IP地址返回给客户端(最靠近客户端的边缘CDN).

所以客户端实际上是将HTTP请求发送到egde CDN的,如果edge CDN拥有客户端所请求的资源,则直接把该资源返回给客户端,若没有,则需要直接向真正请求的资源服务器(Host name)请求资源(回源),并将返回的资源加入到自己的高速缓存中,同时把该资源返回给客户端。

总结

Q: 怎么判断哪个边缘CDN服务器跟客户端的距离比较近? A: DNS服务器来处理.

举个栗子:

我(在广州)准备访问 www.test.com,DNS服务器接收到这个DNS请求,会根据我的IP地址,将最靠近我的机房的IP(佛山)返回给我。我的浏览器再向这个IP地址发起HTTP请求。

CDN的作用
加快了静态资源的传输,从而减少了页面的加载时间。

缩短了请求路径,请求的响应时间自然减少。

以空间换时间。