如何水平扩展php应用服务器?

发布于 2024-08-28 23:51:07 字数 119 浏览 6 评论 0原文

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

谢谢。

I'm using lighttpd as webserver for php application server. The avg. load on this server is about 2-3. MySQL database is separated to another server (it's load ~0.4). How could I scale php application server?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不吻晚风 2024-09-04 23:51:07

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

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

负载均衡服务器可以是一些专门的硬件;或使用 Apache 的反向代理(参见 mod_proxy_balancer< /code>例如),nginx (参见 例如使用 Nginx 进行负载平衡,varnish,...

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

例如,如果用户在服务器 1 上随机平衡一个页面,在服务器 2 上随机平衡另一个页面,则不能使用基于文件的会话:会话将在服务器 1 上创建,但稍后在服务器 2 上找不到。

在这种特定情况下,您必须使用另一种机制来存储会话 - 例如,将它们存储在数据库或 memcached 中。

与图像相同的事情(例如,由用户上传):您必须:

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

在评论后编辑:对于部署,使用多台服务器,我通常会按照只有一台服务器的方式进行部署。

有关我经常使用的流程类型的更多信息,您可以查看我不久前对此问题给出的答案:无需任何停机即可更新网络应用

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

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

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

In a few words, a solution, generally speaking, is to :

  • Have several PHP servers
  • Have another load-balancing server in front of those
    • If you have 3 PHP servers, then, this load-balancer will send 33% of the requests it receives on each PHP server.

The load-balancing server can be some specialized hardware ; or a reverse-proxy, using Apache (see mod_proxy_balancer for example), nginx (see Load Balancing with Nginx, for example), varnish, ...

The most important problems you'll generally face when using several PHP servers instead of ones are related to the filesystem : with several servers, each server has its own disks and filesystem.

For example, if a user is randomly balanced on server 1 for one page, and server 2 for another page, you cannot use file-based sessions : the session will be created on server 1, but will not be found on server 2, later.

In this specific case, you'll have to use another mecanism to store sessions -- store them in a database, or memcached, for example.

Same things with images (uploaded by users, for example) : you'll have to either :

  • Synchronise them between servers
  • Or use some kind of network-drive

Edit after the comment : For the deployment, with several servers, I generally do exactly as I would with only one server.

For more informations on the kind of process I often use, you can take a look at the answer I gave a while back on this question : Updating a web app without any downtime.

The explanation given there is for one server, but to do the same thing on several servers, you can :

  • Upload the archive to each one of your servers
  • Extract it
  • And, at almost the same instant, switch the symlink on all servers
    • At worst, you'll have 2 or 3 seconds of delay between each servers, which means 10 seconds if you have 5 servers ? It's probably not a big problem :-)

(I've done this with up to 7 servers, for one application, and never had any problem)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文