「前端网络基础」之CDN必知必会

580 阅读5分钟

想必大家公司的网站,为了加快用户访问网络资源的速度和稳定性提高用户体验,减轻源服务器的访问压力, 都使用了CDN缓存吧。那么何为CDN,原理是什么,今天就给大家普及普及。 (如果还不清楚DNS的同学可以先看一下这篇「前端网络基础」之DNS必知必会 ,先大概了解一下DNS,已经了解的可以跳过)。

CDN是什么

CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

edgeserver.jpg

CDN的工作原理

DNS解析过程大家应该都知道吧,这里来复习一下,也可以看看这篇文章「前端网络基础」之DNS必知必会

当一个用户在地址栏输入 www.abc.com 时,DNS解析大致有以下过程,如图所示:

DNS解析

  1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。
  2. 如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果(我们这里假设缓存中没有结果,继续下一步)。
  3. 请求本地域名服务器(LDNS)来解析这个域名,这里采用的是递归查询(假设依旧没有命中)。
  4. 如果LDNS仍然没有命中,就向根域名服务器请求解析,后续就开始迭代查询了。
  5. 根域名服务器返回给LDNS下一次应该查询的顶级域名服务器IP。
  6. LDNS向顶级域名服务器查询,顶级域名服务器返回下一次应该查询的权限域名服务器IP。
  7. LDNS向权限域名服务器查询,权限域名服务器返回所查询的目标主机IP。
  8. LDNS将最终查询到的IP返回给用户的主机,并写入缓存以便下次查询。

这样的DNS解析有个问题:

由于网民数量激增,网络访问路径过长,从而使用户的访问质量受到严重影响。特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异地互联网用户急速增加的地区来说,访问质量会不太稳定,响应速度会慢。

CDN就是为了解决这个问题而诞生的:

通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

  • 使用了CDN缓存后的网站的访问过程变为这样,如下图所示:

640.webp

  1. 用户输入访问的域名,操作系统向本地域名服务器(LDNS)查询域名的ip地址.
  2. LDNS向根域名服务器(ROOT DNS)查询域名的授权服务器(这里假设LDNS缓存过期)
  3. ROOT DNS将域名授权dns记录回应给 LDNS
  4. LDNS得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
  5. 域名授权dns 查询域名记录后(一般是CNAME),回应给 LDNS
  6. LDNS 得到域名记录后,向智能调度DNS查询域名的ip地址
  7. 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LDNS
  8. LDNS 将得到的域名ip地址,回应给 用户端
  9. 用户得到域名ip地址后,访问站点服务器
  10. CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程)

这里解释一下CNAME,CNAME即别名( Canonical Name );可以用来把一个域名解析到另一个域名,当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。

例如,你有一台服务器上存放了很多资料,你使用docs.example.com去访问这些资源,但又希望通过documents.example.com也能访问到这些资源,那么你就可以在您的DNS解析服务商添加一条CNAME记录,将 documents.example.com 指向 docs.example.com,添加该条CNAME记录后,所有访问 documents.example.com 的请求都会被转到 docs.example.com,获得相同的内容。

CDN的功能

归纳起来,CDN具有以下主要功能:

  1. 节省骨干网带宽,减少带宽需求量
  2. 提供服务器端加速,解决由于用户访问量大造成的服务器过载问题;
  3. 服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;
  4. 能克服网站分布不均的问题,并且能降低网站自身建设和维护成本;
  5. 降低“通信风暴”的影响,提高网络访问的稳定性。

参考资料