Desarrollo en la nubeJavier Nievas Muñoz
CTO en Pynso | CTO en [email protected]
BienvenidosAntes de empezar...
...algunos “keywords”
Nube. Web 2.0. Servidor Web. Servidor de Base de datos. Caché. Aplicaciones Web. Hosting. Uptime. Amazon AWS.
BienvenidosTARGETProyectos web con previsión de crecimiento en contenidos y visitas
ObjetivoMISIÓNConseguir que la plataforma web esté
online el 99% del tiempo
ObjetivoMISIÓNConseguir que la plataforma web esté
online el 99% del tiempo
¿Imposible?
IntroEl problemaPara 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ónGET/POST
Consulta(s) BBDD
Generar HTML
Servir HTML
Servir Media (Imgs, CSS, JS...)
Procesos largos
Streaming Envío de emails
Módulos recurrentes
IntroEl problemaTodo esto consume recursos del servidor: RAM + CPU + HDD + Red
HostingServidorLos 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 compartidoDesde 10€/mesPoca capacidadRecursos limitados y compartidos
Servidor virtual VPSDesde 30€/mesCapacidad configurableRecursos compartidos pero con reserva de unos mínimos
Servidor dedicadoDesde 100€/mesCapacidad fijaRecursos 100% disponibles
HostingServidorLos 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 compartidoDesde 10€/mesPoca capacidadRecursos limitados y compartidos
Servidor virtual VPSDesde 30€/mesCapacidad configurableRecursos compartidos pero con reserva de unos mínimos
Servidor dedicadoDesde 100€/mesCapacidad fijaRecursos 100% disponibles
¡NO SON ESCALABLES!
HostingEscalabilidadEl gran problema...
SolucionesHay 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
SolucionesServidor WebTípicamente se ha utilizado Apache. Consume mucha memoria Muchas opciones de configuración que
apenas se utilizan
NGINX + FastCGI / uWSGI
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServidor Web
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServidor Web
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServidor BBDDHabitualmente 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 encarga de replicarse en la demás.Otras opciones:
● Cambiar de concepto, y pasarse a otro tipo de BBDD, las no relacionales / NoSQL. Ejemplos: MongoDB, SimpleDB, CouchDB
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServir MEDIANO utilizar Apache!!! Es matar moscas a cañonazos! Podríamos usar nginx, pero tampoco es buena
idea... Es una tarea secundaria ¿y si externalizamos
este “marrón”? Utilizar un CDN (p.e. Amazon S3)
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesProcesamientoLas tareas que requieran un tiempo de procesamiento elevado no pueden ejecutarse en “tiempo de petición”, deben delegarse y ejecutarse en background. Utilizar un gestor de colas de tareas puede
ser una idea excelente Por ejemplo: Celery + Redis
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesGenerar HTMLMás del 90% del HTML que se genera visita tras visita es igual al que se ha generado la última vez. ¿Por qué regenerar toda esa información cuando podemos evitarnos esos cálculos simplemente guardando el HTML resultado? Utiliza la caché! → memcached
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServidorSi el servidor se te queda pequeño... amplíalo. Si se te vuelve a quedar pequeño... vuelve a ampliarlo.Si vuelve a quedarse pequeño... vuelve a ampliarlo.Y si se queda pequeño otra vez.. amplíalo más
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesServidor¿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 otro más!¿y si resulta que ahora ya me sobran 2 porque hoy no hay apenas visitas? Erm... ¿me fastidio?
Servidor web
Servidor Base de Datos
Servir ficheros estáticos
Procesamiento
Generar HTML
Servidor
SolucionesLa 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
SolucionesLa 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
SolucionesLa 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 CloudWatchSe “autoescala” gracias a Amazon Auto Scaling en base a parámetros de carga de los equipos configurables
SolucionesLa 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 CloudWatchSe “autoescala” gracias a Amazon Auto Scaling en base a parámetros de carga de los equipos configurables
La recetaIngredientes 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
ReferenciasMira 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)
DudasAprovecha la ocasión...
...y no te quedes con la duda
PREGUNTAD! :-)
Top Related