配置HAProxy+;nginx+;PHP-FPM比Apache+;mod_php

配置HAProxy+;nginx+;PHP-FPM比Apache+;mod_php,apache,nginx,haproxy,php,Apache,Nginx,Haproxy,Php,编辑 在VirtualBox上运行我的操作系统是个问题。当我将我的操作系统设置为磁盘上的本机操作系统时,我就能够看到性能的提升 原创 我读过很多人建议放弃Apache+mod_php以获得HAProxy+nginx+php-FPM。我试图验证这是一个更有效的设置,但没有看到人们描述的结果。Sakege和ab(Apache基准测试)都表明,在任意数量的并发连接中,Apache每秒都能提供更好的响应,并且可以支持更多的连接 我正在VirtualBox上运行Ubuntu11.04服务器。它有10兆的空

编辑

在VirtualBox上运行我的操作系统是个问题。当我将我的操作系统设置为磁盘上的本机操作系统时,我就能够看到性能的提升

原创

我读过很多人建议放弃Apache+mod_php以获得HAProxy+nginx+php-FPM。我试图验证这是一个更有效的设置,但没有看到人们描述的结果。Sakege和ab(Apache基准测试)都表明,在任意数量的并发连接中,Apache每秒都能提供更好的响应,并且可以支持更多的连接

我正在VirtualBox上运行Ubuntu11.04服务器。它有10兆的空间和1344兆的内存。我使用apt get安装上述程序。下面是相关的配置文件,其中只包括重要的部分

haproxy.cfg

global
        maxconn 4096
        user haproxy
        group haproxy
        daemon
        stats socket /var/run/haproxy.sock mode 0600 level admin

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen tcpcluster *:80
        mode tcp
        option tcplog
        balance roundrobin

        server tcp01 192.168.1.199:8080 check
nginx.conf

worker_processes 2;

events {
        worker_connections 768;
}
www.conf

pm = dynamic
pm.max_children = 10
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
apache.conf

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients           10
    MaxRequestsPerChild   0
</IfModule>

StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10
MaxRequestsPerChild 0
StartServers 2
Minspare25
MaxSpareThreads 75
线程限制64
螺纹预裂25
MaxClients 10
MaxRequestsPerChild 0
StartServers 2
Minspare25
MaxSpareThreads 75
线程限制64
螺纹预裂25
MaxClients 10
MaxRequestsPerChild 0
考虑到PHP-FPM和Apache都最多有10个孩子,我认为任何速度优势都是显而易见的。在我运行的每个测试中(总是等到负载为0.01后再运行测试),Apache总是能够更有效地处理更多的请求


是否可以进行其他优化,以使最适合扩展的设置优于不应更高效的设置?

使用haproxy作为连接集中器:使用“模式http”而不是“模式tcp”,使用“选项http服务器关闭”,并将服务器maxconn值设置为远低于工作连接值。您应该跨越这样一个点,即较低的并发性可以带来更高的性能、更低的RAM使用率以及整个链上更好的缓存效率


顺便问一下,我们谈论的数字是多少?它们是以每秒数百个或数千个请求为单位测量的吗?因为很明显,应用服务器只会在更高的负载中起到真正的作用。显然,如果应用程序运行非常缓慢,更换服务器时没有理由看到差异。

将负载增加到3.00、6.00,最后增加到10.00。然后比较盒子的行为。0.01的负载根本不能说明什么。抱歉,我不清楚这一部分。我等待平均负载下降到0.01,然后再运行另一个测试。每次测试后的负载可能会达到15或20,我想让每个测试都有一个公平的开始环境。主要问题是使用虚拟盒来存放操作系统。当我将其安装为本机操作系统时,此安装的时间优势就显而易见了。请在下面留下您的解决方案作为答案(而不是编辑您的问题)。经过一段时间后,你可以接受它,这将标志着你的问题已经解决。这将有助于未来的用户,因为这个问题有一个(被接受的)答案要清楚得多。请这样做,这是非常接受这里的网站。tcp模式是否比http更有效?我一直认为在较低的层上进行负载平衡会更有效。我将尝试一下这些建议。现在我想起来了,我在运行Sakey和ab时,每个连接的请求量较低,而连接总数较高。不,恰恰相反,HTTP模式比TCP更有效。有些人首先发现它是令人惊讶的,但是当你在HTTP中考虑到你希望知道哪边数据时,你就知道它减少了轮询。无论如何,我们所说的差异只能在每秒数万个连接的情况下观察到。此外,在HTTP中,可以立即关闭空闲连接,这在TCP中是不可能的,因为您不知道它们处于空闲状态。