访问 cdn 资源和不通过 cdn 访问的过程有什么不同?
一般的过程我们都知道了,不再赘述。下面我们来看看访问 cdn 的过程。
1.首先访问本地的 DNS ,如果没有命中,继续递归或者迭代查找,直到命中拿到对应的 IP 地址。
2.拿到对应的 IP 地址之后服务器端发送请求到目的地址。(注意这里返回的不直接是 cdn 服务器的 IP 地址,而是全局负载均衡系统的 IP 地址)
4.全局负载均衡系统会根据客户端的 IP地址和请求的 url 和相应的区域负载均衡系统通信。
5.区域负载均衡系统拿着这两个东西获取距离客户端最近且有相应资源的cdn 缓存服务器的地址,返回给全局负载均衡系统。
6.全局负载均衡系统返回确定的 cdn 缓存服务器的地址给客户端。
7.客户端请求缓存服务器上的文件。
简单来说,其实 cdn 就是个放服务端资源的一个仓库。康师傅的泡面如果不是有家门口的小卖部,我们就得去人家的工厂门口拿。有了小卖部,我们只需要去一个卖康师傅&&有货的小卖部拿,就是这个道理。
其中有一个比较重要的点,在过程1里:这个过程中,有一个 CNAME 的过程,我们访问 cdn 资源的地址一般是 a.cloud.com 或者类似的地址,是一个公司的访问 cdn 的专用地址。但是我们用的 cdn 的服务却是第三方的,即其实资源在他们的地址上比如 tencent.cdn。这时候就需要在 dns 查询的时候,需要把我们访问 a.cloud.com的地址映射到 tencent.cdn 的地址上,然后拿着映射后的地址再去走一遍 dns 解析,成功之后才获取到第三方提供的全局负载均衡系统的 IP。再继续走后面的流程。
回源是什么意思?
除了静态资源,API 是否可以缓存?
注意题目所描述的情况不是 cdn 的动态加速。
动态加速的对象是动态生成的网页,动态加速一般是对针对内容(如数据库信息等)在用户与- 源站之间建立高速通道,通过路由优化、TCP加速等技术手段对动态内容进行加速,降低节点到源站之间的时延,从而大大降低了用户访问动态网页的延迟。
资源的过期如何判定?cdn 是如何更新数据的?
资源过期时间就是根据我们老生常谈的请求头部来判定。这个后面会单拎出一篇文章带大家复习一下。 那么 cdn 是如何更新数据的?分两种,主动(PUSH)和被动(PULL)。被动刚才我们已经提到过了,利用回源就可以被动在途经的 cdn 节点缓存数据。 而主动指的是,我们从服务器主动往 cdn 推送数据。
回源是什么意思?
当 cdn 缓存服务器中没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后如果还是没有,就会回到我们自己的服务器去获取资源。 那都有哪些时候会回源呢?没有资源,资源过期,访问的资源是不缓存资源等都会导致回源。其他情况欢迎小伙伴们在评论区补充~