CDN详解

核心概念与安装配置

CND详解

复盘日常问题的时候,和CDN负责的同事讨论的回源的问题。一直以来对cdn相关的知识一知半解,借此机会彻底梳理一下。

  • CDN的基本工作过程
  • 回源是什么意思?
  • 资源的过期如何判定?cdn 是如何更新数据的?

CDN(内容分发网络)全称是 Content Delivery Network,建立并覆盖在承载网之上、由分布在不同区域的边缘节点服务器群组成的分布式网络,替代传统以 WEB Server 为中心的数据传输模式。

作用是将源内容发布到边缘节点,配合精准的调度系统;将用户的请求分配至最适合他的节点,使用户可以以最快的速度取得他所需的内容,有效解决Internet网络拥塞状况,提高用户访问的响应速度。

CDN的基本工作过程

用户通过浏览器等方式访问网站的过程如图所示:

cdn-01

  1. 用户在自己的浏览器中输入要访问的网站域名。
  2. 浏览器向 本地DNS服务器 请求对该域名的解析。
  3. 本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。
  4. 本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以递归方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。
  5. 浏览器得到域名解析结果,就是该域名相应的服务设备的 IP地址 。
  6. 浏览器向服务器请求内容。
  7. 服务器将用户请求内容传送给浏览器。

在网站和用户之间加入 CDN 以后,用户不会有任何与原来不同的感觉。最简单的 CDN 网络有一个 DNS 服务器和几台缓存服务器就可以运行了。一个典型的 CDN 用户访问调度流程如图所示:

cdn-02

  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后的http请求处理流程如下图,其中左边为DNS解析过程,右边为内容访问过程:

cdn-03

回源是什么意思?

当 cdn 缓存服务器中没有符合客户端要求的资源的时候,缓存服务器会请求上一级缓存服务器,以此类推,直到获取到。最后如果还是没有,就会回到我们自己的服务器去获取资源。
那都有哪些时候会回源呢?没有资源,资源过期,访问的资源是不缓存资源等都会导致回源。其他情况欢迎小伙伴们在评论区补充~

资源的过期如何判定?cdn 是如何更新数据的?

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