是什么?
CDN是内容分发网络。Content Delivery Network。
就是把我服务器上的静态资源复制到全球成千上万台服务器上。用户访问我的网站的时候,会从离他最近的那台服务器上获取资源。
静态资源是啥?HTML、CSS、JS、图片、视频。
效果就是让他们更快的访问到我的网站,看到我网站里的内容。
如果不使用
那就是在北京的用户直接通过浏览器给我的网站发请求,顺着网线传过去,我在上海的服务器接收请求、处理请求,把响应数据通过HTTP响应,顺着网线传回去。
某种意义上,越远,越慢,因为是走网线的。——>距离越远,网络延迟越高,加载页面越慢。北京用户访问上海的服务器,肯定比访问北京的服务器慢。
全球所有用户访问我的网站都必须连接我这一台服务器。——>服务器压力大,所有请求都集中打到这一台服务器,如果访问量巨大,服务器容易过载、崩溃。
带宽成本高:云服务的公网出流量是要收费的,所有流量都从你的服务器流出,费用较高。
如果使用
那么在北京的用户访问你的网站,如果北京CDN有缓存我的网站的静态资源,就会直接返回响应,让用户看到内容。除非CDN节点没有缓存,才会回源到你的服务器去获取资源。 这句话里提到了两个概念,缓存、回源。
什么叫缓存?
CDN把我服务器上的文件拷贝了一份副本放在自己那里。
什么叫回源?
我的服务器在CDN体系中叫做源站(Origin Server)。当用户第一次请求某个资源的时候,CDN节点发现自己没有缓存,就会去源站里请求这个文件,保存下来,再返回给客户。
当其他用户再次请求这个资源的时候,CDN节点会直接从缓存中返回,不回回源。
这个就叫回源。
类似于Nginx+Tomcat做动静分离,对静态资源的请求直接打到Nginx上,让Nginx来处理就行了,对动态资源的请求直接打到Tomcat上,让Tomcat来处理。而不是都打到Tomcat上,减轻了后端服务器处理的负担。
也类似于Redis缓存,前台用户请求的内容会先去后端数据库里查询,然后存到缓存里,下次再请求同样的内容时直接从缓存中返回了,不再向数据库发送请求了。
但是有一点要注意的,就是CDN缓存不是永久有效的,不会一直保留我的资源,我可以设定留存时间,比如图片——缓存30天,JS文件缓存7天,到期后会重新去回源拉取最新文件。
云服务器+CDN实现动静分离
云服务器就像总仓库。CDN就像全国各地的小快递配送站。 你唯一的云服务器(源站)作为内容的生产和存储中心,然后雇佣一个覆盖全球的“快递网络”(CDN)来帮你把内容快速分发到用户身边。用户不再需要千里迢迢来你的“总部”取货,而是去最近的“配送点”自提。
用户对静态资源(HTML页面、图片、视频等等)的请求,由CDN来处理,此所谓“静”。
用户对动态资源的请求,比如登录、提交表单、搜索数据等等,由源站服务器来处理,此所谓“动”。
动静分离,速度又快,功能又完整。
怎么给你的云服务器上CDN?
假设你买了主流厂商的服务器。 1、在云平台控制台找到CDN产品并开通。
2、添加域名,比如www.sumukeio.com 到CDN服务中。
3、配置源站,告诉CDN,你那台云服务器的公网IP和域名是啥。
4、配置CNAME。CDN会给你配置一个专属域名。比如www.sumukeio.com.cdn.dnsv1.com
你要去你的域名DNS解析商那里(阿里云万网/腾讯云DNSPod...),将你原来的域名做一个CNAME记录,指向CDN提供的这个域名。
这一步尤其关键。因为只有配置了之后,用户访问你的网站,请求才会被发送到CDN网络上去。
5、等待生效。DNS配置需要几分钟到几小时全球生效。 生效之后访问你的网站就是先访问CDN了。