【问题标题】:How to scale php application servers horizontally?如何水平扩展php应用服务器?
【发布时间】:2011-02-08 07:45:39
【问题描述】:

我使用 lighttpd 作为 php 应用程序服务器的网络服务器。平均此服务器上的负载约为 2-3。 MySQL 数据库与另一台服务器分离(它的负载约为 0.4)。如何扩展 php 应用程序服务器?

谢谢。

【问题讨论】:

标签: php architecture scalability


【解决方案1】:

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

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

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


在使用多台 PHP 服务器而不是一台服务器时,您通常会面临的最重要问题与文件系统有关:对于多台服务器,每台服务器都有自己的磁盘和文件系统。

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

图片相同(例如,由用户上传):您必须:

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


在评论后编辑:对于多台服务器的部署,我通常会像只使用一台服务器那样做。

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

这里给出的解释是针对一台服务器,但要在多台服务器上做同样的事情,你可以:

  • 将存档上传到您的每台服务器
  • 解压
  • 并且,几乎在同一时刻,切换所有服务器上的符号链接
    • 在最坏的情况下,每台服务器之间会有 2 或 3 秒的延迟,这意味着如果您有 5 台服务器则需要 10 秒?这可能不是什么大问题:-)

(我已经为一个应用程序使用了多达 7 台服务器,从未遇到任何问题)

【讨论】:

  • 啊哈,我明白了。谢谢你。我使用 memcache 和 DB 作为会话存储。 PHP 临时上传文件夹可以移动到 NFS - 这将解决上传问题。最大的痛苦是应用程序部署。也许有一些好的建议如何在多台服务器上部署应用程序?谢谢你的评论!
  • @Kirzilla : 不客气 :-) ;;我已经编辑了我的答案以提供有关部署过程的一些信息:-)
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 2017-06-24
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2014-02-02
相关资源
最近更新 更多