Análise de impacto da utilização de diferentes módulos de
multiprocessamento em um servidor Web
Em um mundo cada dia mais dinâmico, nada pior do que ter que esperar as coisas. Isso
tem que ser levado muito em conta quando se trata de sites na Internet, principalmente os
que vendem online. Esse é o motivo pelo qual você deve se preocupar, e muito, com a
performance do seu site.
De acordo com a Forrester Consulting, em 2006, compradores online esperavam que uma
página web carregasse em até 4 segundos e, hoje, esse mesmo cliente espera que essa
página carregue em 2 segundos ou menos. A Amazon, pouco tempo atrás, descobriu que
aumentou sua receita em 1% a cada 100 milisegundos de ganho em performance, e um
estudo comprovou que cada segundo gasto na abertura de uma página pode representar
5% a menos de conversão para a sua loja.
O Apache, hoje, é o webserver mais utilizado do mundo, usado por cerca de 60% dos
sites, com suporte para todos os sistemas operacionais e centenas de módulos
disponíveis. Além disso, é um servidor muito estável e open source.
Quando se trata de Apache, a memória é o recurso mais importante para ele. Mensurar
mal a quantidade de memória que será utilizada pode significar usar a swap, ou seja,
muitos processos para pouca memória, ou gerar uma lentidão no sistema, que acontece
quando se tem poucos processos e muita memória sobrando. Dessa forma, a memória
tem que ser muito bem mensurada para não se ter nenhum tipo de problemas.
Outra coisa que pode ajudar muito quando se trata de Apache é o uso de MPM (Multiprocessing Modules), que são responsáveis por manipular as requisições
concorrentemente e a escolha certa desses módulos pode fazer grande diferença na
performance, escalabilidade, consumo de memória e consumo de CPU do seus sistema.
Os MPMs mais comuns hoje são:
Worker
A outra opção de MPM, o worker, trabalha com o conceito multi-thread, onde as requisições
são atendidas por threads e não por processos. Assim, teríamos apenas um ou poucos
processos com múltiplas threads em cada um deles, atendendo cada uma das conexões. Com
o worker, minimizamos a utlização de memória, já que as threads compartilham a mesma
área de memória do processo pai, e reduzimos o overhead na criação de processos. Na
verdade, no caso do worker, definimos a quantidade de threads por processo de modo que só
realizamos um fork quando este limite é atingido.Porém, ele é menos estável, muito difícil
de debugar, tem problemas ao trabalhar com módulos não thread-safe e, se algum
problema acontecer na thread, esse problema pode influenciar no processo pai.
Prefork
Neste módulo, cada request é tratado por um processo separado e, dessa forma, um
problema no processo filho não implica no processo pai. É muito tolerante a falhas e, por
causa disso, muito estável e pode ser utilizado com módulos não thread-safe. Falando
pelo lado do desenvolvedor, ele é ideal para módulos monolíticos (PHP), muito fácil de
debugar e efetua pooling de processos. Mas, como nem tudo são flores, ele utiliza mais
memória do que o Worker e criar um processo nele é muito custoso e demorado.
Basicamente, no prefork, para cada conexão será criado um processo específico para atendêla, de modo que a quantidade de processos httpd será sempre maior ou igual a quantidade de
clientes. Nesta arquitetura, temos uma quantidade inicial que processos que são pré-criados
para atender as conexões, sendo que a medida que os clientes se conectam, eles são
atendidos por estes processos. No prefork, temos basicamente dois problemas em termos de
performance:
•
Memória: cada processo criado ocupa uma porção da memória, de modo que a memória
disponível para cache do kernel é cada vez menor, ao ponto que toda ela é preenchida
pelos processos httpd, momento onde o servidor começa a fazer swap em disco;
•
Load: a criação de novos processos (fork) gera um overhead no sistema, de modo que
quanto maior a taxa de conexão, maior será o overhead no fork para atender as novas
conexões;
Dessa forma, você deve analisar o seguinte antes de implementar algum deles: Prefork é
mais estável; Worker requer menos hardware.
Escolha
A escolha entre prefork ou worker deve ser realizada caso a caso, ou seja, dependendo da
situação de uso e da configuração de hardware uma escolha poderá ser melhor que a outra.
Para o perfil do site www.bazar.projetointegrador.com , levando-se em consideração que o
objetivo do projeto seja alcançar maiores quantidades de acesso, não se delimitando somente
a faculdade mas buscando acesso das mais variadas regiões, consolidando o sucesso do
projeto. A melhor solução seria o uso do módulo PREFORK devido a sua tolerância a falhas,
tornando o website mais estável e a facilidade para se debugar e efetuar pooling de
processos. Porém as configurações do nosso servidor de hospedagem teria que ter Hardware
mais robusto, sendo a memória o recurso mais importante a ser observado.
Download

Módulos de multiprocessamento MPM