什么是CDN
内容分发网络
内容:指的是静态资源比如:图片,视频,文档,js,css,html等
分发网络:将这些静态资源分发到位于多个不同地理位置的机房的服务器中。
可以实现静态资源的就近访问
举例:京东在全国各地都有仓库,下单后从最近的仓库发货到配送站由小哥送到家
- 可以看做是一层特殊的缓存,分布在全国各地
全站网络加速是什么
- 腾讯云叫ECDN,阿里云叫DCDN
- 既可以加速静态资源,也可以加速动态资源
为什么不直接将服务部署在各个地方呢?
-
成本太高,需要部署多分相同的服务
-
静态资源通常占用空间较大并且会经常被访问到。
如果直接使用服务器或者缓存来处理的话,对系统资源消耗非常大
,可能会影响到其他的服务 -
同一个服务在多个不同的地方部署,是为了实现系统的高可用而不是就近访问。(同城灾备,同城多活,异地灾备,异地多活)
CDN的原理是什么
在此之前先搞清下面三个问题
- 静态资源是怎么到CDN节点的?
- 如何找到最近的CDN节点?
- 如何防止资源被盗用?
静态资源是如何被缓存到CDN节点的?
可以通过预热的方式,将源站的资源同步到cdn节点中
如果不预热,节点中没有静态资源,这个时候cdn节点请求源站获取资源,会被不使用cdn节点耗时更长,称为回源
预热:cdn提前将内容缓存到cdn节点上,从而不需要回源,减少了对源站的压力
回源:当cdn节点没有用户请求的资源或者资源过期,cdn节点需要从原始服务器获取最新的资源内容。当请求发生回源的时候会比未使用cdn还慢,因为多了一层cdn的调用
如何找到最近的CDN节点?
gslb (global server load balance)全局负载均衡
- 浏览器向dns发送域名请求
- dns服务器根据cname别名记录向gslb发送请求
- 返回性能最好的,一般也是距离最近的cdn节点(边缘服务器,真正缓存内容的地方)
- 浏览器访问制定的cdn节点
gslb可以看做cdn专用dns服务器和负载均衡系统组合,gslb会根据ip地址,cdn节点状态(负载均衡,性能,延迟,带宽)等综合指标返回一个cdn节点的地址
如何防止资源被盗刷?
开启referer防盗链
时间戳防盗链
http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
wsSecret:签名字符串。
wsTime: 过期时间。