Búsqueda de sitios web

Una comparación de servidores web para aplicaciones web basadas en Python


Introducción

En este artículo, hablaremos sobre tres cosas principales: Python, servidores web y, lo que es más importante, los detalles intermedios entre los dos.

Bromas aparte, este artículo bastante largo puede parecer nefasto para algunos que buscan orientación o respuestas rápidas. Desafortunadamente, a diferencia de la mayoría de las cosas en el mundo de Python, cuando se trata de elegir una pila de servidor de producción para implementar su aplicación, no hay una, y preferiblemente solo una, forma obvia de hacerlo.

Sin embargo, esto no debería asustarte. Después de completar este artículo, tendrá un buen conocimiento de cómo funcionan los diferentes servidores web y manejará la tarea de hablar con aplicaciones web basadas en Python. Al evaluar sus necesidades y requisitos, podrá decidir qué servidor usar.

Interfaz de puerta de enlace del servidor web de Python v1.0 (WSGI)

Comprender los problemas

Hoy en día, existen servidores web (o módulos para servidores) en cantidades cada vez mayores diseñados específicamente (o adaptados) para trabajar con aplicaciones web de Python de manera intercambiable. Sin embargo, no siempre ha sido el caso. En los viejos tiempos, los desarrolladores realmente no tenían la posibilidad de cambiar de servidor web fácilmente, y cada cambio tenía un costo debido a las dependencias y limitaciones. Al decidir sobre un marco para construir, también habría decidido, no siempre voluntariamente ni conscientemente, sobre el (los) servidor (es) que podría usar para servir la aplicación también. Esto se debió a la falta de existencia de una especificación de interfaz universalmente aceptada: un terreno común que las aplicaciones (marcos) y los servidores web por igual se adaptarían y utilizarían para comunicarse, lo que permitiría la intercambiabilidad de componentes cuando fuera necesario con posiblemente cero cambio de código

Nacimiento del estandarte

A principios de este siglo, se hicieron esfuerzos para resolver finalmente el problema con la presentación de la Propuesta de mejora de Python (PEP) 333 a la comunidad.

Del PEP (Propuesta de mejora de Python) 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.

Como se explica en el PEP, este nuevo estándar estaba (y está) destinado a permitir la portabilidad entre (y entre) servidores [web] y aplicaciones [web de Python]. Las potentes funciones del estándar y su amplia adopción en comparación con las anteriores marcan el camino para hoy: un mundo donde existen muchos (quizás demasiados) servidores web dispuestos a hacer el trabajo por usted.

La comparación

En esta comparación de servidores web para aplicaciones web basadas en Python, hablaremos sobre algunas de las opciones disponibles y qué las hace destacar. El objetivo aquí es que el lector tenga una visión más clara y brinde ayuda para hacer coincidir los servidores con las necesidades personalizadas de las aplicaciones para encontrar el indicado. Debido a la gran cantidad de opciones (¡aparecen más todos los días!), filtraremos y hablaremos sobre aquellas que son especiales de varias maneras: popularidad, solidez o hacer algo diferente (o mejor) en comparación con el resto.

Nota: Me gustaría aconsejarle, lector, que desconfíe de los puntos de referencia sesgados y engañosos que tienden a no reflejar las condiciones de un entorno de producción real. Desafortunadamente, esos [artículos] realmente no significan mucho cuando se trata de elegir un servidor web para la producción, que también es muy poco probable que sea la parte que causa el cuello de botella. Por lo tanto, se le recomienda evaluar y comprender sus propias necesidades y luego probar diferentes opciones, absteniéndose de números especulativos para evitar escenarios de desastres reales en el futuro.

Servidores web (orden alfabético)

Servidor CherryPy WSGI

¿Qué es?

CherryPy es en realidad un marco web. Sin embargo, es totalmente autónomo, lo que significa que puede ejecutarse por sí solo, incluso en escenarios de producción sin necesidad de software adicional. Esto se logra gracias a su propio servidor web compatible con WSGI, HTTP/1.1. El proyecto CherryPy lo describe como \Un servidor HTTP genérico de alta velocidad, listo para la producción, agrupado por subprocesos. Como es un servidor WSGI, también se puede usar para servir a cualquier otra aplicación Python WSGI, sin estar vinculado a CherryPy's marco de desarrollo de aplicaciones.

¿Por qué debería considerar su uso?

  • Es compacto y simple.
  • Puede servir cualquier aplicación web de Python que se ejecute en WSGI.
  • Puede manejar archivos estáticos y solo se puede usar para servir archivos y carpetas.
  • Está agrupado en subprocesos.
  • Viene con soporte para SSL.
  • Es una alternativa de Python puro fácil de adaptar y fácil de usar que es robusta y confiable.

gunicornio

¿Qué es?

Gunicorn es un servidor web independiente que ofrece bastante funcionalidad de una manera significativamente fácil de operar. Utiliza el modelo previo a la bifurcación, lo que significa que un proceso maestro central (Gunicorn) tiene la tarea de administrar los procesos de trabajo iniciados (de diferentes tipos), que luego manejan y tratan las solicitudes directamente. Y todo esto se puede configurar y adaptar para satisfacer sus necesidades y diversos escenarios de producción.

¿Por qué debería considerar su uso?

  • Es compatible con WSGI y se puede usar con cualquier marco y aplicación Python que ejecute WSGI.
  • También se puede usar como reemplazo directo de Paster (por ejemplo, Pyramid), el servidor de desarrollo de Django, web2py y otros.
  • Ofrece la opción de varios tipos/configuraciones de trabajadores y gestión automática de procesos de trabajadores.
  • Compatibilidad con HTTP/1.0 y HTTP/1.1 (Keep-Alive) a través de trabajadores sincrónicos y asincrónicos.
  • Viene con soporte SSL
  • Extensible con ganchos.
  • Es transparente y tiene una arquitectura clara.
  • Admite las versiones de Python 2.6, 2.7, 3, 3.2, 3.3

Tornado (servidor HTTP a través de wsgi.WSGIContainer)

¿Qué es?

Tornado es un marco de desarrollo de aplicaciones y una biblioteca de red diseñada para manejar operaciones asincrónicas, lo que permite que los servidores mantengan muchas conexiones abiertas. También viene con un servidor WSGI que otras aplicaciones Python WSGI (y marcos) pueden usar para ejecutarse.

¿Por qué debería considerar su uso?

  • Si está construyendo sobre un marco Tornado superior; o
  • Su aplicación necesita funcionalidad asíncrona.

Aunque en estas circunstancias es posible que desee elegir el servidor WSGI de Tornado para su proyecto, también puede optar por utilizar Gunicorn con trabajadores Tornado [asincrónicos].

Red retorcida

¿Qué es?

Twisted Web es el servidor web que viene con la biblioteca de redes Twisted. Mientras que Twisted en sí mismo es \un motor de red basado en eventos, el servidor Twisted Web se ejecuta en WSGI y es capaz de potenciar otras aplicaciones web de Python.

¿Por qué debería considerar su uso?

  • Es un producto simple de usar, estable y maduro.
  • Ejecutará aplicaciones WSGI Python.
  • Puede actuar como un marco de servidor web de Python, lo que le permite programarlo con el lenguaje para fines de servicio HTTP personalizados.
  • Ofrece una capacidad de creación de prototipos simple y rápida a través de Python Scrips (.rpy) que se ejecutan con solicitudes HTTP.
  • Viene con capacidades de proxy y proxy inverso.
  • Admite servidores virtuales.
  • Incluso puede servir Perl, PHP, etc. a través de la API twisted.web.twcgi.

uWSGI

¿Qué es?

A pesar de sus convenciones de nomenclatura muy confusas, uWSGI en sí mismo es un gran proyecto con muchos componentes, cuyo objetivo es proporcionar una pila completa de [software] para crear servicios de alojamiento. Uno de estos componentes, el servidor uWSGI, ejecuta aplicaciones Python WSGI. Es capaz de utilizar varios protocolos, incluido su propio protocolo de cable uwsgi, que es casi idéntico a SCGI. Para satisfacer la demanda (comprensible) de usar servidores HTTP independientes frente a los servidores de aplicaciones, los servidores web NGINX y Cherokee están modularizados para admitir el protocolo uwsgi de uWSGI (de mejor rendimiento) para tener control directo sobre sus procesos.

¿Por qué debería considerar su uso?

  • uWSGI viene con un adaptador WSGI y es totalmente compatible con las aplicaciones de Python que se ejecutan en WSGI.
  • Se enlaza con libpython. Carga el código de la aplicación al inicio y actúa como un intérprete de Python. Analiza las solicitudes entrantes e invoca el Python callable.
  • Viene con soporte directo para el popular servidor web NGINX (junto con Cherokee* y lighttpd).
  • Está escrito en C.
  • Sus diversos componentes pueden hacer mucho más que ejecutar una aplicación, lo que puede ser útil para la expansión.
  • Actualmente (a fines de 2013), se desarrolla activamente y tiene ciclos de lanzamiento rápidos.
  • Tiene varios motores para ejecutar aplicaciones (asíncronas y síncronas).
  • Puede significar una menor huella de memoria para ejecutar.

Camarera Servidor WSGI

¿Qué es?

Waitress es un servidor WSGI de Python puro. A primera vista, puede que no parezca muy diferente a muchos otros; sin embargo, su filosofía de desarrollo lo separa del resto. Su objetivo es aliviar la carga de producción (y desarrollo) causada por los servidores web para los desarrolladores de aplicaciones web de Python. Waitress logra esto al neutralizar los problemas causados por las diferencias de plataforma (p. ej., Unix frente a Windows), intérprete (CPython frente a PyPy) y Python (versión 2 frente a 3).

¿Por qué debería considerar su uso?

  • Es una solución de Python puro muy sencilla.
  • Admite HTTP/1.0 y HTTP/1.1 (Keep-Alive).
  • Viene listo para implementarse en producción con una amplia gama de plataformas compatibles.
  • A diferencia de CherryPy, en realidad es independiente del marco por naturaleza.
  • Se ejecuta en Windows y Unix, y en el intérprete CPython y PyPy (solo Unix).
  • Es compatible con las versiones 2 y 3 de Python.

Módulos para servidores autónomos

mod_python con un adaptador WSGI (Apache) (Embedding Python)

¿Qué es?

En pocas palabras, mod_python es un módulo de Apache que integra Python dentro del propio servidor. Aunque no se recomienda por varias razones (el proyecto está muerto y desactualizado con intenciones muy recientes de continuar el desarrollo por parte del autor original), se puede usar para ejecutar aplicaciones WSGI en Apache a través de contenedores.

¿Por qué debería considerar su uso?

Es posible que desee programar y ampliar Apache utilizando Python por un motivo específico.

mod_wsgi (Apache) (Incrustación de Python)

¿Qué es?

Al ser un módulo compatible con WSGI, mod_wsgi le permite ejecutar aplicaciones Python WSGI en Apache HTTP Server. Lo logra de dos maneras: la primera es similar a cómo funciona mod_python, al incrustar el código y ejecutarlo dentro del proceso secundario. El otro método ofrece un modo de operación basado en daemon en el que la aplicación WSGI tiene su propio proceso distinto, administrado automáticamente por mod_wsgi.

¿Por qué debería considerar su uso?

  • La experiencia existente con Apache puede significar un entorno de producción estable para sus operaciones cuando se trata de ejecutar Python también. Esto solo puede salvar el día, haciendo que valga la pena.
  • Si depende de Apache o desea aprovechar sus módulos de extensión ricos y estables, será el camino a seguir.
  • Puede ejecutar aplicaciones bajo diferentes usuarios del sistema para mayor seguridad.
  • Es un software fiable y probado.
  • World Wide Web contiene toneladas de información y preguntas y respuestas relacionadas que pueden ahorrarle mucho tiempo cuando se encuentre con un problema de producción real.
  • Y viene con todas las demás funciones que ofrece Apache.

Enviado por: O.S. Tezer