Pesquisa de site

Uma comparação de servidores da Web para aplicativos da Web baseados em Python


Introdução

Neste artigo, falaremos sobre três coisas principais: Python, servidores da Web e, mais importante, os bits e bobs entre os dois.

Brincadeiras à parte, este artigo bastante longo pode parecer terrível para quem procura orientação ou respostas rápidas. Infelizmente, ao contrário da maioria das coisas no mundo do Python, quando se trata de escolher uma pilha de servidor de produção para implantar seu aplicativo, não há uma - e de preferência apenas uma - maneira óbvia de fazer isso.

No entanto, isso não deve assustá-lo. Depois de concluir este artigo, você terá um bom conhecimento de como diferentes servidores da Web funcionam e lidam com a tarefa de conversar com aplicativos da Web baseados em Python. Ao avaliar suas necessidades e requisitos, você poderá decidir qual servidor usar.

Interface de gateway do servidor da Web Python v1.0 (WSGI)

Compreendendo os problemas

Hoje, existem servidores web (ou módulos para servidores) em números cada vez maiores especificamente projetados (ou adaptados) para trabalhar com aplicações web Python de forma intercambiável. No entanto, nem sempre foi assim. Antigamente, os desenvolvedores realmente não tinham a possibilidade de alternar servidores da Web à vontade com facilidade, e cada alternância tinha um custo devido a dependências e limitações. Ao decidir sobre uma estrutura para construir, você também teria decidido, nem sempre de forma voluntária ou consciente, sobre o(s) servidor(es) que poderia usar para servir o aplicativo também. Isso ocorreu devido à falta de uma especificação de interface universalmente aceita: um terreno comum que aplicativos (frameworks) e servidores da web se adaptariam e usariam para se comunicar, permitindo a intercambialidade de componentes quando necessário com possivelmente zero mudança de código.

Nascimento do Padrão

No início deste século, esforços foram feitos para finalmente resolver o problema com a apresentação da Proposta de Aprimoramento do Python (PEP) 333 para a comunidade.

Do PEP (Python Enhancement Proposal) 333:

This document specifies a proposed standard
interface between web servers and Python web
applications or frameworks, to promote web
application portability across a variety of
web servers.

Conforme explicado no PEP, esse novo padrão foi (e é) destinado a permitir a portabilidade entre (e entre) servidores [web] e aplicativos [web Python]. Os poderosos recursos do padrão e sua ampla adoção em comparação com os anteriores lideram o caminho para hoje: um mundo onde existem muitos (talvez muitos) servidores da Web dispostos a fazer o trabalho por você.

A comparação

Nesta comparação de servidores da Web para aplicativos da Web baseados em Python, falaremos sobre algumas das opções disponíveis e o que as destaca. O objetivo aqui é que o leitor tenha uma visão mais clara e forneça ajuda para combinar os servidores com as necessidades personalizadas dos aplicativos para encontrar aquele. Devido ao grande número de opções (a cada dia surgem mais!), vamos filtrar e falar sobre aquelas que são especiais de várias formas: popularidade, solidez, ou fazer algo diferente (ou melhor) em relação ao o resto.

Nota: Gostaria de aconselhar você, leitor, a ter cuidado com benchmarks tendenciosos e enganosos que tendem a não refletir as condições de um ambiente de produção real. Infelizmente, esses [artigos] não significam muito quando se trata de escolher um servidor web para produção, que também é altamente improvável que seja a parte que está causando o gargalo. Aconselha-se, portanto, que avalie e compreenda as suas próprias necessidades e depois experimente diferentes opções, abstendo-se de números especulativos para evitar cenários reais de desastres futuros.

Servidores Web (ordem alfabética)

Servidor CherryPy WSGI

O que é?

CherryPy é na verdade um framework web. No entanto, é totalmente independente - o que significa que pode ser executado por conta própria, inclusive em cenários de produção sem a necessidade de software adicional. Isso é alcançado graças ao seu próprio servidor Web compatível com WSGI e HTTP/1.1. O projeto CherryPy o descreve como Um servidor HTTP genérico, pronto para produção, de alta velocidade. estrutura de desenvolvimento de aplicativos.

Por que você deve considerar usá-lo?

  • É compacto e simples.
  • Ele pode atender a qualquer aplicativo da Web Python em execução no WSGI.
  • Ele pode lidar com arquivos estáticos e pode ser usado apenas para servir arquivos e pastas sozinhos.
  • É thread-pool.
  • Ele vem com suporte para SSL.
  • É uma alternativa Python pura fácil de adaptar e fácil de usar, robusta e confiável.

Gunicorn

O que é?

O Gunicorn é um servidor web autônomo que oferece um pouco de funcionalidade de uma maneira significativamente fácil de operar. Ele usa o modelo pre-fork - o que significa que um processo mestre central (Gunicorn) é encarregado de gerenciar os processos de trabalho iniciados (de diferentes tipos), que então manipulam e lidam com as solicitações diretamente. E tudo isso pode ser configurado e adaptado para atender às suas necessidades e diversos cenários de produção.

Por que você deve considerar usá-lo?

  • Suporta WSGI e pode ser usado com qualquer aplicativo e estrutura Python em execução WSGI.
  • Também pode ser usado como um substituto para Paster (ex: Pyramid), Django's Development Server, web2py, e outros.
  • Oferece a escolha de vários tipos/configurações de trabalhadores e gerenciamento automático de processos de trabalho.
  • Suporte a HTTP/1.0 e HTTP/1.1 (Keep-Alive) por meio de workers síncronos e assíncronos.
  • Vem com suporte SSL
  • Extensível com ganchos.
  • É transparente e tem uma arquitetura clara.
  • Suporta Python versões 2.6, 2.7, 3, 3.2, 3.3

Tornado (Servidor HTTP via wsgi.WSGIContainer)

O que é?

Tornado é uma estrutura de desenvolvimento de aplicativos e uma biblioteca de rede projetada para lidar com operações assíncronas, permitindo que os servidores mantenham muitas conexões abertas. Ele também vem com um servidor WSGI que outros aplicativos WSGI Python (e estruturas) podem usar para executar.

Por que você deve considerar usá-lo?

  • Se você estiver construindo no topo da estrutura do Tornado; ou
  • Seu aplicativo precisa de funcionalidade assíncrona.

Embora nessas circunstâncias você queira escolher o servidor WSGI do Tornado para o seu projeto, você também pode optar por usar o Gunicorn com trabalhadores Tornado [Asynchronous].

Web distorcida

O que é?

Twisted Web é o servidor web que vem com a biblioteca de rede Twisted. Enquanto o próprio Twisted é \um mecanismo de rede orientado a eventos, o servidor Twisted Web é executado em WSGI e é capaz de alimentar outros aplicativos da web em Python.

Por que você deve considerar usá-lo?

  • É um produto simples de usar, estável e maduro.
  • Ele executará aplicativos Python WSGI.
  • Ele pode agir como uma estrutura de servidor da Web Python, permitindo que você o programe com a linguagem para fins de serviço HTTP personalizado.
  • Ele oferece capacidade de prototipagem simples e rápida por meio de Python Scrips (.rpy) que são executados mediante solicitações HTTP.
  • Ele vem com recursos de proxy e proxy reverso.
  • Suporta hosts virtuais.
  • Pode até servir Perl, PHP et cetera através da API twisted.web.twcgi.

uWSGI

O que é?

Apesar de suas convenções de nomenclatura muito confusas, o próprio uWSGI é um projeto vasto com muitos componentes, com o objetivo de fornecer uma pilha completa de [software] para construir serviços de hospedagem. Um desses componentes, o servidor uWSGI, executa aplicativos Python WSGI. Ele é capaz de usar vários protocolos, incluindo seu próprio protocolo de fio uwsgi, que é quase idêntico ao SCGI. Para atender à demanda (compreensível) de usar servidores HTTP autônomos na frente dos servidores de aplicativos, os servidores da Web NGINX e Cherokee são modularizados para suportar o protocolo uwsgi do uWSGI (melhor desempenho) para ter controle direto sobre seus processos.

Por que você deve considerar usá-lo?

  • uWSGI vem com um adaptador WSGI e oferece suporte total a aplicativos Python executados em WSGI.
  • Ele se conecta com libpython. Ele carrega o código do aplicativo na inicialização e age como um interpretador Python. Ele analisa as solicitações recebidas e invoca o Python callable.
  • Ele vem com suporte direto para o popular servidor web NGINX (juntamente com Cherokee* e lighttpd).
  • Está escrito em C.
  • Seus vários componentes podem fazer muito mais do que executar um aplicativo, o que pode ser útil para expansão.
  • Atualmente (no final de 2013), ele é desenvolvido ativamente e tem ciclos de lançamento rápidos.
  • Possui vários mecanismos para execução de aplicativos (assíncronos e síncronos).
  • Isso pode significar menor consumo de memória para execução.

Garçonete Servidor WSGI

O que é?

Waitress é um servidor WSGI puro-Python. À primeira vista, pode não parecer muito diferente de muitos outros; no entanto, sua filosofia de desenvolvimento o separa do resto. Seu objetivo é facilitar a carga de produção (e desenvolvimento) causada por servidores da Web para desenvolvedores de aplicativos da Web em Python. Waitress consegue isso neutralizando problemas causados por diferenças de plataforma (ex. Unix vs. Windows), interpretador (CPython vs. PyPy) e Python (versão 2 vs. 3).

Por que você deve considerar usá-lo?

  • É uma solução Python pura e muito enxuta.
  • Suporta HTTP/1.0 e HTTP/1.1 (Keep-Alive).
  • Ele vem pronto para ser implantado para produção com uma ampla variedade de suporte de plataforma.
  • Ao contrário do CherryPy, ele é independente de estrutura em sua natureza.
  • Ele roda em Windows e Unix, e no interpretador CPython e PyPy (somente Unix).
  • Suporta as versões 2 e 3 do Python.

Módulos para Servidores Stand-Alone

mod_python com um adaptador WSGI (Apache) (Embedding Python)

O que é?

Simplificando, mod_python é um módulo Apache que incorpora Python dentro do próprio servidor. Embora não seja recomendado por vários motivos (o projeto está morto e desatualizado com intenções muito recentes de continuar o desenvolvimento pelo autor original), ele pode ser usado para executar aplicativos WSGI no Apache por meio de wrappers.

Por que você deve considerar usá-lo?

Você pode querer programar e estender o Apache usando Python por um motivo específico.

mod_wsgi (Apache) (Python Incorporado)

O que é?

Sendo um módulo compatível com WSGI, o mod_wsgi permite que você execute aplicativos Python WSGI no Apache HTTP Server. Ele consegue isso de duas maneiras: a primeira sendo semelhante a como o mod_python funciona, incorporando o código e executando-o dentro do processo filho. O outro método oferece um modo de operação baseado em daemon pelo qual o aplicativo WSGI tem seu próprio processo distinto, gerenciado automaticamente pelo mod_wsgi.

Por que você deve considerar usá-lo?

  • A experiência existente com o Apache pode significar um ambiente de produção estável para suas operações também quando se trata de executar o Python. Isso por si só pode salvar o dia, fazendo valer a pena.
  • Se você depende do Apache ou deseja aproveitar seus módulos de extensão ricos e estáveis, este é o caminho certo.
  • Ele pode executar aplicativos em diferentes usuários do sistema para maior segurança.
  • É um software confiável e testado.
  • A World Wide Web contém toneladas de informações e perguntas e respostas relacionadas a ela, o que pode economizar muito tempo quando você encontrar um problema real de produção.
  • E vem com todas as outras funcionalidades que o Apache oferece.

Enviado por: O.S. Tezer