关于 cdn、回源等问题一网打尽

复盘平常问题板的时候,看到了曾经听到后端同窗讨论的回源的问题。一直以来对 cdn 相关的知识只知其一;不知其二,借此机会完全梳理一下。html

文章目录:

  • 访问 cdn 资源和不经过 cdn 访问的过程有什么不一样
  • 回源是什么意思?
  • 除了静态资源,API 是否能够缓存?
  • 资源的过时如何断定?cdn 是如何更新数据的?
  • 几个专业术语

访问 cdn 资源和不经过 cdn 访问的过程有什么不一样

通常的过程咱们都知道了,再也不赘述。下面咱们来看看访问 cdn 的过程。 git

cdn 访问过程(盗图)
1.首先访问本地的 DNS ,若是没有命中,继续递归或者迭代查找,直到命中拿到对应的 IP 地址。 2.拿到对应的 IP 地址以后服务器端发送请求到目的地址。注意这里返回的不直接是 cdn 服务器的 IP 地址,而是全局负载均衡系统的 IP 地址 4.全局负载均衡系统会根据客户端的 IP地址和请求的 url 和相应的区域负载均衡系统通讯 5.区域负载均衡系统拿着这两个东西获取距离客户端最近且有相应资源的cdn 缓存服务器的地址,返回给全局负载均衡系统 6.全局负载均衡系统返回肯定的 cdn 缓存服务器的地址给客户端。 7.客户端请求缓存服务器上的文件

简单来讲,其实 cdn 就是个放服务端资源的一个仓库。康师傅的泡面若是不是有家门口的小卖部,咱们就得去人家的工厂门口拿。有了小卖部,咱们只须要去一个卖康师傅&&有货的小卖部拿,就是这个道理。github

其中有一个比较重要的点,在过程1里:这个过程当中,有一个 CNAME 的过程,咱们访问 cdn 资源的地址通常是 a.cloud.com 或者相似的地址,是一个公司的访问 cdn 的专用地址。可是咱们用的 cdn 的服务倒是第三方的,即其实资源在他们的地址上好比 tencent.cdn。这时候就须要在 dns 查询的时候,须要把咱们访问 a.cloud.com的地址映射到 tencent.cdn 的地址上,而后拿着映射后的地址再去走一遍 dns 解析,成功以后才获取到第三方提供的全局负载均衡系统的 IP。再继续走后面的流程。web

回源是什么意思?

当 cdn 缓存服务器中没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后若是仍是没有,就会回到咱们本身的服务器去获取资源。 那都有哪些时候会回源呢?没有资源,资源过时,访问的资源是不缓存资源等都会致使回源。其余状况欢迎小伙伴们在评论区补充~数据库

除了静态资源,API 是否能够缓存?

注意题目所描述的状况不是 cdn 的动态加速。后端

动态加速的对象是动态生成的网页,动态加速通常是对针对内容(如数据库信息等)在用户与- 源站之间创建高速通道,经过路由优化、TCP加速等技术手段对动态内容进行加速,下降节点到源站之间的时延,从而大大下降了用户访问动态网页的延迟。api

其实这个问题我没有找到比较合适的解答,下面我想说一下我我的的看法。 咱们使用 cdn 的缘由是,咱们常常有一些比较频繁请求且容量比较大的文件,而且更新频率不那么高的文件。这些文件若是咱们都放在本身的服务器上,于客户端问题在于访问时间长,于服务器端是占用服务器端的资源。因此咱们采用分布式的方式扔在 cdn 上。可是 API 不一样,首先他常更新,其次他多和用户信息等相关联,而且 cdn 判断是否缓存是依靠 url,意味着他只能缓存 get 请求,因此他的应用范围是有限的。而且 api 常更新,推送更新到全部 cdn 节点一样是须要耗费资源的。因此 API 是不适合放在 cdn 上的。可是若是你的内容是相对静态的,不涉及和用户信息关联,而且能在一段时间内容忍缓存,更新不频繁,那么也不是不能考虑。缓存

资源的过时如何断定?cdn 是如何更新数据的?

资源过时时间就是根据咱们老生常谈的请求头部来断定。这个后面会单拎出一篇文章带你们复习一下。 那么 cdn 是如何更新数据的?分两种,主动(PUSH)和被动(PULL)。被动刚才咱们已经提到过了,利用回源就能够被动在途经的 cdn 节点缓存数据。 而主动指的是,咱们从服务器主动往 cdn 推送数据。服务器

几个专业术语

边缘节点:指距离最终用户接入具备较少的中间环节的网络节点网络

参考文献: CDN 学习中的一点小思考 CDN 命中率、回源率常见问题 CDN缓存那些事 让 API 也上 CDN 吧 CDN的基本工做过程 CDN是什么?使用CDN有什么优点? cname记录是什么?他存在的意义是什么? CDN工做原理(CNAME) 【CDN 最佳实践】CDN缓存策略解读和配置策略 CDN缓存那些事儿

相关文章
相关标签/搜索