into-piece / Step-By-Step

每天一题向前端架构师前进
4 stars 1 forks source link

CDN有哪些优化加载静态资源速度的机制? #18

Open into-piece opened 4 years ago

into-piece commented 4 years ago

访问网站的基本过程:

CDN 用户访问调度流程

  1. 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS 系统会最终将域名的解析权交给 CNAME 指向的 CDN 专用 DNS 服务器。
  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回用户。
  3. 用户向 CDN 的全局负载均衡设备发起内容 URL 访问请求。
  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
  5. 基于以下这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址:
    • 根据用户 IP 地址,判断哪一台服务器距用户最近;
    • 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
    • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
  6. 全局负载均衡设备把服务器的 IP 地址返回给用户。
  7. 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

DNS 服务器根据用户 IP 地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用 CDN 服务的网站,只需将其域名解析权交给 CDN 的全局负载均衡(GSLB)设备,将需要分发的内容注入 CDN,就可以实现内容加速了。

CDN 的核心功能,一个是缓存,一个是回源。

缓存就是说我们把资源复制一份到 CDN 服务器上,回源就是说 CDN 发现自己没有这个资源(一般是缓存的数据过期了),重新向向web 服务器(或者它的上层服务器)重新取这个资源。

CDN中一方面有很多的缓存策略,从而可以提高加载速度。 另一方面CDN有路由算法,可以选择用户访问速度最快的节点进行接入,从而加快RTT(Roud Trip Time)

CDN会挑选最优设备提供服务。可能是Cache最接近用户,或者条件最好的路径。这个过程就叫均衡负载。