让我们做一个思想实验(显然,这不是一个真实的案例)。说:
现在,假设我想使用这个群体来保持一个非常受欢迎的网站(数百万用户)的在线(静态部分)。我的工作如下:
我用十几个同行的网络做了一个实际的实验,并且工作顺利。如果对等体接近我当前的位置,从对等体加载资源实际上比从我的服务器加载更快。太好了。
现在,我想如何使用DNS在所有这些服务器之间进行负载平衡。当然,依靠循环DNS将是一种自杀:我绝对不能拥有一个拥有数百万条A记录的单一域名。
所以这是我的想法,我想知道原则上这是否可行。
在我看来这应该有效,但我可以看到一些问题。我想到的第一个问题是:缓存DNS服务器会对我生气吗?说:Google的4.4.4.4将向我的域的数百万个不同的随机子域收到数百万个请求。它会最终阻止它还是停止响应或什么?
这样做还有其他问题吗?有更好的方法吗?即使从理论的角度来看,这是完全不可行的吗?
答案 0 :(得分:1)
DNS背后的核心概念是,对于您拥有的每个可寻址IP地址,您都有相应的A记录。这符合逻辑,因为每个服务器只能有一个主机名,而DNS则是关于主机名。
但是,有时您不希望主机名成为人们连接的名称,因此您可以使用CNAME,它是Alias的Canonical名称(在这种情况下,在authorative中是规范的)(显然称那些别名可能会与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,则谷歌等人没有理由对您使用的名称有任何问题。
开始了解DNS复杂性的一个好地方是Dragonfly book
已编辑添加
如果这些是互联网上的机器,那么给每个人提供A记录/主机名是完全可以接受的(我假设这是你所说的子域名)
没有理由说你不能给每条A记录一个CNAME记录。
从DNS的角度来看,我认为没有理由不通过这种方式提供负载均衡。您可能希望在发送CNAME记录之前进行测试,以确保端点处于联机状态。但是,使用CNAME记录进行负载平衡的概念当然不是一个新概念。即CDN