如何横向扩展php应用服务器?

时间:2010-04-15 10:28:36

标签: php architecture scalability

我正在使用lighttpd作为php应用服务器的webserver。平均此服务器上的负载大约为2-3。 MySQL数据库被分离到另一台服务器(它的负载为~0.4)。我怎么能扩展php应用服务器?

谢谢。

1 个答案:

答案 0 :(得分:14)

简而言之,一般来说,解决方案是:

  • 拥有多个PHP服务器
  • 在这些服务器前面安装另一个负载均衡服务器
    • 如果你有3台PHP服务器,那么这个负载均衡器将发送它在每台PHP服务器上收到的33%的请求。

负载均衡服务器可以是一些专用硬件;或反向代理,使用Apache (例如,参见mod_proxy_balancer,nginx (例如参见Load Balancing with Nginx,varnish,..


使用多个PHP服务器而不是一个PHP服务器时,通常会遇到的最重要的问题与文件系统有关:使用多个服务器,每个服务器都有自己的磁盘和文件系统。

例如,如果用户在服务器1上为一个页面随机平衡,而服务器2在另一个页面上随机平衡,则不能使用基于文件的会话:会话将在服务器1上创建,但在服务器上找不到2,以后。
在这种特定情况下,您将不得不使用另一种机制来存储会话 - 例如,将它们存储在数据库或memcached中。

与图片相同的东西(例如用户上传):你必须要么:

  • 在服务器之间同步
  • 或者使用某种网络驱动器


评论后编辑:对于部署,使用多台服务器,我通常只使用一台服务器。

有关我经常使用的流程类型的更多信息,您可以查看我在这个问题上回答的答案: Updating a web app without any downtime

给出的解释是针对一台服务器,但要在多台服务器上执行相同的操作,您可以:

  • 将存档上传到您的每台服务器
  • 提取
  • 并且,几乎在同一时刻,在所有服务器上切换符号链接
    • 最糟糕的是,每台服务器之间会有2到3秒的延迟,如果你有5台服务器,这意味着10秒钟?这可能不是一个大问题: - )

(对于一个应用程序,我已经完成了多达7台服务器,并且从未遇到任何问题)