Eu tenho um servidor com vários domínios e aplicativos em execução, tudo através do Apache. Tudo está bem no momento, mas tenho planos de desenvolver um aplicativo Web com muito desempenho (usando C ++ com CPPCMS), começando com o servidor para teste, talvez obtendo um servidor separado apenas para esse aplicativo quando ele estiver pronto.
De qualquer forma, eu ouvi muito sobre o NGinx, que parece ter mais desempenho do que o Apache, então eu estava me perguntando se valia a pena trabalhar com ele nesse novo projeto. Não está claro em minha mente porque não sei que tipo de gargalo de desempenho o NGinx corrige exatamente.
Não sou um usuário avançado do Apache, sou um péssimo administrador do Linux e não desenvolvo muito aplicativos da Web (mas tenho noções). Dedico-me principalmente a escrever software, de modo que a parte do servidor da Web às vezes é muito obscura para mim. Cada vez que tenho que configurar um site através do apach, preciso de muito tempo navegando no documento para garantir que não quebre tudo.
Dito isto, acho que estou ficando muito melhor deste lado, mas ainda preciso de conselhos. Eu já enviei alguns arquivos de configuração do nginx e isso parece muito mais compreensível do que os do Apache, mas talvez eu esteja errado?
A partir das informações que reuni, o NGinx seria a melhor opção quando você deseja balancear a carga; portanto, se você tiver seu aplicativo espalhado em várias máquinas, certo? Como estou pensando em meu pedido de escândalo (e desempenho), parece que é o que eu preciso, mas talvez eu precise saber mais sobre quando é interessante passar do Apache para o NGinx. Vale a pena mudar para o NGinx para todos os meus aplicativos atuais também? Quanto custa isso? (Quero dizer, é caro na hora de mudar de um para o outro?) Posso usar o Apache e o NGinx na mesma máquina sem nenhum problema?
Nota lateral : por favor, não me incentive a usar linguagens interpretadas em vez de C ++, isso não está relacionado à pergunta. Consulte a página de justificativa do CPPCSM para ver que tipo de aplicativo pode se beneficiar. Entendo perfeitamente as desvantagens (em comparação com aplicativos em Ruby e Python, que eu já uso para aplicativos da web com menos energia) e estou bem com isso.
fonte
O Nginx, falando muito ( muito ) em geral, pode obter uma taxa de transferência muito mais alta que o Apache, graças a uma abordagem arquitetural diferente do problema de servir páginas na Web. O Nginx também foi construído principalmente como um proxy reverso e preenche esse papel excepcionalmente bem (esse é o bit de balanceamento de carga que você mencionou); O Apache, por outro lado, foi criado para servir páginas da Web e, posteriormente, ganhou a capacidade de proxy.
Dito isto, há quase certamente áreas em que o Apache superará o Nginx de maneira consistente, enquanto há outras em que o Nginx superará o Apache de forma consistente.
A resposta curta é que, se o Apache estiver trabalhando para você, não há necessidade de mudar. (E estou dizendo isso como um ex-usuário do Apache que se tornou um discípulo do Nginx totalmente convertido.) Somente quando o tráfego para o servidor começa a atingir níveis em que o Apache está se tornando seu gargalo (isso é da ordem de alguns milhares de conexões simultâneas, (mas variará bastante com base nas especificações do servidor e em outra carga do servidor) ou, se você estiver tentando executar o Apache em um ambiente com poucos recursos, onde ele mal se encaixa, a mudança para o Nginx oferece benefícios sólidos.
Dito isto, se você quiser mudar para o Nginx (o que eu encorajo!), Então vá em frente. Você verá algum benefício? 9 vezes em 10: Não, você não vai. Mas você mencionou que gosta mais da linguagem do arquivo de configuração do Nginx; portanto, se você se sentir mais confortável em configurar o Nginx que o Apache, bem, isso é um benefício para você! (Pessoalmente, acho as configurações do Apache mais fáceis de ler em geral, mas isso pode ser porque eu passei muitos e muitos anos lendo-as e apenas alguns meses foram gastos no Nginx!)
Em uma nota lateral: você mencionou seu desejo de criar um aplicativo Web em C ++. Por uma questão de sua sanidade, peço que você use uma linguagem de nível superior como PHP, Python ou mesmo Java. Em seguida, analise o seu código e considere a criação de módulos baseados em C ++ para resolver gargalos específicos (Python e PHP permitem isso com bastante facilidade; não conhecem Java). Se você está preocupado com o desempenho geral, considere o seguinte: O EVE Online, o maior MMORPG não compartilhado do mundo, foi desenvolvido com base em uma variante do Python (Stackless Python), com apenas os principais componentes (por exemplo, as bibliotecas gráficas) escritos em C ++. Se o Python pode lidar com isso, certamente pode lidar com seu aplicativo da web?
fonte
Ninguém pode realmente responder a parte "quando devo trocar" - isso dependerá da sua carga, do desempenho do seu próprio código de aplicativo, etc.
O nginx usa um único processo (ou um número muito pequeno de processos de trabalho) para manipular todas as conexões do cliente usando E / S registrada. O Apache possui vários "Módulos de multiprocessamento" disponíveis, mas todos eles se inclinam mais para muitos processos / muitos threads. Como resultado, o Apache geralmente consome mais RAM e CPU do que nginx para o manuseio básico da conexão HTTP. Você pode obter uma visão geral das diferentes abordagens de manipulação de conexão na página C10K da Kegel .
Eu sugiro fortemente considerar a possibilidade de fazer o webapp básico em uma linguagem de nível superior (Python, ou talvez Ruby, Scala) e usar uma fila de mensagens para enviar tíquetes de trabalho para máquinas operadoras que lidam com as tarefas "intensivas em desempenho" de forma assíncrona.
O nginx é um bom balanceador de carga; mas há muitas opções nesse espaço .
Sim. Basta executá-los em diferentes números de porta IP e / ou endereços IP.
fonte