DNS和CDN的实现

DNS如何实现IP查找

为了后面说清楚CDN,这里先介绍DNS的解析过程。当然此类文章网络上已经极多。但是我还是想按照我的理解来说一下DNS是如何工作的。

在整个DNS过程中有四个重要概念,下面解释下。

DNS Resolver - 递归解析器,主要是接收客户端发出的域名解析请求,并发送 DNS query 查询请求。对于客户端来说它不需要任何操劳,等待 DNS Resolver 告诉自己域名转IP的结果就好。

Root Server - 这是转换IP执行的第一步查询,根服务器并不会保存具体的域名IP映射信息。它就像一个索引服务器,会告诉你下一步该去那台 TLD Server 查询。

TLD Server - 这是顶级域名服务器,是执行IP查询的第二步,这里会告诉 DNS Resolver 权威域名服务器的地址。

Authoriative Server - 权威域名服务器就是包含了完整的机器名的域名,例如:http://www.example.com ,在这台机器上保存了这个具体域名对应的IP地址

下面根据图中的十个步骤说一下每一步都在干嘛。

1.个用户在浏览器输入了:http://example.com,这时会产生一个 DNS 查询,从而进入到 DNS Resolver中;
2.Resolver 会进入到 root server 进行查询;
3.root server 返回了 TLD server 的地址,查询请求转向顶级域名服务,这里是 .com 服务器。
4.递归解析器向 .com 服务器发送一个请求;
5.TLD server 收到请求后会返回 http://example.com 权威服务器的地址;
6.递归解析器又发了一个向权威服务器查询的请求,至此权威服务器查询自己的映射表拿到IP;
7.返回查询到的IP给了 DNS Resolver;
8.DNS Resolver返回IP给浏览器,浏览器将会用这个IP来建立连接,发起请求;
9.客户端通过这个IP地址,发起一个 HTTP 请求;
10.服务器解析请求,并返回数据到浏览器。

这里需要补充一点是,上面每一步其实都有DNS缓存的设计。比如:

浏览器会缓存DNS的结果,(chrome://net-internals/#dns)
操作系统的DNS模块会缓存
后面的每一层级也都有缓存

所以很多时候,我们的解析过程并不是要顺序执行完这8个步骤。这就跟我们自己开发的应用服务一样,层层缓存,有缓存就读取缓存结果,缓存实现就执行完整流程。

DNS的解析分类
DNS有多种解析记录可以设置,我这里介绍三个很常用的记录。

A记录 - 被称为IP指向,用户设置自己域名指到对应的IP主机上。如果想要利用A记录实现 负载均衡 需要主机商的支持。
CNAME记录 - 它相当于为一个主机名设置一个别名,而且该记录不能直接使用IP,只能是另一个主机的别名。CDN主要就是利用该记录来完成的。如果有A记录与CNAME记录同时存在,A记录会被优先使用,换句话说CNAME记录不会生效。
NS记录 - 用来设置一个域名的权威服务器路径,该记录只会对子域名生效。这个地方可以设置IP也可以设置另外一个权威服务器的域名。需要重点指出的是它的优先级高于A记录,并且它在DNS解析过程中,会跳过2,3,4,5步。

了解完了DNS的步骤,接下来就进入到CDN部分的分析。

CDN访问加速度

了解一个东西之前最好知道它能干什么,带来的好处是什么。然后我们再去看它的运行原理。对于CDN有以下几个方面的好处。

提高页面加载速度

这是最显而易见的一个优势,通过上面的图,大家也可以直观感受下,用户访问距离自己最近的机器,速度肯定是最快的。并且网站的加载速度越快那么用户体验越优秀,你的网站更会受到对应用户的喜爱。至于如何实现就近访问的,后面原理部分介绍。

增加内容的冗余

CDN是一个典型的分布式架构,它通过增加数据的冗余,一方面保障在大流量面前有多台服务器能够提供相同的数据;另一方面当部分机器出现故障时,可以进行故障转移。

节省带宽

如果大家自己买过云服务就知道,带宽每增加一点价格就飙升。使用CDN后,由于流量被分流了,那么原机器带宽要求自然就降低了。当然带宽费用降低了,你还需要为CDN付费。

保障服务安全

CDN可防止的攻击:DDOS攻击,该攻击就是通过巨大流量打满你的带宽,让你丧失服务能力。那么由于CDN的存在,它将巨大的流量进行了分流。那么源站压力自然小了。这其实也是高并发需要考虑的

CDN目前不仅仅是只能缓存静态的HTML、CSS、JS、VIDEO,现在还有能够缓存动态接口内容的CDN,这为我们在架构高并发的服务时,提供了更多的手段进行选择。

CDN工作原理

在介绍DNS的时候,介绍了客户端是如何获取到IP地址的。那么有了CDN之后,这个过程该怎么处理呢?

为了实现上述目的,我们会为该域名配置一个 CNAME(大家注意上面提到的CNAME与A记录的优先级),那么这个CNAME是最终如何解析到对应的CDN机器呢?其实流程与DNS解析是一样的。当发现一个域名设置了CNAME时,DNS解析器会继续解析这个CNAME别名(其实就是另一个域名)。对这个CNAME解析的时候会用到全局负载DNS解析,它会根据访问者的地理位置信息返回对应的IP(CDN机器的IP)。因此客户端实际上得到的是距离它最近的CDN机器的IP地址。

如果说用户访问CDN,但是CDN上没有对应内容会怎么办?此时CDN机器其实会根据自身专用的DNS解析服务,根据域名得到源站的IP,然后向源站发送请求获取数据,并把这些数据缓存到本地,方便后续使用;同时返回本次结果,完成本次请求的访问。

需要说一下的是,CDN其实也是分层的。距离用户最近的称之为边缘节点。而CDN的中心服务器集群被称为二级缓存。在上面就是应用部署的源站。一般边缘节点没数据就去找二级缓存,二级缓存没数据就去找源站(被称为回源)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值