社区编辑申请
注册/登录
探讨 DNS 解析
网络
DNS 在日常生活中非常重要。每个在线的人都需要访问它,但同时,这对它来说也是一个非常大的挑战。如果 DNS 服务器出现故障,整个 Internet 网络都将关闭。

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

责任编辑:庞桂玉 来源: 马哥Linux运维
相关推荐

2022-05-18 23:42:08

网络安全安全分析工具

2022-03-22 07:37:33

DNS域名IP

2022-05-05 14:01:02

DNS高危漏洞uClibc

2022-04-19 14:41:29

Oracle数据库SQL

2022-05-11 12:12:32

ScapyPython网络包

2022-05-13 09:15:21

三层交换机二层交换机VLAN

2022-04-01 15:18:04

HarmonyHDF 驱动鸿蒙

2021-12-06 06:19:03

2022-04-26 10:55:32

数据模型

2022-04-12 08:43:21

Python内置模块

2022-03-07 15:22:16

classHarmony鸿蒙

2022-04-24 15:37:26

LinuxCPU

2010-09-27 14:10:29

DNS协议简介

2022-04-01 15:26:06

Harmony操作系统鸿蒙

2022-03-04 08:56:58

HTTPDNS 服务器浏览器

2022-04-23 16:30:22

Linux磁盘性能

2022-04-23 17:49:05

区块链元宇宙MetaCon

2022-04-21 08:09:18

Spark字段血缘Spark SQL

2010-06-01 13:55:09

IPv6地址

2022-04-21 14:05:21

开发者论坛

同话题下的热门内容

新继网红WiFi7 到底有多厉害Meta高性能集群网络架构之路如何应对网络中断的噩梦5G用来服务IoT,6G用来干什么?刚刚!加拿大官宣禁用华为与中兴5G设备,称威胁「国家安全」MQTT QoS 设计:车联网平台消息传输质量保障车联网通信安全之 SSL/TLS 协议秒懂流媒体协议 RTMP 与 RTSP

编辑推荐

什么是持续集成?该怎么做?业绩继续高增长 华为企业业务这样的速度还能持续多久?6张动态图轻松学习TCP三次握手和四次挥手区块链分叉是怎么回事儿?终于懂了美国更黑暗的操作才刚刚开始,华为匹夫无罪怀璧其罪如何破局?
我收藏的内容
点赞
收藏

51CTO技术栈公众号