【问题标题】:Loadbalancing using PHP? Is this effective?使用 PHP 进行负载平衡?这有效吗?
【发布时间】: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


【解决方案1】:

首先大部分服务器负载依赖于 Sql 和繁重的查询, 所以不要让多个服务器来处理请求。你可以这样做

  1. 使 Sql 副本(从服务器)使用它来读取和用户主服务器用于写入。
  2. 使用 Memcache 或 Redis 防止一直从数据库中获取常用数据。
  3. 防止不必要的加载/查询。
  4. 使用 CDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2019-10-20
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多