DNS和CDN内容分发网络

     目录

一、DNS解析

二、传统CDN加速

三、融合CDN

一、DNS解析

       在网络世界,你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地
址簿,就是DNS 服务器。
        由此可见,DNS 在日常生活中多么重要。每个人上网,都需要访问它,但是同时,这对它来讲也是非常
大的挑战。一旦它出了故障,整个互联网都将瘫痪。另外,上网的人分布在全世界各地,如果大家都去
同一个地方访问某一台服务器,时延将会非常大。因而,DNS 服务器,一定要设置成高可用、高并发和
分布式的。
        于是,就有了这样树状的层次结构。

根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址
顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址
权威 DNS 服务器 :返回相应主机的 IP 地址

 

DNS和CDN内容分发网络_第1张图片


DNS 解析流程:

为了提高 DNS 的解析性能,很多网络都会就近部署 DNS 缓存服务器。于是,就有了以下的 DNS 解析
流程。
1. 电脑客户端会发出一个 DNS 请求,问 www.163.com 的 IP 是啥啊,并发给本地域名服务器 (本地
DNS)。那本地域名服务器 (本地 DNS) 是什么呢?如果是通过 DHCP 配置,本地 DNS 由你的网络
服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房。
2. 本地 DNS 收到来自客户端的请求。你可以想象这台服务器上缓存了一张域名与之对应 IP 地址的大
表格。如果能找到 www.163.com,它直接就返回 IP 地址。如果没有,本地 DNS 会去问它的根域
名服务器:“老大,能告诉我 www.163.com 的 IP 地址吗?”根域名服务器是最高层次的,全球共
有 13 套。它不直接用于域名解析,但能指明一条道路。
3. 根 DNS 收到来自本地 DNS 的请求,发现后缀是 .com,说:“哦,www.163.com 啊,这个域名
是由.com 区域管理,我给你它的顶级域名服务器的地址,你去问问它吧。”
4. 本地 DNS 转向问顶级域名服务器:“老二,你能告诉我 www.163.com 的 IP 地址吗?”顶级域名
服务器就是大名鼎鼎的比如 .com、.net、 .org 这些一级域名,它负责管理二级域名,比如
163.com,所以它能提供一条更清晰的方向。
5. 顶级域名服务器说:“我给你负责 www.163.com 区域的权威 DNS 服务器的地址,你去问它应该
能问到。”
6. 本地 DNS 转向问权威 DNS 服务器:“您好,www.163.com 对应的 IP 是啥呀?”163.com 的权
威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
7. 权限 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

至此,完成了 DNS 的解析过程。现在总结一下,整个过程总结成一个图。

DNS和CDN内容分发网络_第2张图片

DNS的其他作用:

1.负载均衡:
        站在客户端角度,这是一次DNS 递归查询过程。因为本地 DNS 全权为它效劳,它只要坐等结果即可。
在这个过程中,DNS 除了可以通过名称映射为 IP 地址,它还可以做另外一件事,就是负载均衡。

     (1)内部负载均衡:

例如,一个应用要访问数据库,在这个应用里面应该配置这个数据库的 IP 地址,还是应该配置这个数据
库的域名呢?显然应该配置域名,因为一旦这个数据库,因为某种原因,换到了另外一台机器上,而如
果有多个应用都配置了这台数据库的话,一换 IP 地址,就需要将这些应用全部修改一遍。但是如果配置
了域名,则只要在 DNS 服务器里,将域名映射为新的 IP 地址,这个工作就完成了,大大简化了运维。
在这个基础上,我们可以再进一步。例如,某个应用要访问另外一个应用,如果配置另外一个应用的 IP
地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,我们其实可以部署多个。但
是,访问它的应用,如何在多个之间进行负载均衡?只要配置成为域名就可以了。在域名解析的时候,
我们只要配置策略,这次返回第一个 IP,下次返回第二个 IP,就可以实现负载均衡了。


    (2)全局负载均衡:


       为了保证我们的应用高可用,往往会部署在多个机房,每个地方都会有自己的 IP 地址。当用户访问某个
域名的时候,这个 IP 地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在
DNS 服务器里面,将这个数据中心对应的 IP 地址删除,就可以实现一定的高可用。
另外,我们肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,这样,客户体
验就会非常好,访问速度就会超快。这就是全局负载均衡的概念。

示例:DNS 访问数据中心中对象存储上的静态资源


        我们通过 DNS 访问数据中心中对象存储上的静态资源为例,看一看整个过程。
假设全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区(Available Zone)。对象存
储通过跨可用区部署,实现高可用性。在每个数据中心中,都至少部署两个内部负载均衡器,内部负载
均衡器后面对接多个对象存储的前置服务器(Proxy-server)。

DNS和CDN内容分发网络_第3张图片

1. 当一个客户端要访问 object.yourcompany.com 的时候,需要将域名转换为 IP 地址进行访问,所
以它要请求本地 DNS 解析器。
2. 本地 DNS 解析器先查看看本地的缓存是否有这个记录。如果有则直接使用,因为上面的过程太复杂
了,如果每次都要递归解析,就太麻烦了。
3. 如果本地无缓存,则需要请求本地的 DNS 服务器。
4. 本地的 DNS 服务器一般部署在你的数据中心或者你所在的运营商的网络中,本地 DNS 服务器也需
要看本地是否有缓存,如果有则返回,因为它也不想把上面的递归过程再走一遍。
5. 至 7. 如果本地没有,本地 DNS 才需要递归地从根 DNS 服务器,查到.com 的顶级域名服务器,最
终查到 yourcompany.com 的权威 DNS 服务器,给本地 DNS 服务器,权威 DNS 服务器按说会返
回真实要访问的 IP 地址。

        但是对于复杂的应用,尤其是跨地域跨运营商的大型应用,则需要更加复杂的全局负载均衡机制,因而
需要专门的设备或者服务器来做这件事情,这就是全局负载均衡器(GSLB,Global Server Load
Balance)。
在 yourcompany.com 的 DNS 服务器中,一般是通过配置 CNAME 的方式,给
object.yourcompany.com 起一个别名,例如 object.vip.yourcomany.com,然后告诉本地 DNS 服务
器,让它请求 GSLB 解析这个域名,GSLB 就可以在解析这个域名的过程中,通过自己的策略实现负载均
衡。
图中画了两层的 GSLB,是因为分运营商和地域。我们希望不同运营商的客户,可以访问相同运营商机房
中的资源,这样不跨运营商访问,有利于提高吞吐量,减少时延。
1. 第一层 GSLB,通过查看请求它的本地 DNS 服务器所在的运营商,就知道用户所在的运营商。假设
是移动,通过 CNAME 的方式,通过另一个别名 object.yd.yourcompany.com,告诉本地 DNS 服
务器去请求第二层的 GSLB。
2. 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,就知道用户所在的地理位置,然后
将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地
址,返回给本地 DNS 服务器。
3. 本地 DNS 服务器将结果返回给本地 DNS 解析器。
4. 本地 DNS 解析器将结果缓存后,返回给客户端。
5. 客户端开始访问属于相同运营商的距离较近的 Region 1 中的对象存储,当然客户端得到了六个 IP
地址,它可以通过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储一般会有三
个备份,从而可以实现对存储读写的负载均衡


二、传统CDN加速

       当一个用户想访问一个网站的时候,指定这个网站的域名,DNS 就会将这个域名解析为地址,然后用户
请求这个地址,返回一个网页。那这里面还有没有可以优化的地方呢?我们的网站访问可以借鉴“就近配送”这个思路.

       

      CDN大概流程:

       全球有这么多的数据中心,无论在哪里上网,临近不远的地方基本上都有数据中心。是不是可以在这些
数据中心里部署几台机器,形成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就可以就
近访问了,这些分布在各个地方的各个数据中心的节点,就称为边缘节点。
      由于边缘节点数目比较多,但是每个集群规模比较小,不可能缓存下来所有东西,因而可能无法命中,
这样就会在边缘节点之上。有区域节点,规模就要更大,缓存的数据会更多,命中的概率也就更大。在
区域节点之上是中心节点,规模更大,缓存数据更多。如果还不命中,就只好回源网站访问了。

DNS和CDN内容分发网络_第4张图片

CDN 系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰它。有了这个分发系统之后,接下来就是,客户端如何找到相应的边缘节点进行访问。

 

       上面说到的基于 DNS 的全局负载均衡,这个负载均衡主要用来选择一个就近的同样运营商的服
务器进行访问。你会发现,CDN 分发网络也是一个分布在多个区域、多个运营商的分布式系统,也可以
用相同的思路选择最合适的边缘节点。DNS和CDN内容分发网络_第5张图片

      在没有 CDN 的情况下,用户向浏览器输入 www.web.com 这个域名,客户端访问本地 DNS 服务器的
时候,如果本地 DNS 服务器有缓存,则返回网站的地址;如果没有,递归查询到网站的权威 DNS 服务
器,这个权威 DNS 服务器是负责 web.com 的,它会返回网站的 IP 地址。本地 DNS 服务器缓存下 IP
地址,将 IP 地址返回,然后客户端直接访问这个 IP 地址,就访问到了这个网站。
      然而有了 CDN 之后,情况发生了变化。在 web.com 这个权威 DNS 服务器上,会设置一个 CNAME 别
名,指向另外一个域名 www.web.cdn.com,返回给本地 DNS 服务器。
      当本地 DNS 服务器拿到这个新的域名时,需要继续解析这个新的域名。这个时候,再访问的就不是
web.com 的权威 DNS 服务器了,而是 web.cdn.com 的权威 DNS 服务器,这是 CDN 自己的权威
DNS 服务器。在这个服务器上,还是会设置一个 CNAME,指向另外一个域名,也即 CDN 网络的全局
负载均衡器。
      接下来,本地 DNS 服务器去请求 CDN 的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台
合适的缓存服务器提供服务,选择的依据包括:
      1)根据用户 IP 地址,判断哪一台服务器距用户最近;
      2)用户所处的运营商;
      3)根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需的内容;
      4)查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。

      基于以上这些条件,进行综合分析之后,全局负载均衡器会返回一台缓存服务器的 IP 地址。
本地 DNS 服务器缓存这个 IP 地址,然后将 IP 返回给客户端,客户端去访问这个边缘节点,下载资源。
缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的
内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到
本地。

CDN缓存的内容

        CDN 最擅长的是缓存静态数据,除此之外还可以缓存流媒体数据。

它也支持动态数据的缓存:

1)边缘计算的模式:既然数据是动态生成的,所以数据的逻辑计算和存储,
也相应的放在边缘的节点。其中定时从源数据那里同步存储的数据,然后在边缘进行计算得到结果。
就像对生鲜的烹饪是动态的,没办法事先做好缓存,因而将生鲜超市放在你家旁边,既能够送货上
门,也能够现场烹饪,也是边缘计算的一种体现。

2)链路优化的模式:数据不是在边缘计算生成的,而是在源站生成的,但
是数据的下发则可以通过 CDN 的网络,对路径进行优化。因为 CDN 节点较多,能够找到离源站很
近的边缘节点,也能找到离用户很近的边缘节点。中间的链路完全由 CDN 来规划,选择一个更加可
靠的路径,使用类似专线的方式进行访问。   

你可能感兴趣的:(网络,CDN,DNS)