En las listas de Django, tanto la internacional en inglés como la española, es habitual la pregunta de "qué hosting me recomendaríais", para desplegar una aplicación Django.

En APSL nos dedicamos a la programación de aplicaciones web sobre Django y a la administración de sistemas Linux. En lo concerniente al hosting intentaremos explicar en este artículo nuestra manera de entender este servicio.

Para hospedar aplicaciones Django existen alternativas como Gondor o ep.io que nos dan un servicio muy completo en la nube, con posibilidad de utilizar Redis o Celery en algunos casos, VPS de coste razonable y servicios de hosting compartido al estilo de los que se pueden encontrar en internet para PHP. En djangohosting han hecho recopilación de los más conocidos.

Veamos en qué consiste cada tipo de servicio:

Hosting compartido

Son servicios en los que se intenta sacar el máximo rendimiento de la máquina, de modo que realmente "compites" por recursos con otros usuarios. En los más flexibles puedes instalar aplicaciones Django por fast-cgi, pero tienes poco control sobre la aplicación. La mayor ventaja de estos alojamientos es que son baratos, desde unos 5 Euros al mes puede empezar a poner tu aplicación Django online. Para PHP los costes pueden ser incluso menores.

La desventaja: no tienes control sobre el servidor. La aplicación irá más o menos rápida dependiendo de lo sobresaturado que esté el servidor y el ancho de banda del proveedor. Por supuesto olvídate de requerimentos especiales y en muchos casos de instalar librerías que no estén en el sistema. Si hay suerte tendrás un acceso por ssh y podrás instalar las librerías en un virtualenv.

Pese a las desventajas que tiene un hosting compartido para cualquier aplicación, que se acrecentan en las aplicaciones Django, puede ser una buena alternativa para poner on-line nuestra primera aplicación web sin tener que complicarnos la vida configurando un servidor. Algunos servicios dicen que ofrecen soporte Python, pero eso sólo significa que tienen Python instalado, hay que asegurase que tienen una versión moderna (mínimo Python 2.5) y que hay instrucciones claras sobre cómo instalar nuestra aplicación Django.

Para aplicaciones que vayan más allá de la mera web presencial o experimental, los hostings compartidos no son una buena elección, ya que realmente no tienes control sobre el rendimiento de la aplicación y tienes que tener mucho cuidado con lo que utilizas, no sea que no lo soporte el servidor.

El rendimiento de este tipo de alojamiento se define generalmente con una palabra: pobre. No esperemos que nuestra aplicación destaque por lo rápido que se sirve, generalmente será todo lo contrario.

Para aplicaciones profesionales un host que no puedas controlar al 100% no es buena idea, sí es barato al principio, per a la que creces un poco empiezas a tener problemas de rendimiento o dimensionamiento.
Si la aplicación crece y tiene más necesidades (gestión de colas, procesos distribuidos, etc) un host tipo cpanel o plesk se queda muy muy corto.

VPS

En un VPS el proveedor te alquila un trozo de los recursos de proveedor para tí solo, normalmente en forma de CPU, memoria y disco. Son servicios generalmente más caros que un hosting compartido, pero tienes la ventaja de que controlas al 100% lo que se instala en el servidor y su configuración. Mientras la aplicación no sobrepase los parámetros del hosting, sobretdo en lo referente a memoria, es una solución más que aceptable. Los costes pueden rondar los 7-20 euros al mes para un hosting decente, con 512 Mb de RAM y 20 Gb de disco. Se pueden encontrar VPS mucho más baratas, con un coste por año igual al coste por mes de un hosting reconocido, pero es una lotería. Están bien para jugar pero conviene tener un backup siempre a mano.

Los VPS tienen la desventaja de que requieren instalación y manetnimiento. Debemos tener en cuenta que somos los dueños de nuestro trozo de máquina, esto signfica que podemos instalar lo que queramos (dentro de los parámetros del servicio), pero también que debemos ocuparnos de las copias de seguridad, seguridad, monitorización, actualización del servidor, etc...

Los VPS son una solución ya más que aceptable si nuestra aplicación tiene unos requerimientos de memoria y espacio en disco reducidos y no necesitamos la potencia de un servidor dedicado. Nos ahorraremos unos eurillos, pero a cambio tendremos que dedicarle tiempo a la instalación y al mantenimiento.

El rendimiento del los VPS depende de lo bueno que sea el ancho de banda garantizado del proveedor y de la memoria. Sirven para la mayoría de aplicaciones y nos dan mucho más juego que un servidor compartido, ya que con 512 Mb por ejemplo, podemos ejecutar una aplicación Django con ngnix, uWSGI o Gunicorn con dos o tres workers y seguramente nos quedará memoria para unos cientos de MB de Memcached. El rendimiento en CPU suele ser lo peor. Algunos VPS no te dan datos sobre la velocidad de CPU, o se limitan a decirte que es 1 core (1 core de qué?).

Los VPS son una buena opción para prototipos, pero no para una solución de producción a largo plazo, ya que o bien tienes que ir aumentando memoria y disco, pudiendo incrementarse el coste hasta niveles superiores a los servidores dedicados, o bien tienes que cambiar a un servidor dedicado, con lo que tienes que considerar el coste adicional que implica configurar otra vez el servidor, más el tiempo necesario para hacer la migración.

Servidor dedicado

Tiene todas las ventajas de un VPS y también los incovenientes, salvo que controlas tanto la memoria del servidor, disco y la CPU. Si el servidor ha sido bien dimensionado nuestra aplicación podrá crecer sin demasiados problemas. Los costes de un servidor dedicado son bastante mayores que los VPS, los más potentes suelen tener un coste inicial o "setup fee" indendientemente de si los vas a utilizar un día o tres años.

La gran ventaja es que sueles tener recursos suficientes para tu aplicación. No hay problema en instalar gestores de colas como Celery, Redis, RabbitMq, la base de datos tendrá más menoria, puedes ir instalando y optimizando los servicios,... La convivencia de aplicaciones Django, PHP, Java en un servidor dedicado con suficiente memoria no es problema. Al final es tener una máquina potente para tí solo, pudiendo instalar la configuración que tu aplicación requiera.

Actualmente hay servidores muy potentes (i7-2600 quadcore con 16 Gb de RAM por ejemplo) con costes que rondan los 50-60 €/mensuales. No en España por supuesto, pero sí en Alemania o Francia. Un día alguien nos tendría que explicar porqué estos países con una mano de obra más cara que la nuestra pueden tener datacenters ofreciendo precios 4 o 5 veces más baratos que los ISPs de aquí. ¿Será que por hablar español nos cargan un extra?

Servidores en la nube

No tratamos aquí de VPS en los que el ISP está en la nube, ya que eso significa básicamente que al ISP le resulta más sencillo ampliarte memoria, CPU o disco, sinó de aplicaciones que tienen unos requerimientos tales que necesitan de varios servidores balanceados y que tienen unos requisitos de carga con picos altos. Configurando nuestra aplicación para trabajar en la Nube, podremos optimizar nuestros costes de servidor a expensas de una mayor complejidad de gestión.

Por mucho que la publicidad nos cuente que para estar en la nube no necesitas técnicos de sistemas la realidad es dura y se impone. En la nube tu empresa no necesitará de técnicos de hardware (como tampoco los necesitaría contratando un hosting) pero sí necesita de técnicos de sistemas que sepan configurar tu aplicación para sacar partido de las ventajas de estar en la nube, de modo que la aplicación levante los servidores necesarios para satisfacer los picos de demanda el tiempo necesario y no más.

Cómo entendemos el hosting de aplicaciones en APSL

En APSL trabajamos con tres proveedores fundamentalmente: Hetzner, OVH y Amazon, según el proyecto y el cliente.

Para clientes pequeños mantenemos varios servidores que contratamos, pagamos nosotros y gestionamos. Es decir hacemos hosting de aplicaciones Django hechas por nosotros o por otros, pero siempre gestionando nosotros el servidor, esto implica monitorización con Nagios, monitorización la propia aplicación, realización de copias de seguridad, etc.

Para aplicaciones que tengan que tengan prevista mucha carga de trabajo estamos recomendando a nuestros clientes Hetzner o OVH, tienen unos precios muy buenos y hace más de tres años que les alquilamos servidores y por el momento el servicio ha sido exclente. Te mantienen informado en todo momento de las incidencias y su respuesta a los problemas (hemos tenido un fallo de un módulo de memoria y de un disco en estos años con diferentes servidores con Hetzner) ha sido muy rápida. Con OVH hemos trabajado menos, pero por el momento sin ningún incidente destacable.

Normalmente trabajamos con servidores dedicados. Instalamos el servidor, lo configuramos y según quiera el cliente añadimos las configuraciones de monitorización del servidor y de la aplicación. Las configuraciones suelen ir acompañadas de copia de seguridad diaria e incremental (Hetzner proporciona 100 Gb de espacio para las copias) ya sea en el mismo proveedor o en un proveedor distinto (Amazon por ejemplo) y de planes de contingencia para las aplicaciones más críticas.

Los VPS los utlizamos cuando únicamente cuando la aplicación no es crítica y el cliente no quiere gastarse prácticamente nada en mantenimiento posterior. De este modo por unos 8 € al mes, y tras la instalación inicial, la aplicación estará funcionando en un VPS de calidad, pero sin las ventajas que da estar en un servidor dedicado y/o gestionado y obviamente con las limitaciones propias del VPS contratado.

Amazon lo utilizamos cuando la ocasión lo requiere. Por ejemplo, las microinstancias son ideales para los sistemas de monitorizacion (no conviene tener los sistemas de monitorización en el mismo sitio que los servidores) y para aplicaciones muy grandes, donde necesitas varios servidores y balanceo de carga, el precio y la flexibilidad de Amazon en estos momentos es prácticamente insuperable. Además poder iniciar servidores bajo demanda implica que no tienes que pagar por el servidor todo el tiempo, sinó únicamente el tiempo que lo estás tuilizando.

Con Hetzner o OVH puedes solicitar varios servidores y hacer que estos estén dentro de la misma red, y varias configuraciones más que te permitirán hacer lo mismo que Amazon, pero sólo son competitivos en precio si tu aplicación necesita de mucha potencia de cálculo o memoria, en caso contrario, o si tu aplicación tiene que soportar puntas de trabajo, la opciónde Amazon es la más aconsejable. Además, como ya había comentado, Amazon es una muy buena opción para soluciones de backup y planes de contingencia.

Para nosotros cada aplicación es única, con requisitos únicos y corresponde a un cliente único. Esto quiere decir que no hay una solución mágica que se adapte a todo. Bueno, la solución mágica tal vez exista, y es tener buenos técnicos de sistemas que configuren tu aplicación en la opción de hosting más adecuada y que se vaya monitorizando tanto el servidor como la aplicación para ir aplicando las optimizaciones que correspondan (si son en la parte de servidor) o aconsejando modificaciones en el código si es un problema de la aplicación.

Por eso nuestra idea de una solución de hositng se aleja de un típico hosting compartido con CPanel o Plesk, sinó que se basa más en el trato directo y en dar el servicio que requiere la aplicación y nuestro cliente. Tenemos claro que no podemos competir en precios con un hosting compartido, pero no es nuestra guerra. Ofrecemos calidad y flexibilidad, trato directo y configuraciones a medida para nuestros clientes. Nuestro objetivo es que sus aplicaciones vayan lo más rápido posible, que la respuesta "no se puede" no forme parte del vocabulario diario y sobre todo, que el programador de las aplicaciones pueda dedicar su tiempo a lo que mejor hace, programar, dejando a nuestros técnicos la preocupación de la gestión de los servidores.