使用复杂流程的php应用程序的可伸缩性问题?

使用复杂流程的php应用程序的可伸缩性问题?,php,performance,design-patterns,scalability,Php,Performance,Design Patterns,Scalability,嗨 考虑一个有点耗费精力的PHP应用程序,它在复杂的数据库事务中工作得很重,除了内存消耗算法外,别无选择。每个请求最多可使用4MB内存。对于这些特定请求,平均为1MB,对于常规请求,不到200KB的可变数据 很明显,我们将使用类似AmazonS3的东西来承载静态数据,但很明显,大部分负载都在动态部分 该应用程序将在多台服务器上运行,但如何工作?我们是否让它像一个普通的应用程序一样运行在一台服务器上,而额外的服务器只会让它像一台拥有大量内存和处理能力的大型服务器一样运行 我们的问题是,尽管应用程序

嗨 考虑一个有点耗费精力的PHP应用程序,它在复杂的数据库事务中工作得很重,除了内存消耗算法外,别无选择。每个请求最多可使用4MB内存。对于这些特定请求,平均为1MB,对于常规请求,不到200KB的可变数据 很明显,我们将使用类似AmazonS3的东西来承载静态数据,但很明显,大部分负载都在动态部分

该应用程序将在多台服务器上运行,但如何工作?我们是否让它像一个普通的应用程序一样运行在一台服务器上,而额外的服务器只会让它像一台拥有大量内存和处理能力的大型服务器一样运行

我们的问题是,尽管应用程序是以一种极其模块化的方式编写的,但这个过程迫使我们在相同的环境中拥有所有东西。我们可以将数据库放在一台经过优化的机器上,但几乎没有办法将应用程序代码的不同模块放在不同的服务器上


那么,这方面的常见解决方案是什么呢?

在许多可伸缩性解决方案中,您可以做的一件事是通过请求进行负载平衡。如果不能将应用程序的不同部分放在不同的服务器上,请将整个应用程序放在服务器上 在多台服务器上复制

现在,最终用户请求不会直接转到应用程序服务器。您需要一个负载平衡器示例:介于F5和大IP之间。负载平衡器将从中检测最佳服务器 服务器池并将请求重定向到该服务器。这样,添加/删除服务器需要在负载平衡器上进行10-15分钟的配置

负载平衡器如何知道选择哪台服务器


loadBlanacer脚本在每台服务器上运行,通知服务器负载/内存使用/进程计数等。。取决于它选择了服务器

是的,谢谢,现在数据库呢?导致应用程序的所有实例(无论它们在哪个服务器上运行)只需要访问一个数据库。数据库交互占用了相当多的处理时间。有没有自动化的解决方案?哪些查询花费的时间最多?DML还是选择/工作表查询?对于select查询,可以使用读取服务器。这些是只用于读取的数据库从机。另外,我忘了提到的最重要的事情是缓存。。使用APC/memcachedThanks,您能给我一些关于读取服务器的更多信息吗?它们是您的主要数据库服务器克隆。所有插入/更新都在主服务器中完成,主服务器将称之为主服务器,主服务器将在后台写入一个或多个从属服务器。这样,从机将使用新信息进行更新。现在,根据网络流量/数据大小,会有几秒钟到几分钟的延迟。这些从属服务器将准备好接受任何选择/工作表查询并提供服务,这样您的主数据库就不会加载这些查询。根据您的要求,您可以增加/减少从属服务器的数量,这也不难配置