绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
探讨 DNS 解析
2022-05-07 15:57:58

DNS 服务器

在现实世界中,当您进行阅览新闻、在线下单、下载文件或观看直播时,您需要通过访问域名来访问目标网站,例如 youtube.com、google.com 等。您只需记住这些网站的名称,而非它们的 IP 地址,因为与网站名称相比,IP 地址是很难记住的。因此,您需要一个作为 DNS 服务器的网站/域名地址本。

DNS 在日常生活中非常重要。每个在线的人都需要访问它,但同时,这对它来说也是一个非常大的挑战。如果 DNS 服务器出现故障,整个 Internet 网络都将关闭。

另外,上网的人分布在世界各地,如果每个人都去同一个地方访问某个服务器,延迟会非常大。因此,DNS 服务器必须设置为高可用高并发分布式的。

因此,它应具有如下树状层次结构:

  • 根 DNS 服务器:返回域 DNS 服务器的 IP 地址。
  • 域 DNS 服务器:返回权威 DNS 服务器的 IP 地址。
  • 权威 DNS 服务器:返回对应主机的 IP 地址。

DNS 解析过程

为了提高 DNS 解析性能,许多网络会根据位置部署 DNS 缓存服务器DNS 解析过程如下:(这里以访问 google.com 为例)

  • 客户端会发出 DNS 请求,询问 google.com 的 IP 是什么,它会先在浏览器缓存中查找 google.com 的 IP 地址。

  • 然后请求将被发送到本地 DNS 服务器。本地 DNS 服务器由您的网络服务供应商 (ISP, Internet Service Provider) 自动分配,这通常是您的 ISP 提供的路由器。

  • 本地 DNS 服务器收到来自客户端的 DNS 请求,它会在其缓存中查找 google.com 的 IP 地址。如果它可以找到对应的条目,它将直接将 IP 地址返回给客户端。否则,本地 DNS 服务器会询问它的根域名服务器:“你能告诉我 google.com 的 IP 地址吗”?根域名服务器作为别的 DNS 服务器,全球共 13 台。它不会直接解析域名,而起到一个“指路”的作用。

  • 根 DNS 服务器收到本地 DNS 的请求,发现要查找域名的后缀是 .com,然后告诉本地 DNS 服务器:“好的,你要找的既然是 .com 后缀的域名,它是由 .com 管理的。这里是 .com 区域的域 DNS 服务器的 IP 地址,去找它问吧”。

  • 本地 DNS 服务器转向 .com 区域的域名服务器,并请求 google.com 的 IP 地址。 .com 区域 DNS 服务器再次为该请求指明了方向。它提供了负责 google.com 的权威 DNS 服务器的 IP 地址。

  • 本地 DNS 服务器然后转向了权威 DNS 服务器并询问 google.com 的 IP 地址。这次,google.com 的权威 DNS 服务器是域名解析结果的原始来源。它会将 google.com 的 IP 地址直接返回到本地 DNS 服务器

  • 然后本地 DNS 服务器将 IP 返回给客户端并将其缓存。至此,DNS 解析完成

总结一下,我画了下面这张图:

DNS 负载均衡

内部负载均衡

DNS 服务器首先进行内部负载均衡。比如,应用要访问数据库,应该在应用中配置数据库的 IP 地址,还是应该配置数据库的域名呢?

很明显,应该配置域名,因为一旦数据库因为某种原因换到另一台机器上,如果多个应用都配置了这个数据库,一旦 IP 地址改变了,所有这些应用都需要重新修改。

但是,如果配置了域名,只要在 DNS 服务器中将域名映射到一个新的 IP 地址就完成了这项工作,如此大大简化了运维工作。

在此基础上,我们可以走得更远。例如,如何在访问它的多个应用程序之间进行负载均衡?只需将其配置为域名即可。在域名解析中,我们只需要配置策略,这次返回个 IP,下次返回第二个 IP,就可以实现负载均衡了。

全局负载均衡

为了保证我们的应用程序的高可用性,它们经常被部署在多个计算机数据中心,而每个地方都会有自己的 IP 地址。

当用户访问一个域名时,这个 IP 地址可以轮询多个数据中心。如果某个数据中心由于某种原因宕机了,只要在 DNS 服务器中删除该数据中心对应的 IP 地址即可。这样就可以实现一定程度的高可用。

另外,我们肯定希望纽约的用户访问纽约的数据中心,西雅图的用户访问西雅图的数据中心,这样客户体验会非常好,访问速度会超级快。这就是全局负载均衡的概念。

我们来看看它是如何工作的,假设有多个地区,每个地区都有三个可用区域。

  • 当客户端要访问 app.metaleap.com 时,需要将域名转换为 IP 地址才能访问,所以需要请求本地 DNS 解析器。

  • 本地 DNS 解析器首先检查本地缓存是否有此记录。如果有,直接使用。

  • 如果没有本地缓存,则需要请求本地 DNS 服务器。

  • 本地 DNS 服务器也需要检查本地是否有缓存,如果有则返回。

  • 如果没有本地 DNS,需要从根 DNS 服务器递归查找 .com 的域名服务器,直到找到 metaleap.com 的权威 DNS 服务器,交给本地 DNS 服务器。权威 DNS 服务器通常会返回真实 IP 地址。

对于不需要全局负载均衡的简单应用,metaleap.com 的权威 DNS 服务器可以直接将域名 app.metaleap.com 解析为一个或多个 IP 地址,然后客户端可以使用多个 IP 地址进行轮询来实现简单的负载均衡

但是对于复杂的应用,尤其是跨区域、跨数据中心的大型应用,需要更复杂的全局负载均衡机制,这需要专门的设备或服务器来做这件事——全局负载均衡器(GSLB,Global Load Balancer)

在 metaleap.com 的 DNS 服务器中,一般通过配置 CNAME,给 app.metaleap.com 起一个别名,如 app.vip.metaleap.com,然后告诉本地 DNS 服务器去请求 GSLB 来解析域名,GSLB 在解析这个域名的过程中,可以通过自己的策略来实现负载均衡

图中绘制了两层 GSLB,分别为数据中心区域。我们希望不同数据中心的客户可以访问同一数据中心的资源,以提高吞吐量并减少延迟。

结论

DNS 是网络世界的通讯录,可以通过域名搜索地址,因为域名服务器是按树状结构组织的,所以域名搜索采用递归的方式,通过缓存来提升性能。

在域名和 IP 的映射过程中,应用程序有机会进行基于域名的负载均衡,可以是简单的负载均衡,也可以是基于地址、数据中心和区域的全局负载均衡。

链接:https://medium.com/geekculture/dns-deep-dive-421e321a0a06

(版权归原作者所有,侵删)

(完)


分享好友

分享这个小栈给你的朋友们,一起进步吧。

服务器与存储
创建时间:2020-06-17 17:54:39
服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。存储市场将继续经历飞速的变革,这些变革由现正进行的存储资源网络化以及存储虚拟化进程所推动。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~