【发布时间】:2018-11-15 09:32:37
【问题描述】:
服务器 1:
<?php
$servers = array("server2",
"server3",
"server4");
$server = $servers[array_rand($servers)];
header("Location: http://$server");
?>
服务器 2:
克隆网站
服务器 3:
克隆网站
服务器 4:
克隆网站
服务器 5:
数据库服务器,服务于所有服务器
DNS 将设置为服务器 1,然后脚本会将它们重定向到随机服务器以降低负载。
例如,我可以使用循环 DNS 加载多个服务器 1。
此外,我可以改进服务器 1 上的脚本,以每隔一段时间检查一次健康状态,以确保它不会重定向到已关闭的服务器。
这肯定可以平衡无限数量的服务器,如果负载超高,我可以通过 DNS 继续启动更多负载平衡服务器吗?我不认为这有问题,但显然肯定有,因为没有人使用这种方法
我想知道的是,这是否是一种很好的负载平衡方法,如果不是,应该如何做呢?这种方法有什么问题吗?
【问题讨论】:
-
为什么不使用 nginx 作为负载均衡器?
-
我知道,但我只是想知道这样做而不是使用 NGINX 是否有任何问题,因为这是一种更简单的实现方法。
-
使用脚本语言作为负载平衡器会慢很多,这可能是我能想到的最严重的重新发明轮子案例之一。但是,如果您将其作为学习实验进行,那么祝您好运 - 没有根本原因无法完成。
-
@iainn 如果我已经在一个相当大的网站上使用它,并且每小时有数万次点击,这会有什么影响?
-
@Destroyer 好吧,如果您使用的是实际的 HTTP 重定向而不是代理请求,那么明显的缺点是您将无法使用 GET 请求以外的任何东西。如果您将其用于比提供基本静态内容更复杂的事情,那么这可能会立即成为阻碍。我真的,真的不建议在生产中使用这样的东西,更不用说用于大型网站了。 Apache、nginx、haproxy,甚至 DNS 循环都将更加可靠。
标签: php dns load-balancing reverse-proxy haproxy