Vários pontos:
A principal diferença entre o Apache e o Nginx ou o Lighttpd (que pessoalmente gosto muito) é a arquitetura:
- O Apache manipula uma conexão por processo ou por thread (dependendo do mod-XYZ)
- O Nginx e o Lighttpd são de thread único, lidam com várias conexões no loop de evento único.
Como resultado:
-
O Nginx e o Lighttpd escalam muito melhor com um grande número de conexões simultâneas, digamos que com 1000 conexões o Apache quase morreria, já que requereria 1000 processos no mod-prefork ou 1000 threads no mod-worker.
Se você planeja usar tecnologias Comet em que cada conexão requer uma conexão HTTP com sondagem longa, o Apache não seria aceitável, pois não é bem dimensionado.
-
Nginx e Lighttpd consomem menos memória, pois cada conexão requer + - dois sockets (HTTP e FastCGI), buffer intermediário de memória e algum estado, enquanto o Apache precisaria de thread inteiro, incluindo stack e outras coisas.
A partir da minha experiência pessoal em benchmarks, eu fiz o Lighttpd (e também presumo que o Nginx) é um pouco mais rápido com o backend FastCGI e depois com o Apache, mas isso é para pouca quantidade de conexões.
Agora, outro ponto é quando você deseja fazer alguns balanceamento de carga usando conexões FastCGI.
Na arquitetura tradicional existe
|
HTTP
|
Balancer (Nginx/Lighttpd/Cherooke/something-else)
/ | | | \
HTTP HTTP HTTP HTTP HTTP
/ | | | \
Apache+PHP Apache+PHP Apache+PHP Apache+PHP Apache+PHP
Server 2 Server 3 Server 4 Server 5 Server 6
Como o Apache lida com pools de processos, cada um executando o mod-PHP (ou outros modos)
Quando você usa o CppCMS que manipula pools por conta própria, pode fazer algo diferente:
|
HTTP
|
Balancer (Nginx/Lighttpd/Cherooke/something-else)
Server 1
/ | | | \
FCGI FCGI FCGI FCGI FCGI
/ | | | \
CppCMS App CppCMS App CppCMS App CppCMS App CppCMS App
Server 2 Server 3 Server 4 Server 5 Server 6
Então, basicamente, você não precisa de outro nível de indireto porque o CppCMS manipula processo, thread e pool de conexão para você. Enquanto o PHP / Ruby / Perl precisa de algum Apache mod-XYZ ou manuseie seu próprio conector FastCGI.