Por que o servidor HTTP Apache é tão complexo?


14

O servidor Apache HTTP é um bastante grande projeto de muito maior do que, digamos, lighthttpou nginxou certamente os "servidores HTTP simples" que você vê flutuando em C / C ++ tutoriais.

Para que serve o código extra? Isso adiciona segurança / estabilidade (e se sim, como?) Ou é apenas para fazer coisas como analisar confarquivos Apache / .htaccessdigitar coisas (e, eu acho, VirtualHostsetc).

Peço para não criticar o Apache, mas porque estou interessado em escrever um servidor da Web e gostaria de saber coisas que, embora talvez não sejam óbvias, são importantes a serem lembradas para um servidor da Web seguro, estável e rápido.


Ajuda a eliminar todos aqueles que não empacotam o equipamento para lidar com isso.
Joel Etherton

6
Não é uma resposta real - mas ouvi dizer que o nome vem do fato de ter muitos colaboradores, mesmo no início do desenvolvimento. Muitos patches foram contribuídos, tornando-se um servidor Patchy. História real.
Jeremy

+1 @Joel Etherton: Boa história, especialmente se é verdade. Mas nunca deixe o get verdade no caminho de uma boa história :)
therobyouknow

+1 em @haron para um exemplo de questionamento do status quo. Mas "escrevendo um servidor web"? Não estamos reinventando a roda aqui quando há muitas ofertas, além do Apache?
Therobyouknow

Respostas:


20

É muito mais complexo porque:

Mas também:

  • É desenvolvido de forma mais ativa ( Comparação de status . Atualmente, em 28/05/2011, o Apache httpd possui a atualização mais recente, embora seu processo de lançamento inerente deva ser dificultado por sua complexidade estendida em oposição aos seus concorrentes.

Dito isto, a resposta de R. contém pontos válidos sobre sua arquitetura e por que outros servidores da Web também se beneficiam de fama relativa. Depende do que você quer.

Você também pode consultar /programming/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administer para obter mais material. Embora não responda diretamente à sua pergunta, todo o tópico aponta muitas diferenças.


Se estiver interessado em escrever um servidor Web do zero, eu diria que estudar o Apache httpd é uma coisa boa, especialmente se você puder olhar para trás como evoluiu com o tempo. Também mostra o que você precisa evitar (tanto nos pontos abordados corretamente quanto nos locais em que é superado por outras pessoas). No entanto, o código pode ser um pouco complexo para começar e você pode preferir procurar servidores menores e mais leves para isso. Mas estude sua arquitetura geral e compare-a com outras.


1
+1: Apenas ler o histórico do changelog pode ser incrivelmente instrutivo para aprender como o próprio servidor da web evoluiu e quais os desafios que a equipe passou ao longo dos anos.
Joel Etherton

1
+1 a @haylem "alguns outros servidores da web se beneficiam de fama relativa" - é reconfortante ler sobre alternativas ao Apache que são consideradas compatíveis com o Apache, ou seja, farão exatamente o mesmo trabalho.
therobyouknow

3

Na minha opinião pessoal, é tudo por causa de todos os recursos que possui. Você pode fazer coisas com o Apache que não poderia fazer agora com nginx ou lighthttpd. O Apache é na verdade uma plataforma que é fornecida com suporte a HTTP. Você pode ter praticamente qualquer protocolo implementado como FTP ou SMTP (consulte mod_echo por exemplo). Ele suporta filtros, o que permite, por exemplo: servir código PHP fora do banco de dados em vez de arquivos (já que mod_php é um módulo de filtro e não produtor de conteúdo). Pode parecer uma idéia não muito útil, mas em geral você pode usar filtros para alterar qualquer entrada ou saída de conteúdo sem a necessidade de ajustar o produtor de conteúdo original. Possui ajustes para clientes HTTP que não estão mais disponíveis, mas naquela época o Apache era a única maneira de atendê-los de maneira consistente e sem erros. Muito disso não é usado hoje em dia.

O código extra também é usado para segurança, porque o mod_log_forensics, juntamente com o CoreDumpDirectory, fornece uma ferramenta real quando você sente que alguém está explorando uma indenização por segurança. Não ouvi nada sobre isso no caso de outros servidores da web. Quanto à estabilidade, ele vem de um núcleo bem arquitetado, não de um código extra. Existem na lista de discussão dos desenvolvedores do Apache, chamados "estabilizadores principais". Eles são muito exigentes quanto a qualquer alteração no núcleo e tendem a enviá-los para os módulos, o que realmente torna o Apache bastante estável. Se falhar, na maioria das vezes é uma falha do módulo e não o bug no núcleo do servidor.


3

Eu uso o Apache há mais de doze anos como administrador e desenvolvedor de grandes aplicativos Web Perl, Python e Ruby. O Apache é um servidor Web sólido, com um design limpo / modular e uma forte inclinação do UNIX. Um de seus recursos mais poderosos é sua modularidade e boa documentação. É um servidor web muito gerenciável. Está maduro e comprovado, como pode ser visto claramente por 15 anos de participação de mercado dominante .

Embora a documentação do usuário seja muito boa, infelizmente há pouca documentação preciosa para desenvolvedores / gravadores de módulos, e acho que isso tende a prejudicá-lo um pouco, pois não atrai o maior número possível de desenvolvedores. Mas isso não significa que seja mal projetado - apenas mal documentado a esse respeito. Existe um livro de Nick Kew que parece ser o recurso definitivo para os criadores de módulos. Mas seria bom se o projeto em si tivesse uma documentação melhor sobre todos os aspectos dos módulos de escrita.

Quanto ao excesso de engenharia - besteira. Tem um excelente design. Sim, existem algumas verrugas aqui e ali, mas isso é verdade para todos os softwares. Seu uso de pools de memória é fantástico, sua capacidade de conectar diferentes back-ends fala sobre como é limpo e modular, possui uma ótima C-API e a APR facilita muito as coisas, não apenas no projeto Apache for for desenvolvedores em outros projetos. Se você se importa com a portabilidade, irá apreciar a TAEG. Pode não ser perfeito, mas ainda é sólido, bem projetado e muito conveniente.

Do ponto de vista de recursos, flexibilidade, administração, suporte de plataforma, escalabilidade, documentação e maturidade, o Apache é um servidor Web fantástico.


-2

É superprojetado / superprojetado. O pior de tudo é que ele usa o APR (Apache Portable Runtime), uma camada inchada que acaba gastando muitos níveis de chamadas de função, alocação dinâmica de memória e liberação para realizar o equivalente a uma única printfchamada. Tudo isso leva a que seja:

  • muito devagar
  • com muita fome de recursos
  • impossível auditar a segurança
  • difícil de entender e modificar

5
Você aponta principalmente as armadilhas de sua complexidade e (discutível, depende de quais partes) o mau design; Por mais válidas que essas declarações sejam, elas não são causas de sua complexidade.
28511 haylem

1
-1 para o inchaço da TAEG. Eu estava trabalhando com a APR na era anterior à 1.0 e naquela época não estava introduzindo mais inchaço do que já estava na base de código 1.3. Além disso, a alocação dinâmica de memória no APR é mais ou menos uma cópia exata do código de memória 1.3. E mesmo se você estiver certo ... como um inchaço de qualquer tipo torna algo impossível de ser auditado?
Jacek Prucia

concordo com @haylem (+1) e também: esses quatro pontos na resposta de @R ..: como você sabe? Com o que você está comparando. Você pode estar certo, mas seus pontos serão relativos, ou seja, "muito lentos" - mas comparados com o que? Outro servidor como os mencionados aqui? Se sim, cite-os.
therobyouknow

Acredito que o site thttpd tenha bons números para conteúdo estático. O mais surpreendente é que, a partir da experiência pessoal de executar um sistema de lição de casa de estudante baseado na Web, o Apache também foi muito mais lento do mod_perlque o thttpd estava executando uma nova instância de perl para cada cliente. Isso foi há muito tempo e eu nunca fiz testes rigorosos para rastrear todas as causas; o departamento acabou de comprar um novo servidor ...
R .. GitHub Pare de ajudar o gelo

@R .: mais uma vez, por que você executá-lo com mod_perl :)
haylem
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.