translated

This commit is contained in:
geekpi 2017-09-08 08:54:05 +08:00
parent 8d5d157897
commit 77684453b5

View File

@ -4,7 +4,7 @@
在 GitHub我们最近从头改进了 DNS。这包括了我们[如何与外部 DNS 提供商交互][4]以及我们如何在内部向我们的主机提供记录。为此,我们必须设计和构建一个新的 DNS 基础设施,它可以随着 GitHub 的增长扩展并跨越多个数据中心。
以前GitHub 的 DNS 基础设施相当简单直接。它包括每台服务器上本地的,只进行转发的 DNS 缓存,以及被所有这些主机使用的一对缓存和权威主机。这些主机在内部网络以及公共互联网上都可用。我们在缓存守护程序中配置了域存根,以在本地进行查询,而不是在互联网上进行递归。我们还在我们的 DNS 提供商处设置了 NS 记录,它们将特定的内部域指向这对主机的公共 IP以便我们网络外部的查询。
以前GitHub 的 DNS 基础设施相当简单直接。它包括每台服务器上本地的,只转发的 DNS 缓存,以及被所有这些主机使用的缓存和权威的一对主机。这些主机在内部网络以及公共互联网上都可用。我们在缓存守护程序中配置了域记录,以在本地进行查询,而不是在互联网上进行递归。我们还在我们的 DNS 提供商处设置了 NS 记录,它们将特定的内部域指向这对主机的公共 IP以便我们网络外部的查询。
这个配置使用了很多年,但并非没有它的缺点。许多程序对于解析 DNS 查询非常敏感,我们遇到的任何性能或可用性问题最好情况会导致排队和性能降级,最坏情况下客户会停机。配置和代码更改可能会导致查询率的大幅意外更改。因此超出这两台主机的扩展成为了一个问题。由于这些主机的网络配置,我们只需要继续添加有问题的 IP 和主机。在试图解决和补救这些问题的同时,由于缺乏指标和可见性,老旧的系统难以识别原因。在许多情况下,我们使用 `tcpdump` 来识别有问题的流量和查询。另一个问题是在公共 DNS 服务器上运行,我们冒着泄露内部网络信息的风险。因此,我们决定建立更好的东西,并开始确定我们对新系统的要求。