CDN加速的实现逻辑

什么是CDN?

CDN全程是(Content Delivery Network)内容分发网络。指一种通过互联网相互连接的计算级网络系统,利用最靠近每个用户的服务器,更快、更可靠的将资源(图片、视频、流、资源、程序等)发送给用户。

对于系统而言可以预先将内容分发至全国各地的加速节点,这样用户就可以就近的获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度,降低响应时间,提供流畅的用户体验。

CDN加速的实现逻辑_第1张图片

 

CDN解决了因分布、宽带、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景,使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。

CDN系统组成&CDN网络构成

一套CDN系统主要由4大部分组成:

  1. CDN专属DNS服务器
  2. 全局负载均衡设备
  3. 区域负载均衡设备
  4. CDN缓存服务器(边缘节点Cache)

除了CDN专属DNS服务器,其他3部分集群都有源服务器上对应资源的全部或部分副本,CDN系统通过各部分的负载均衡算法,最终指示客户端使用附近最优的资源节点中的一台Cache服务器作为服务端,从而提高web应用的性能。

CDN网络主要由中心节点、边缘节点两部分构成。

CDN加速的实现逻辑_第2张图片

 

中心节点

中心节点包括CDN网管中心和全局负载均衡DNS重定向解析系统,负责整个CDN网络的分布及管理。

边缘节点

CDN边缘节点主要指异地分发节点,由均衡负载设备、高速缓存两部分组成。

均衡负载设备负责每个节点中各个Cache的负载均衡,保证节点的工作效率;同时还负责收集节点与周围环境的信息,保持与全局负载均衡DNS的通信,实现整个系统的负载均衡。

高速缓存器(Cache)负责存储客户大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中Cache服务器就像网站的原始服务器一样,响应终端用户的请求。因其距离用户更近,故其响应时间才更快。

CDN加速的实现逻辑_第3张图片

 

上图是阿里云在中国大陆的CDN节点分布。

CDN的基本工作过程

传统Web模型

  1. 用户在浏览器中输入要访问的网站地址
  2. 浏览器向本地DNS服务器请求该域名的解析
  3. 本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。
  4. 本地DSN服务器中没有这个域名的解析结果的缓存,则以迭代方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。
  5. 浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址。
  6. 浏览器获取IP地址后,经过标准的TCP握手流程,建立TCP连接。
  7. 浏览器向服务器发起HTTP请求。
  8. 服务器将用户请求内容转送给浏览器。
  9. 经过标准的TCP挥手流程,断开TCP连接。

CDN模型

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

 

CDN加速的实现逻辑_第4张图片

CDN全局负载均衡设备与CDN区域负载均衡设备根据用户ip地址,将域名解析成相应节点中缓存服务器的IP地址,实现用户就近访问,从而提高服务端响应内容的速度。

参考博客

漫话:如何给女朋友解释什么是CDN?

计算级网络-详解CDN

如何自己假设部署CDN

你可能感兴趣的:(#,【Java基础】)