El documento habla sobre el desarrollo en la nube para proyectos web con crecimiento en contenido y visitas. Explica que los recursos de los servidores son limitados y no son escalables, mientras que la nube permite escalar los recursos ilimitadamente al permitir agregar máquinas bajo demanda. Recomienda resolver problemas individualmente como el servidor web, base de datos y procesamiento mediante herramientas como Nginx, memcached y Celery para lograr una plataforma escalable con capacidad del 99% del tiempo.
1. Desarrollo en la nube
Javier Nievas Muñoz
CTO en Pynso | CTO en Hitsbook
jnievas@pynso.com
2. Bienvenidos
Antes de empezar...
...algunos “keywords”
Nube. Web 2.0. Servidor Web. Servidor de
Base de datos. Caché. Aplicaciones Web.
Hosting. Uptime. Amazon AWS.
6. Intro
El problema
Para entender el problema debemos considerar todos los
elementos que intervienen a la hora de servir una página
dentro de una aplicación web.
Petición Consulta(s) Generar Servir Servir Media Procesos
(Imgs, CSS, JS...)
GET/POST BBDD HTML HTML largos
Módulos Streaming Envío de
recurrentes emails
8. Hosting
Servidor
Los recursos de los servidores son finitos y, por tanto, tienen una capacidad limitada.
Las opciones habituales que nos hemos encontrado a la hora de contratar un servidor han sido:
Servidor compartido
Servidor virtual (VPS)
Servidor dedicado
Servidor compartido Servidor virtual VPS Servidor dedicado
Desde 10€/mes Desde 30€/mes Desde 100€/mes
Poca capacidad Capacidad configurable Capacidad fija
Recursos limitados y compartidos Recursos compartidos pero con Recursos 100% disponibles
reserva de unos mínimos
9. Hosting
Servidor
Los recursos de los servidores son finitos y, por tanto, tienen una capacidad limitada.
Las opciones habituales que nos hemos encontrado a la hora de contratar un servidor han sido:
Servidor compartido
Servidor virtual (VPS)
¡NO SON ESCALABLES!
Servidor dedicado
Servidor compartido Servidor virtual VPS Servidor dedicado
Desde 10€/mes Desde 30€/mes Desde 100€/mes
Poca capacidad Capacidad configurable Capacidad fija
Recursos limitados y compartidos Recursos compartidos pero con Recursos 100% disponibles
reserva de unos mínimos
11. Soluciones
Hay muchos problemas...
… que hay que resolver individualmente para conseguir
una plataforma realmente preparada.
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento / Envío de emails
Generar HTML
Servidor
12. Soluciones
Servidor Web
Típicamente se ha utilizado Apache.
Consume mucha memoria
Servidor web
Servidor Base de Datos Muchas opciones de configuración que
apenas se utilizan
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
NGINX + FastCGI / uWSGI
13. Soluciones
Servidor Web
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
14. Soluciones
Servidor Web
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
15. Soluciones
Servidor BBDD
Habitualmente se utiliza MySQL y PostGres. Ambos sistemas de BBDD
están diseñados para poder escalar.
Solución típica: utilizar varios equipos con versiones de sólo lectura
de la base de datos, y que todos escriban en una sola, que se
Servidor web encarga de replicarse en la demás.
Servidor Base de Datos
Servir ficheros estáticos
Otras opciones:
Procesamiento ● Cambiar de concepto, y pasarse a otro tipo de BBDD, las no
Generar HTML
Servidor relacionales / NoSQL. Ejemplos: MongoDB, SimpleDB, CouchDB
16. Soluciones
Servir MEDIA
NO utilizar Apache!!!
Es matar moscas a cañonazos!
Servidor web Podríamos usar nginx, pero tampoco es buena
Servidor Base de Datos
idea...
Servir ficheros estáticos
Procesamiento
Es una tarea secundaria ¿y si externalizamos
Generar HTML
Servidor
este “marrón”?
Utilizar un CDN (p.e. Amazon S3)
17. Soluciones
Procesamiento
Las tareas que requieran un tiempo de
procesamiento elevado no pueden ejecutarse
Servidor web en “tiempo de petición”, deben delegarse y
Servir ficheros estáticos ejecutarse en background.
Servidor Base de Datos
Utilizar un gestor de colas de tareas puede
Procesamiento
Generar HTML
Servidor
ser una idea excelente
Por ejemplo: Celery + Redis
18. Soluciones
Generar HTML
Más del 90% del HTML que se genera visita
tras visita es igual al que se ha generado la
Servidor web última vez. ¿Por qué regenerar toda esa
Servidor Base de Datos
Servir ficheros estáticos información cuando podemos evitarnos esos
Procesamiento
Generar HTML cálculos simplemente guardando el HTML
Servidor
resultado?
Utiliza la caché! → memcached
19. Soluciones
Servidor
Si el servidor se te queda pequeño... amplíalo.
Si se te vuelve a quedar pequeño... vuelve a
Servidor web ampliarlo.
Servidor Base de Datos
Servir ficheros estáticos Si vuelve a quedarse pequeño... vuelve a
Procesamiento
Generar HTML ampliarlo.
Servidor
Y si se queda pequeño otra vez.. amplíalo más
20. Soluciones
Servidor
¿y si ya no puedes ampliarlo más? → Contrata otro
servidor y reparte las tareas entre ambos.
¿y si se queda pequeño con ese otro? → Contrata
Servidor web
Servidor Base de Datos otro más!
Servir ficheros estáticos
Procesamiento ¿y si resulta que ahora ya me sobran 2 porque hoy
Generar HTML
Servidor
no hay apenas visitas? Erm... ¿me fastidio?
21. Soluciones
La nube al rescate!
La nube/cloud es el lugar ideal donde alojar este tipo de proyectos.
Nos proporciona una plataforma ideal donde servir nuestros
proyectos con capacidad para escalarlos “ilimitadamente”.
Podemos disponer de tantas máquinas como necesitemos, en el
momento en el que las necesitemos.
Pagaremos realmente por el uso real que tenga nuestra plataforma
Y lo mejor, es que podemos conseguir que se regule y ajuste de
forma automágica.
Por ejemplo: Amazon EC2
22. Soluciones
La nube al rescate!
En la “nube” podremos disponer de equipos que podemos arrancar bajo
demanda montando sobre ellos imágenes de disco previamente
preparadas. ¿Qué nos permite esto?
Si tenemos poca carga:
1 servidor con el Nginx frontal y algunos procesos FastCGI/uWSGI
Si tenemos más carga:
1 servidor con el nginx frontal
X servidores con procesos FastCGI/uWSGI sirviendo la plataforma
23. Soluciones
La nube al rescate!
Arquitectura hiperflexible:
Servidores frontales con un autobalanceador
Servidores de aplicaciones (FastCGI/uWSGI)
Servidores de tareas (Celery Workers)
Granja de BBDD (Amazon RDS)
Servidores de caché de contenidos (memcached o Amazon
Elasticache)
Se supervisa gracias a Amazon CloudWatch
Se “autoescala” gracias a Amazon Auto Scaling en base a parámetros
de carga de los equipos configurables
24. Soluciones
La nube al rescate!
Arquitectura hiperflexible:
Servidores frontales con un autobalanceador e IP elástica
Servidores de aplicaciones (FastCGI/uWSGI)
Servidores de tareas (Celery Workers)
Granja de BBDD (Amazon RDS)
Servidores de caché de contenidos (memcached)
Se supervisa gracias a Amazon CloudWatch
Se “autoescala” gracias a Amazon Auto Scaling en base a
parámetros de carga de los equipos configurables
25. La receta
Ingredientes
Amazon EC2: Todos los servidores que necesites
Amazon S3 + Cloudfront: Servir los Media
Amazon RDS: Granja de BBDD
Amazon SES: Envio de emails
Amazon Elasticache: Caché de contenidos (memcached)
Amazon CloudWatch + Amazon Auto Scaling: Para la magia
¿Todo con Amazon? En realidad hay más alternativas, pero Amazon
ha sido pionero y por ello tienen más experiencia y mejor abanico
de herramientas
26. Referencias
Mira qué hacen los demás...
...que lo mismo aprendes algo ;-)
Muchos portales de los “grandes” tienen blogs en los que cuentan sus
“batallas” contra los picos de visitas. Leelos. Empápate.
● Por ejempo, el proyecto Disqus o Tuenti
● http://www.kitchensoap.com/ (trabajó en Flickr)
Hay muchos libros interesantes al respecto:
● Building Scalable Web Sites (by Cal Henderson)
● Scalable Internet Architectures (by Theo Schlossnagle)
● The Art of Scalability (by Martin L.Abbott)