后来发现本文实在没有写的必要,就当作自己的整理吧
主要可以看维基百科的CDN定义,还有losbyday的博客园
什么是CDN?
CDN全称是内容分发网络。
我个人的理解,其目的是减少传播的时延,其设计思想是缓存,也可以说是“就近原则”。
CDN可以将资源(图片,文本,HTML,CSS等)缓存到各个IDC上,这样用户可以距离更近的CDN来获取资源。
这里顺便提一下IDC,IDC是互联网数据中心,即IDC机房,是物理上用来存储服务器的地方,云就是基于IDC机房的服务器,再添加了一些虚拟服务和镜像。CDN需要部属在IDC或者云平台上。
如果没有CDN,那么访问互联网的资源,我们需要直接与目标服务器进行交互,第一个是距离问题,这会受到地域,运营商等因素的限制,第二个是如果访问量很大,而服务器的带宽和性能负担不起,就会宕机,和DDOS一样。
在我另一篇博文中,有关于当在浏览器输入网址的时候,发生了什么?为什么会得到返回的信息。当没有CDN的时候,DNS解析会返回目标服务器的ip,也就是直接与目标服务器交互。
在有CDN后,过程变成如下(来源于云栖社区):
当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
用户向CDN的全局负载均衡设备发起内容URL访问请求。
CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
全局负载均衡设备把服务器的IP地址返回给用户。
用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
CDN的两大技术流派
Akamai
LimeLight
CDN关键技术
- 缓存算法[Squid];
- 分发能力;
- 负载均衡[Nginx]
- (基于DNS[BIND]);
- 支持协议;
Q & A
1.CDN加速是对网站所在服务器加速,还是对其域名加速?
CDN是只对网站的某一个具体的域名加速。如果同一个网站有多个域名,则访客访问加入CDN的域名获得加速效果,访问未加入CDN的域名,或者直接访问IP地址,则无法获得CDN效果。
2.CDN和镜像站点比较有何优势?
CDN对网站的访客完全透明,不需要访客手动选择要访问的镜像站点,保证了网站对访客的友好性。CDN对每个节点都有可用性检查,不合格的节点会第一时间剔出,从而保证了极高的可用率,而镜像站点无法实现这一点。CDN部署简单,对原站基本不做任何改动即可生效。
3.CDN和双线机房相比有何优势?
常见的双线机房只能解决网通和电信互相访问慢的问题,其它ISP(譬如教育网,移动网,铁通)互通的问题还是没得到解决。而CDN是访问者就近取数据,而CDN的节点遍布各ISP,从而保证了网站到任意ISP的访问速度。另外CDN因为其流量分流到各节点的原理,天然获得抵抗网络攻击的能力。
4.CDN使用后,原来的网站是否需要做修改,做什么修改?
一般而言,网站无需任何修改即可使用CDN获得加速效果。只是对需要判断访客IP程序,才需要做少量修改。
5.为什么我的网站更新后,通过CDN后看到网页还是旧网页,如何解决?
由于CDN采用各节点缓存的机制,网站的静态网页和图片修改后,如果CDN缓存没有做相应更新,则看到的还是旧的网页。为了解决这个问题,CDN管理面板中提供了URL推送服务,来通知CDN各节点刷新自己的缓存。在URL推送地址栏中,输入具体的网址或者图片地址,则各节点中的缓存内容即被统一删除,并且当即生效。如果需要推送的网址和图片太多,可以选择目录推送,输入 http://www.kkk.com/news 即可以对网站下news目录下所有网页和图片进行了刷新。
6.能不能让CDN不缓存某些即时性要求很高的网页和图片?
只需要使用动态页面,asp,php,jsp等动态技术做成的页面不被CDN缓存,无需每次都要刷新。或者采用一个网站两个域名,一个启用CDN,另外一个域名不用CDN,对即时性要求高的页面和图片放在不用CDN的域名下。
参考:
CDN是什么?使用CDN有什么优势? - 视界云的回答 - 知乎 https://www.zhihu.com/question/36514327/answer/184247188
Tinywan的博客园https://www.cnblogs.com/tinywan/p/6067126.html
CDN维基百科https://en.wikipedia.org/wiki/Content_delivery_network
losbyday的博客园,《CDN技术详细解》摘抄https://www.cnblogs.com/losbyday/p/5843960.html