如何加载平衡(缩放)一个简单的PHP应用程序?

时间:2010-08-02 00:23:48

标签: scalability load-balancing

我经常在互联网上阅读正确构建我的PHP应用程序以便它们可以扩展的重要性。

我已经构建了一个用PHP编写的简单/小型CMS(想想Wordpress,但更简单)。

我基本上有这样的网址:http://example.com/?page_id=X其中X是我的MySQL数据库中包含网页内容的id

如何将我的应用程序配置为负载平衡,我只是在执行PHP读取活动。

NGINX 作为前门设置,将流量路由到运行相同代码的多节点,以处理example.com/?page_id=X足以“l oad balance “我的网站?

显然,在这种情况下,MySQL并没有进行负载平衡,尽管为了简单起见,这使得这个问题超出了这个范围。

3 个答案:

答案 0 :(得分:3)

这些是用于扩展此类应用的一些众所周知的技术。

  • 减少数据库命中率 大多数情况下,瓶颈将是您的数据库,因此请缓存最近的页面,以便减少数据库活动,可能类似于memcached。

  • 设计您的架构,使其可以分区。 在最简单的情况下,将数据分成逻辑分区,并将每个分区存储在单独的mysql DB中。例如,Craigslist按城市划分数据,在某些情况下,按照其中的部分划分数据。在您的情况下,您可以非常简单地按ID进行分区。

  • 管理php会话 如果您使用会话,将ngnx放在php网站前是行不通的。负载均衡php确实存在问题,因为会话持久存储在本地存储上。因此,您需要明确地进行会话管理。传统的解决方案是使用memcached来存储和查找某种cookie。

  • 不要过早优化。 专注于将您的应用程序取出,以便下一代当前用户获得最佳体验。

注意:您的主要潜在痛点将在here on SO

进行讨论

答案 1 :(得分:2)

不,如果您不需要,扩展您的应用程序并不重要。

我对此的看法是:

  1. 让它发挥作用
  2. 确保其正常工作 - 可测试性,稳健性
  3. 使其有效运作,以便经济实惠
  4. 然后,如果你的系统无法处理这么多的流量,并且你已经抛出了(合理的)资金可以购买的所有硬件,那么你需要扩展。不久。

    是的,扩展读取工作负载相对容易,因为您只需对只读数据库副本执行读取操作。挑战在于扩展写入工作负载。

    很多网站写的很少,即使他们真的很忙。

答案 2 :(得分:0)

正确的方法是使用某种负载均衡器,例如:

http://www.softwareprojects.com/resources/programming/t-how-to-install-and-configure-haproxy-as-an-http-loa-1752.html

这样做只会将某个用户会话转发到某个服务器,因此您不必担心会话以及它们的存储位置。你需要担心的是,如果2台服务器在两台不同的机器上运行,如何分配文件系统,特别是如果你大量使用文件系统。希望上面这篇文章有帮助...