【系统设计系列】 DNS和CDN

系统设计系列初衷


System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

中文版: https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

初衷主要还是为了学习系统设计,但是这个中文版看起来就像机器翻译的一样,所以还是手动做一些简单的笔记,并且在难以理解的地方对照英文版,根据自己的理解在AI的帮助下进行翻译和知识扩展。

域名系统(Domain name system, 简称DNS)

                                                来源:DNS 安全介绍

什么是DNS

域名系统是把 www.example.com 等域名转换成 IP 地址。

这里需要了解一下DNS协议。

DNS 协议的作用是将域名转换为 IP 地址,使得计算机之间可以通过域名进行通信。例如,当用户在浏览器中输入网址时,DNS 协议会将这个网址对应的域名解析成 IP 地址,然后计算机就可以通过这个 IP 地址连接到目标服务器,获取相应的网页信息。同时,DNS 还支持反向解析,即通过 IP 地址查找对应的域名。

域名系统是分层次的,一些 DNS 服务器位于顶层。当查询(域名) IP 时,路由或 ISP 提供连接 DNS 服务器的信息。较底层的 DNS 服务器缓存映射,它可能会因为 DNS 传播延时而失效。DNS 结果可以缓存在浏览器或操作系统中一段时间,时间长短取决于存活时间 TTL

  • NS 记录(域名服务) ─ 指定解析域名或子域名的 DNS 服务器。
  • MX 记录(邮件交换)  ─ 指定接收信息的邮件服务器。
  • A 记录(地址)  ─ 指定域名对应的 IP 地址记录。
  • CNAME(规范)  ─ 一个域名映射到另一个域名或 CNAME 记录( example.com 指向 www.example.com )或映射到一个 A 记录。

CloudFlare 和 Route 53 等平台提供管理 DNS 的功能。某些 DNS 服务通过集中方式来路由流量:

扫描二维码关注公众号,回复: 16927437 查看本文章
  • 加权轮询调度
    • 防止流量进入维护中的服务器
    • 在不同大小集群间负载均衡
    • A/B 测试
  • 基于延迟路由
  • 基于地理位置路由

DNS的查询方式

DNS(Domain Name System,域名系统)主要有以下几种查询方式:

递归查询(Recursive Query):

递归查询是一种将查询请求传递给其他 DNS 服务器的方式,直到收到查询结果。当客户端向本地域名服务器发送查询请求时,本地域名服务器会代表客户端在域名树中逐级向上查询,直到找到对应的 IP 地址或查询到顶级域名服务器。在这个过程中,本地域名服务器会先查询自己的缓存,如果缓存中没有相应的记录,它会向其他 DNS 服务器发送查询请求,直到收到回答。

迭代查询(Iterative Query):

迭代查询是另一种查询方式,客户端向本地域名服务器发送查询请求,如果本地域名服务器没有相应的记录,它会将查询请求依次转发给其他 DNS 服务器,直到收到有效的 IP 地址。在迭代查询过程中,客户端和服务器之间存在多次交互,服务器在查询过程中逐步向上查找,直至找到答案。

反向查询(Reverse Query):

反向查询是基于 IP 地址查询主机名的方式。当客户端知道一个 IP 地址,想要查询其对应的主机名时,可以发送反向查询请求。本地域名服务器会接收到这个请求,并向其他 DNS 服务器发送查询请求,最终返回对应的主机名。

负载均衡查询(Load Balancing Query):

负载均衡查询是一种多个服务器之间的负载均衡技术。当一个域名对应多个 IP 地址时,为了避免单一服务器压力过大,可以将这些 IP 地址分配给多个服务器,组成一个服务器集群。这时,域名服务器需要将多个 IP 地址存储在 A 记录中,并将这些 A 记录分配给不同的服务器。当客户端发送查询请求时,本地域名服务器会依次向这些服务器发送查询请求,直到收到第一个有效的 IP 地址。

这些查询方式在域名解析过程中发挥着重要作用,不同的查询方式适用于不同的场景和需求。

DNS的缺陷

CDN(Content delivery network 内容分发网络)

什么是CDN

内容分发网络(CDN)是一个全球性的代理服务器分布式网络,它从靠近用户的位置提供内容。通常,HTML/CSS/JS,图片和视频等静态内容由 CDN 提供,虽然亚马逊 CloudFront 等也支持动态内容。CDN 的 DNS 解析会告知客户端连接哪台服务器。

将内容存储在 CDN 上可以从两个方面来提供性能:

  • 从靠近用户的数据中心提供资源
  • 通过 CDN 你的服务器不必真的处理请求

CDN 推送(push)

当你服务器上内容发生变动时,推送 CDN 接受新内容。直接推送给 CDN 并重写 URL 地址以指向你的内容的 CDN 地址。你可以配置内容到期时间及何时更新。内容只有在更改或新增是才推送,流量最小化,但储存最大化。流量较小的网站或内容不经常更新的网站可以很好地使用推送 CDN。 内容一次性放置在 CDN 上,而不是定期重新拉取。

CDN 拉取(pull)

CDN 拉取是当第一个用户请求该资源时,从服务器上拉取资源。你将内容留在自己的服务器上并重写 URL 指向 CDN 地址。直到内容被缓存在 CDN 上为止,这样请求只会更慢,

存活时间(TTL)决定缓存多久时间。CDN 拉取方式最小化 CDN 上的储存空间,但如果过期文件并在实际更改之前被拉取,则会导致冗余的流量。

流量大的网站可以很好地使用CDN拉取,因为流量分布得更均匀,CDN 上仅保留最近请求的内容。

CDN的缺陷

根据流量的不同,CDN 成本可能会很高,但应权衡不使用 CDN 时可能产生的额外成本。

如果在 TTL 过期之前更新内容,则内容可能会过时。

CDN 需要更改静态内容的 URL 以指向 CDN。

猜你喜欢

转载自blog.csdn.net/u013379032/article/details/132725934