Desarrollo en la nube

28
Desarrollo en la nube Javier Nievas Muñoz CTO en Pynso | CTO en Hitsbook [email protected]

description

Los proyectos que son creados con miras internacionales o que soporten una alta carga de usuarios o contenidos han de diseñar de manera que pueda ser escalables. Para esto se suelen utilizar sistemas de computación en la nube. Javi nos contó la problemática que se encuentran estos proyectos cuando reciben altos picos de tráfico y cuales son las soluciones a estas situaciones.

Transcript of Desarrollo en la nube

Page 1: Desarrollo en la nube

Desarrollo en la nubeJavier Nievas Muñoz

CTO en Pynso | CTO en [email protected]

Page 2: Desarrollo en la nube

BienvenidosAntes de empezar...

...algunos “keywords”

Nube. Web 2.0. Servidor Web. Servidor de Base de datos. Caché. Aplicaciones Web. Hosting. Uptime. Amazon AWS.

Page 3: Desarrollo en la nube

BienvenidosTARGETProyectos web con previsión de crecimiento en contenidos y visitas

Page 4: Desarrollo en la nube

ObjetivoMISIÓNConseguir que la plataforma web esté

online el 99% del tiempo

Page 5: Desarrollo en la nube

ObjetivoMISIÓNConseguir que la plataforma web esté

online el 99% del tiempo

¿Imposible?

Page 6: Desarrollo en la nube

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

Page 7: Desarrollo en la nube

IntroEl problemaTodo esto consume recursos del servidor: RAM + CPU + HDD + Red

Page 8: Desarrollo en la nube

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

Page 9: Desarrollo en la nube

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!

Page 10: Desarrollo en la nube

HostingEscalabilidadEl gran problema...

Page 11: Desarrollo en la nube

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

Page 12: Desarrollo en la nube

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

Page 13: Desarrollo en la nube

SolucionesServidor Web

Servidor web

Servidor Base de Datos

Servir ficheros estáticos

Procesamiento

Generar HTML

Servidor

Page 14: Desarrollo en la nube

SolucionesServidor Web

Servidor web

Servidor Base de Datos

Servir ficheros estáticos

Procesamiento

Generar HTML

Servidor

Page 15: Desarrollo en la nube

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

Page 16: Desarrollo en la nube

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

Page 17: Desarrollo en la nube

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

Page 18: Desarrollo en la nube

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

Page 19: Desarrollo en la nube

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

Page 20: Desarrollo en la nube

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

Page 21: Desarrollo en la nube

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

Page 22: Desarrollo en la nube

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

Page 23: Desarrollo en la nube

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

Page 24: Desarrollo en la nube

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

Page 25: Desarrollo en la nube

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

Page 26: Desarrollo en la nube

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)

Page 27: Desarrollo en la nube

DudasAprovecha la ocasión...

...y no te quedes con la duda

PREGUNTAD! :-)

Page 28: Desarrollo en la nube