如何负载均衡 PHP 应用程序?

11

我正在寻找有关如何负载均衡php应用程序的指南、建议或示例。我的系统是Ubuntu 10.04和PHP 5.3。我以前没有进行过服务器负载平衡,并且正在寻求任何提供的帮助。

更新:
这是一个Web应用程序,预计会有几百个用户同时使用它。MySQL将是数据库。将使用会话对用户进行身份验证,但我听说会话无法在多个服务器之间传递。内容将非常频繁地更新。会有文件,但我将只使用CDN。


1
也许需要在一开始添加一些上下文,说明您为什么需要这个,并且您将运行什么类型的应用程序以及它们的功能(是否使用数据库、文件、会话...是否经常更新内容?是否有后端等等)。 - Pekka
2个回答

17

负载均衡一个Web应用程序与应用程序本身无关,而与主机和基础架构更相关。然而,在构建一个被负载平衡的应用时,仍有一些重要的点需要注意。以下是其中一些:

  • 不使用状态服务器。也就是说,您不能使用传统的会话对象,因为它存储在本地机器的内存中,所以一个对象可能在一个服务器上可用但在另一个服务器上不可用。
  • 不要使用磁盘存储任何东西。与上述原因相同。您可能会将文件写入服务器1的磁盘并尝试在服务器2中读取。
  • 总之,您应该避免任何与服务器相关的资源。如果您需要使用像这样的东西(状态服务器、磁盘等),您应该存储共享资源,以便所有负载均衡机器都可以访问它。

如果这对于现有应用程序来说是一个问题,例如,您可以通过在负载均衡器上设置“亲和性”来解决这个问题,这意味着所有来自特定用户的请求将由同一台服务器处理。显然,这种方法的缺点是使您的应用程序变得不太可扩展,因为一台服务器可能会获得比另一台服务器更多的处理。

因此,关于负载均衡软件,我不是Linux专家,但我看到很多人谈论Apache作为Web服务器和HAProxy作为负载均衡器应用程序。

希望对您有所帮助!


1

有PHP类可以让你将会话存储在MySQL中。

http://php.net/manual/en/function.session-set-save-handler.php

我会在前端服务器上安装类似nginx的软件,用它来进行负载均衡。在其后面,您可以拥有两个Web服务器,甚至使用nginx来提供静态内容。

在您的Web服务器后面,您将拥有您的MySQL数据库。

我设计过一些网络,其每秒接收超过1,000次请求/秒,并从此开始网络设计。随着流量的增加,我通常只需从那里扩展基础架构,添加更多的Web服务器和只读数据库,并使用一对F5替换nginx。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接