CDN原理及为自己的网站部署
CDN是什么?
CDN (Content Delivery Network or Content Ddistribute Network)内容分发网络。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。类似分布各地的物流仓储网络,CDN网络可以将源站的内容缓存到分布全球的CDN节点,根据用户的访问IP,就近连接CDN,提高网站响应速度。
一般的网站只有一台或一组服务器,用户访问站点时请求需要跨越复杂的路由链路,抵达网站服务器,经过tcp三次握手建立连接,服务器才会将站点数据传输给用户。
使用CDN加速后,CDN在全球的分布式节点将会拷贝一份源站的数据(图片、js、html等等),称为缓存,用户在访问源站域名时会被DNS解析到最近的CDN服务器,并且访问缓存资源。
普通的网站访问流程和使用CDN的网站访问如下图,其中蓝色链路是无CDN的链路
为什么要使用CDN
从上面的流程中我们可以简单了解到源站访问的缺陷
- 需要通过情况复杂的路由链路,用户请求网页到网页最终呈现的时间太长。用户满意的网页打开时间是在2秒以下,用户能够忍受的极限等待时间是8秒,超过8秒大部分用户会选择离开网页。
- 连接质量受源站带宽限制,每增加一个用户,源站服务器就要扩充一份带宽才能满足需求,然而带宽的成本非常高
- 连接数量受服务器性能限制,所有请求都需要源站服务器处理
CDN通过分布式方案,通过空间换时间的方法,用冗余的空间换取时间,是典型的分布式实例。上述问题的核心就是用户和网站服务器的物理距离以及传输速度,CDN通过缓存机制简单粗暴地缩短用户和访问内容的距离,以达到加速访问的效果。
CDN原理
CDN原理很简单,实现也非常清晰,具体做法就是将网站的内容——比如图片、文字、视频——存在不同地理位置的服务器上,称为CDN节点。
举例来说,某网站的主机在北京市的机房内,如网站不使用CDN,那么广东的用户访问该网站的时延就是数据包从广东到北京来回的时间。如果该网站使用了CDN,并且这家CDN在广州架设了节点,那么广东的用户去访问被缓存的内容时只要等待数据包在广东内传输的时间即可,以此达到加速的效果。 具体实现我在下面的例子里介绍
为自己的网站部署CDN
首先我的网站是GitHub Pages,域名为codeelites.cn(GitHub Pages 怎么更换域名可以百度一下)
编者按:事实上GitHub是有CDN的,并且是大型CDN,国外访问非常流畅,然而其CDN在国内由于众所皆知的原因无法访问,所以表现为非常慢
首先我们向服务商购买CDN服务,运营商会要求我们提供源站ip和域名。
这里我购买了腾讯云的CDN,国内因为政策原因要求域名必须备案,于是博主将自己的网站备了案(工信部、公安部审核大概一个月。。。备案过段时间出教程)
-
ping 一下自己的域名,获得源站ip,填入自有源站
其中CNAME是自动生成的,需要把域名解析修改为这里生成的CNAME
-
修改域名解析
在自己域名解析提供商修改域名解析记录
因为GitHub在国外其实是有CDN的,访问很快,可以将原来指向github.io的解析调整成境外解析,新建一条境内解析,指向刚刚生成的CNAME。如果源站没有开启https,到这里CDN就配置成功了,基本上可以实现秒开页面。
配置CDN
既然是缓存, 就有缓存周期。如果源站内容有修改,用户访问CDN的内容将会与源站不符合,这就需要设定自动刷新缓存时间。由于我的是个人博客,更新频率不高,所以就设定为6小时更新一次。
HTTPS
如果源站开启了HTTPS,需要域名也进行SSL认证,开启HTTPS。HTTPS认真很贵,然而现在是云时代,自然有羊毛可薅。
腾讯云注册的域名可以免费申请SSL证书
可以申请免费的SSL证书后使用,在CDN配置页面添加自己域名的证书
并且选择协议跟随,再到CDN高级设置页面强制开启HTTSPS跳转
小网站也用上cdn+https了
ping 一下自己的域名,可以发现已经是CDN在响应
当然,无商不奸,CDN是按流量收费的,是各大网站的重要支出