【问题标题】:Scalability issues for a complex process consuming php application?复杂进程消耗 php 应用程序的可扩展性问题?
【发布时间】:2010-09-26 14:59:16
【问题描述】:

嗨 考虑一个消耗大量进程的 PHP 应用程序,该应用程序大量处理复杂的数据库事务,除了具有相当高的内存消耗算法之外别无选择。每个请求最多使用 4MB 内存。 (某些请求平均为 1 MB,常规请求的可变数据少于 200KB) 很明显,我们将使用 Amazon S3 之类的东西来托管我们的静态数据,但很明显大部分负载都在动态部分上。

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

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

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

【问题讨论】:

    标签: php performance design-patterns scalability


    【解决方案1】:

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

    现在,最终用户请求不会直接发送到您的应用服务器。您需要介于两者之间的负载均衡器(例如:F5 Big IP)。负载均衡器将从 服务器池并将请求重定向到该服务器。通过这种方式添加/删除服务器需要 10-15 分钟的负载均衡器配置。

    负载均衡器如何知道选择哪个服务器?

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

    【讨论】:

    • 是的,谢谢,现在数据库呢?导致应用程序的所有实例,无论它们在哪个服务器上运行,都只需要访问一个数据库。数据库交互占用了相当多的处理时间。有什么自动化解决方案吗?
    • 哪些查询最耗时? DML 或选择/工作表查询?对于选择查询,您可以使用读取服务器。这些是只能用于读取的数据库从站。另外,我忘了提到的最重要的事情是“CACHING”.. 使用 APC / memcached
    • 谢谢,你能给我更多关于读取服务器的信息吗?
    • 它们是您的主数据库服务器克隆。所有 INSERTS / UPDATES 都在您的主服务器中完成(称为主服务器),主服务器将在后台写入一个或多个从服务器。这样,slave 就会用最新的信息进行更新。现在,根据网络流量/数据大小,会有几秒到几分钟的延迟。这些从服务器将准备好接受任何选择/工作表查询并将它们提供出来,这样您的主数据库就不会加载这些查询。
    • 根据您的要求,您可以增加/减少从属设备的数量(这也不难配置)
    猜你喜欢
    • 2011-05-29
    • 2015-07-09
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2011-03-28
    • 2017-11-18
    • 2011-04-26
    相关资源
    最近更新 更多