Apache 2.4 - Módulos de Multiprocessamento - MPM

Com a versão 2.4 no Debian Jessie, a MPM event entrou em estado de produção. Neste artigo, vamos diferenciar "prefork", "worker" e "event" para entender um pouco mais seu funcionamento. As informações são baseadas no manual do Apache 2.4.

[ Hits: 34.312 ]

Por: Perfil removido em 04/08/2014


Conceitos básicos



Apache é um servidor WEB (HTTPD) portado para várias plataformas e ambientes. O servidor WEB Apache pode ser executado em GNU/Linux, Windows, Netware ou OS/2. Para comportar essa flexibilidade de ambientes, Apache adota um projeto modular que permite ao webmaster escolher, entre um conjunto de funcionalidades, quais serão ativadas ou desativadas.

Os módulos são implementados de duas maneiras: estáticos ou dinâmicos:
  • Os módulos estáticos são inseridos em "tempo de compilação" e são incorporados ao código binário do servidor.
  • Os módulos dinâmicos são ligados (link) ao código binário do servidor em "tempo de execução".

Os módulos do tipo MPM, são responsáveis pela definição de como o servidor atende pelas requisições HTTP dos clientes. As requisições chegam pela rede como pacotes TCP, por padrão na porta TCP/80. Para atender uma requisição HTTP, o servidor deve fazer um fork ou lançar um thread.

Esses métodos causam diferentes impactos no modo de trabalho do servidor e, principalmente, nos recursos de hardware (memória RAM e processador) necessários para atender todas as solicitações.

Originalmente, Apache utilizava o método prefork e lançava uma cópia da aplicação servidora (fork) para atender cada solicitação. Com o tempo, esse método se tornou ineficiente, pois os servidores passaram a atender milhares de requisições simultaneamente.

A quantidade de recursos de memória e de processamento para manter esse método, é enorme. O método prefork é mantido para fins de compatibilidade com antigos sistemas que não podem suportar o uso de threads, para servidores que atendem poucas requisições ou possuem um processador legado de núcleo único.

Entretanto, mesmo hoje prefork é conhecido pela estabilidade de seu código, desenvolvido ao longo de anos, e ainda é o modo preferido por muitos administradores.

Servidores GNU/Linux que demandam escalabilidade, podem escolher entre os módulos worker ou event. Esses métodos dão suporte nativo para o uso de threads e implementam escalabilidade através do compartilhamento de recursos de hardware (principalmente memória RAM) entre os diversos threads (tarefas).

Os threads são linhas de execução de um programa que se dividem como tarefas distintas e que podem compartilhar recursos comuns no contexto de software (memória). Isso provê um melhor aproveitamento da memória RAM e reduz a sobrecarga gerada pelo processo de lançar processos através de fork.

Com o advento dos processadores de múltiplos núcleos, o uso de threads atingiu o patamar mais alto; as diferentes tarefas são realmente processadas simultaneamente por diferentes núcleos de processadores. Observe que os threads compartilham o mesmo contexto de software para diferentes contextos de hardware, pois são ligados ao mesmo processo pai.

O suporte e os métodos para o funcionamento de threads são totalmente fornecidos pelo sistema operacional, que podem ser distintos entre si, apresentando diferentes níveis de maturidade da implementação das funções de thread.

Os MPM prefork, worker e event são exclusivos de sistemas do tipo UNIX. Para os demais sistemas, temos: mpm_netware, mpm_os2 e mpm_winnt. Cada um aproveitando as melhores características desses sistemas operacionais.

Atualmente, (2014) o MPM padrão para modernos sistemas do tipo UNIX é event.

Para ajudar na escolha do MPM, duas perguntas são feitas.

1. O núcleo do sistema operacional suporta threads?
2. O núcleo do sistema operacional suporta threads seguros (thread-safe polling)?
  • Se a resposta é sim para ambas perguntas, seu MPM deve ser event.
  • Se a resposta é sim para a primeira pergunta, seu MPM deve ser worker.
  • Se a resposta é não para ambas perguntas, seu MPM deve ser prefork.

    Próxima página

Páginas do artigo
   1. Conceitos básicos
   2. MPM prefork
   3. MPM worker
   4. MPM event
Outros artigos deste autor

OSS & ALSA - A História

Zabbix 2.2 no CentOS 6 via repositório EPEL - Instalação e configuração

TCollection e Generics no Free Pascal - Uma breve visão sobre lista de objetos com o Lazarus

Formatando texto no Open Office

Formatando o bash com cores e efeitos

Leitura recomendada

Configurando um servidor de FTP no OpenBSD

Slackware 14.2 - Configuração pós-instalação

Implementando um servidor DHCP

Configurando a Sony Cybershot DSC-W1

LTSP no Debian 8

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts