复盘平常问题板的时候,看到了曾经听到后端同窗讨论的回源的问题。一直以来对 cdn 相关的知识只知其一;不知其二,借此机会完全梳理一下。html
通常的过程咱们都知道了,再也不赘述。下面咱们来看看访问 cdn 的过程。 git
简单来讲,其实 cdn 就是个放服务端资源的一个仓库。康师傅的泡面若是不是有家门口的小卖部,咱们就得去人家的工厂门口拿。有了小卖部,咱们只须要去一个卖康师傅&&有货的小卖部拿,就是这个道理。github
其中有一个比较重要的点,在过程1里:这个过程当中,有一个 CNAME 的过程,咱们访问 cdn 资源的地址通常是 a.cloud.com 或者相似的地址,是一个公司的访问 cdn 的专用地址。可是咱们用的 cdn 的服务倒是第三方的,即其实资源在他们的地址上好比 tencent.cdn。这时候就须要在 dns 查询的时候,须要把咱们访问 a.cloud.com的地址映射到 tencent.cdn 的地址上,而后拿着映射后的地址再去走一遍 dns 解析,成功以后才获取到第三方提供的全局负载均衡系统的 IP。再继续走后面的流程。web
当 cdn 缓存服务器中没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后若是仍是没有,就会回到咱们本身的服务器去获取资源。 那都有哪些时候会回源呢?没有资源,资源过时,访问的资源是不缓存资源等都会致使回源。其余状况欢迎小伙伴们在评论区补充~数据库
注意题目所描述的状况不是 cdn 的动态加速。后端
动态加速的对象是动态生成的网页,动态加速通常是对针对内容(如数据库信息等)在用户与- 源站之间创建高速通道,经过路由优化、TCP加速等技术手段对动态内容进行加速,下降节点到源站之间的时延,从而大大下降了用户访问动态网页的延迟。api
其实这个问题我没有找到比较合适的解答,下面我想说一下我我的的看法。 咱们使用 cdn 的缘由是,咱们常常有一些比较频繁请求且容量比较大的文件,而且更新频率不那么高的文件。这些文件若是咱们都放在本身的服务器上,于客户端问题在于访问时间长,于服务器端是占用服务器端的资源。因此咱们采用分布式的方式扔在 cdn 上。可是 API 不一样,首先他常更新,其次他多和用户信息等相关联,而且 cdn 判断是否缓存是依靠 url,意味着他只能缓存 get 请求,因此他的应用范围是有限的。而且 api 常更新,推送更新到全部 cdn 节点一样是须要耗费资源的。因此 API 是不适合放在 cdn 上的。可是若是你的内容是相对静态的,不涉及和用户信息关联,而且能在一段时间内容忍缓存,更新不频繁,那么也不是不能考虑。缓存
资源过时时间就是根据咱们老生常谈的请求头部来断定。这个后面会单拎出一篇文章带你们复习一下。 那么 cdn 是如何更新数据的?分两种,主动(PUSH)和被动(PULL)。被动刚才咱们已经提到过了,利用回源就能够被动在途经的 cdn 节点缓存数据。 而主动指的是,咱们从服务器主动往 cdn 推送数据。服务器
边缘节点:指距离最终用户接入具备较少的中间环节的网络节点网络
参考文献: CDN 学习中的一点小思考 CDN 命中率、回源率常见问题 CDN缓存那些事 让 API 也上 CDN 吧 CDN的基本工做过程 CDN是什么?使用CDN有什么优点? cname记录是什么?他存在的意义是什么? CDN工做原理(CNAME) 【CDN 最佳实践】CDN缓存策略解读和配置策略 CDN缓存那些事儿