具有 DNS 和 javascript 的对等点之间的负载平衡

Load balancing between peers with DNS and javascript

让我们做一个思想实验(显然,这不是真实的案例场景)。说:

现在,假设我想使用这个群来保持一个非常受欢迎的网站(数百万用户)的在线(静态部分)。我的做法如下:

我用十几个同行的网络进行了实际实验,运行顺利。如果对等点靠近我当前的位置,从对等点加载资源实际上比从我的服务器加载资源更快。太好了

现在,我想考虑如何使用 DNS 在所有这些服务器之间进行负载平衡。当然,依赖轮询 DNS 将是自杀:我绝对不能拥有一个包含数百万条 A 记录的域。

这是我的想法,我想知道原则上这是否可行。

在我看来这应该可行,但我发现了一些问题。我首先想到的是:缓存 DNS 服务器会生我的气吗?说:Google 的 4.4.4.4 将收到对我域的数百万个不同随机子域的数百万个请求。它最终会阻止它或停止响应吗?

这样做还有其他潜在的问题吗?有更好的方法吗?这从理论上来说是完全不可行的吗?

DNS 背后的核心概念是,对于您拥有的每个可寻址 IP 地址,您都有一个对应的 A 记录。这是符合逻辑的,因为每个服务器只能有一个主机名,而 DNS 是关于主机名的。

但是,有时您不希望主机名成为人们连接的名称,因此您可以使用别名 (显然,将这​​些称为别名可能会与 A 记录混淆)

因此,如果您正在查看 Example.com,您可能会

fred  IN  A 192.168.0.1
alice IN  A 192.168.0.2 
bob   IN  A 192.168.0.3
www   IN  CNAME bob.example.com
web   IN  CNAME www.example.com

因此,除非您实际部署了数百万台具有唯一 IP 地址的服务器(如果是这种情况,我很好奇您从哪里获得它们以及您是谁!)但是如果您有 x 台主机并且您想要为它们提供动态连接的主机名,那么您实际上想要配置 CNAME 记录。

关于 CNAME 记录的一个有趣的部分是,您可以使用它们设置多个重定向,这样您就可以使用它们分层层次结构,这是 A 记录无法做到的。

如果您正在关注 rules of DNS,那么 google 等人没有理由对您使用的名称有任何问题。

开始了解 DNS 的复杂性的绝佳起点是 Dragonfly book

编辑添加

如果这些是互联网上的机器,那么给每个机器一个 A 记录/主机名是完全可以接受的(我假设这就是你所说的子域)

没有理由不给每个 A 记录一个 CNAME 记录。

从 DNS 的角度来看,我认为您没有理由不能以这种方式提供负载平衡。您可能需要在发送 CNAME 记录之前进行测试,以确保端点在线。但是使用 CNAME 记录来负载平衡的概念当然不是一个新概念。即 CDN