1

我在此处阅读的大多数在 DNS 级别支持每个用户的子域的解决方案都是使用 *.domain.com 将所有内容指向一个 IP。

这是一个简单的解决方案,但是如果我想将前 1000 个注册用户指向 serverA,然后将接下来的 1000 个注册用户指向 serverB,该怎么办?这是我们降低集群软件和硬件成本的首选解决方案。

alt text http://learn.iis.net/file.axd?i=1101 (从 MS IIS 站点引用的图表)

最合乎逻辑的解决方案似乎是在区域数据文件中每个子域有 1 个 A 记录。BIND 似乎对区域数据文件没有任何大小限制,只限于可用内存。

但是,我的团队担心启动和准备新子域的延迟,因为创建新子域包括插入新的 A 记录和重新启动 DNS 服务器。

我们应该担心重新启动 DNS 服务器的性能吗?

先感谢您。

更新:

似乎你们中的大多数人建议我改用反向代理设置:

替代文字 http://learn.iis.net/file.axd?i=1102

(ARR是IIS7的反向代理方案)

但是,这是我可以看到的缺点:

  1. 单点故障
  2. 无法根据 IP 地理位置战略性地在不同位置设置服务器。
4

3 回答 3

7

使用通配符 DNS 条目,然后使用负载平衡在服务器之间分配负载,无论它们是什么客户端。

当您使用它时,请跳过 URL 重写步骤并让您的应用程序根据输入的 URL 确定它是哪个帐户(您可以像在 domain.com?user 中一样轻松地确定 X.domain.com 中的 X 是什么? =X)。

编辑:根据您的附加信息,您可能希望开发一个“代理”来存储哪些客户端要访问哪些服务器。使该面向公众,然后从与代理存储的客户端相关联的资源中提取。您的前端可以进行负载平衡,然后您可以根据它们的身份从文件/数据库服务器中获取它们。

于 2009-01-23T19:54:42.857 回答
2

带有通配符 DNS 条目的前端代理确实是解决这个问题的方法。这就是 LiveJournal 等大型网站的运作方式。

请注意,这不仅仅是一个 TCP 层负载平衡器 - 有很多解决方案可以检查 URL 的主机部分,以确定哪个后端服务器也转发查询。您可以通过在具有适当配置的低规格服务器上运行的 Apache 轻松做到这一点。

代理确保每个用户的会话始终转到正确的后端服务器,并且大多数会话处理方法都将继续工作。

此外,代理不必是单点故障。在冗余配置中运行两个或多个前端代理(以避免故障)甚至让它们共享负载(以避免压力)是完全可能的并且非常容易。

我还赞同 John Sheehan 的建议,即应用程序只需查看 URL 的左侧部分来确定要显示哪个用户的内容。

如果后端使用 Apache,请参阅这篇文章以获取有关如何配置它的信息。

于 2009-01-24T11:30:33.310 回答
0

如果你使用tinydns,你修改它的数据库就不需要重新启动nameserver,它不应该是一个瓶颈,因为它通常非常快。我不知道它是否在超过 10000 个条目时表现良好(如果不是,我会感到惊讶)。

http://cr.yp.to/djbdns.html

于 2009-01-23T21:20:31.903 回答