系统设计之域名系统

域名系统Domain Name System

域名系统(DNS)是互联网的命名服务,将人类友好的域名映射到机器可读的 IP 地址。 DNS 服务对用户透明。 当用户在浏览器中输入域名时,浏览器必须通过询问 DNS 基础设施将域名翻译为 IP 地址。 一旦获取所需的 IP 地址,用户的请求将被转发到目标 Web 服务器。

重要细节

  1. 命名服务器Name Servers:DNS 不是单一服务器。它是一个完整的基础设施,拥有众多服务器。响应用户查询的 DNS 服务器称为名称服务器。
  2. 资源记录Resource Records:DNS 数据库以资源记录(RR)的形式存储域名到 IP 地址的映射。 RR 是用户从名称服务器请求的最小信息单元。 有不同类型的 RR。 下表描述了常见的 RR。 三个重要的信息是类型,名称和值。 名称和值根据 RR 的类型而变化。
Type **Description ** **Name ** **Value ** **Example (Type, Name, Value) **
A Provides the hostname to IP address mapping Hostname IP address (A, relay1.main.educative.io,104.18.2.119) (A,relay1.main.educative.io,104.18.2.119)
NS Provides the hostname that is the authoritative DNS for a domain name Domain name Hostname (NS, educative.io, dns.educative.io)
CNAME Provides the mapping from alias to canonical hostname Hostname Canonical name (CNAME, educative.io, server1.primary.educative.io)
MX Provides the mapping of mail server from alias to canonical hostname Hostname Canonical name (MX, mail.educative.io, mailserver1.backup.educative.io) (MX,mail.educative.iomailserver1.backup.educative.io
  1. 缓存Cache:DNS 在不同层级上使用缓存来减少用户的请求延迟。缓存在减轻 DNS 基础设施负担方面发挥着重要作用,因为它必须满足整个互联网的查询。
  2. 层次结构Hierarchy:DNS 名称服务器以层次形式存在。由于其不断增长的规模和查询负载,层次结构使 DNS 具有高度可扩展性。在下一课中,我们将看看如何使用类似树状结构来管理整个 DNS 数据库。

DNS层次结构

DNS 并不是一个单一的服务器,它接受请求并响应用户查询。它是一个完整的基础设施,具有不同层次的名称服务器。

DNS 层次结构中主要有四种类型的服务器:

  1. DNS解析器DNS resolver:解析器启动查询序列并将请求转发给其他 DNS 名称服务器。通常,DNS 解析器位于用户网络的前提下。然而,DNS 解析器也可以通过缓存技术满足用户的 DNS 查询,我们很快就会看到。这些服务器也可以称为本地或默认服务器。
  2. 根级别命名服务器Root-level name servers:这些服务器接收来自本地服务器的请求。根名称服务器根据顶级域名维护名称服务器,例如 .com , .edu , .us 等。例如,当用户请求 educative.io 的 IP 地址时,根级别名称服务器将返回一个持有 .io 域的 IP 地址的顶级域(TLD)服务器列表。
  3. 顶级域名(TLD)名称服务器:这些服务器保存着权威名称服务器的 IP 地址。查询方将获得属于组织权威服务器的 IP 地址列表。
  4. 权威名称服务器:这些是组织的 DNS 名称服务器,提供 Web 或应用服务器的 IP 地址。

迭代 vs 递归查询解析

执行 DNS 查询有两种方式:

  1. 迭代式:本地服务器请求根服务器、顶级域名服务器和权威服务器的 IP 地址。
  2. 递归:最终用户请求本地服务器。本地服务器进一步请求根 DNS 名称服务器。根名称服务器将请求转发给其他名称服务器。

注意:通常,迭代查询更受欢迎,以减少 DNS 基础设施的查询负载。

缓存

缓存指的是经常请求的资源记录的临时存储。记录是 DNS 数据库中的数据单元,显示名称与值的绑定关系。缓存可以减少用户的响应时间,降低网络流量。当我们在不同层次上使用缓存时,可以减轻 DNS 基础设施的查询负担。缓存可以在浏览器、操作系统、用户网络内的本地名称服务器或 ISP 的 DNS 解析器中实现。

注意:即使没有可用的缓存来解决用户的查询并且必须访问 DNS 基础设施,缓存仍然是有益的。本地服务器或 ISP DNS 解析器可以缓存顶级域服务器或权威服务器的 IP 地址,并避免请求根级服务器。

DNS是一个分布式系统

虽然 DNS 层次结构促进了我们今天所知道的分布式互联网,但它本身也是一个分布式系统。 DNS 的分布式特性具有以下优势:

  1. 它避免成为单点故障(SPOF)。
  2. 它实现了低查询延迟,使用户可以从附近的服务器获得响应。
  3. 在维护和更新或升级过程中,它具有更高的灵活性。例如,如果一个 DNS 服务器宕机或负载过重,另一个 DNS 服务器可以响应用户查询。

高扩展性

由于其分层性质,DNS 是一个高度可扩展的系统。大约有 1,000 个复制的 13 个根级服务器实例分布在全球各地,以策略性地处理用户查询。工作任务分配给 TLD 和根服务器来处理查询,最终由组织自己管理的权威服务器来使整个系统运作。如上所示的 DNS 层次树,不同的服务处理树的不同部分,实现了系统的可扩展性和可管理性。

可靠性

DNS 成为可靠系统的三个主要原因:

  1. 缓存:缓存是在浏览器、操作系统和本地名称服务器中进行的,ISP DNS 解析器也维护着经常访问服务的丰富缓存。即使一些 DNS 服务器暂时宕机,缓存记录也可以被提供,使 DNS 成为一个可靠的系统。
  2. 服务器复制:DNS 在全球范围内系统地复制了每个逻辑服务器的副本,以在低延迟下满足用户请求。冗余服务器提高了整个系统的可靠性。
  3. 协议:尽管许多客户端依赖不可靠的用户数据报协议(UDP)来请求和接收 DNS 响应,但重要的是要认识到 UDP 也提供了独特的优势。它速度更快,因此提高了 DNS 性能。此外,自其创立以来,互联网服务的可靠性已经提高,因此通常更喜欢 UDP 而不是 TCP。如果之前没有响应,DNS 查询通常会在传输层重新传输。因此,请求-响应可能需要额外的往返,这与 TCP 相比提供了更短的延迟,TCP 在数据交换之前每次都需要进行三次握手。

一致性

DNS 使用各种协议在层次结构中的复制服务器之间更新和传输信息。DNS 为了实现高性能而妥协于强一致性,因为与写入相比,数据经常从 DNS 数据库中读取。然而,DNS 提供最终一致性,并懒惰地在复制服务器上更新记录。通常,更新 DNS 服务器上的记录需要从几秒钟到三天不等的时间。在互联网上传播信息的时间取决于 DNS 基础设施、更新的大小以及正在更新的 DNS 树的哪个部分。

一致性也可能因缓存而受到影响。由于权威服务器位于组织内部,可能会在组织服务器故障时更新某些资源记录。因此,默认/本地和 ISP 服务器上的缓存记录可能已过时。为了减轻这个问题,每个缓存记录都有一个称为生存时间(TTL)的过期时间。

相关推荐
豌豆花下猫11 分钟前
Python 潮流周刊#84:2024 年 Python 的最佳实践(摘要)
后端·python·ai
夫琅禾费米线15 分钟前
React Router 用法概览
前端·javascript·react.js·前端框架
开心工作室_kaic16 分钟前
springboot542健身房管理系统(论文+源码)_kaic
前端·spring boot·html·生活·html5
张朋伟——张朋伟17 分钟前
vue 处理二进制文件流下载,封装请求
前端·javascript·vue.js
yonuyeung19 分钟前
代码随想录算法【Day10】
java·前端·算法
answerball30 分钟前
告别“原地踏步”!Vue Router:带你飞跃单页应用的迷宫 🧭 (附 Vite 快速搭建教程)
前端·vue.js·vue-router
一个人的程序31 分钟前
Laravel 11 角色和权限4--文章模块
后端·laravel
An_s36 分钟前
canvas+fabric实现时间刻度尺(二)
前端·javascript·vue.js·elementui·fabric
远洋录36 分钟前
Tailwind CSS 实战:表单设计与验证实现
前端·人工智能·react
Anarkh_Lee38 分钟前
SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究
spring boot·后端