Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto...

38
Arquitectura de las nuevas aplicaciones web Como lograr escalabilidad, alta disponibilidad y alto rendimiento

description

Presentación en Barcamp Córdoba 2010

Transcript of Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto...

Page 1: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Arquitectura de las nuevas aplicaciones web

Como lograr escalabilidad, alta disponibilidad

y alto rendimiento

Page 2: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿NUEVAS APLICACIONES WEB?

Page 3: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Las aplicaciones de escritorio se pasan a la web (gmail, google docs)

• Nuestras vidas y actividades se mueven a la nube

• Los servicios y la información en la nube, accesibles con cualquier navegador conectado a la nube. (SaaS)

• Necesitamos igualdad de condiciones y rendimiento en la nube

Page 4: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Retos

• Velocidad (Alto Rendimiento)

• Ubicuidad

• Disponibilidad

• Seguridad

• Estabilidad

• Compatibilidad

Page 5: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

LA WEB EVOLUCIONO

Page 6: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Contenido puramente textual (Web 1.0)

• Completa interactividad

• Multimedia

• La web como plataforma (Web 2.0)

• Web 3.0 (??)

Page 7: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Browsers

1995 2010

Page 8: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Experiencia de usuario enriquecida

– Gráficos

– Video

– Interactividad

• Acceso offline

• HTML 5

Page 9: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Retos

• Velocidad (Alto Rendimiento)

• Seguridad

• Estabilidad

• Compatibilidad

Page 10: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• El usuario, sus aplicaciones y sus datos se mueven a la web

• La web, los navegadores y las conexiones evolucionan

• + velocidad

• En cualquier lugar

Page 11: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿ESCALABILIDAD?

Page 12: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Escalabilidad es aumentar la capacidad de atender usuarios o volumen de datos de manera

lineal con la capacidad de cómputo añadida

Page 13: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿Por qué es importante?

• Pérdida de tráfico y/o ventas

– Google: +500ms – -20% tráfico

– Yahoo: +400ms – -5%/-9% tráfico

– Amazon: 100ms – -1% ventas

• Ahorro de costos

• Mejor experiencia de uso

Page 14: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

|

http://webpagetest.org

Page 15: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Tiempo de respuesta

– 0.1s a 1s: No es necesario feedback al usuario

– 1s a 10s: Es necesario feedback al usuario (cargador, opciones de carga)

– >10s: El usuario no llega a los 10s

Page 16: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿Cómo escalamos?

Scaling up (vertical)

• Upgrades a cada nodo

• Más CPU

• Más memoria

• Más máquina

• Sencillo

• Muy limitado

Scaling out (horizontal)

• Aumentar el nro de nodos

• Más máquinas

• Distribuir

• Descentralizar

• Complicado

Page 17: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Sunfire E20k 36 x 1.8GHz

U$S450.000 – U$S 2.500.000

PowerEdge SC1435 Dualcore 1.8GHz

U$S 1.500

Page 18: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• “sólo se puede escalar con Java” (JA!)

• “PHP/Python/Ruby no escalan” (JA!)

• La escalabilidad depende del diseño de la arquitectura, NO de la tecnología utilizada

• NO es una tecnología

• NO es un protocolo

Page 19: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Escalar verticalmente

• Reemplazar el servidor por uno más grande

• Usar CPUs más rápidos

• Un servidor que es el doble de rápido cuesta bastante más que el doble.

Page 20: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Escalar horizontalmente

• Agregar servidores (1, 10, 100, 1000)

• Barato

• Depende de la red (gigabit, 10GB, Infiniband)

• Obtenemos gratis: redundancia (AD!)

• Escalabilidad NO ES alta disponibilidad

• Pero se intersecan

• Eliminar SPFs! (escalabilidad+AD+seguridad)

Page 21: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• LAMP básico

– Linux, Apache, MySQL, PHP (lenguaje de programación)

– ¿Escalable? • Máquina compartida para servidor web y

base de datos

– ¿Confiable? • Un solo punto de fallo (SPF)

Page 22: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Base de datos dedicada – La base de datos corre en un servidor

separado

– Requerimientos • Otra máquina más administración

– ¿Escalable? • Hasta un servidor

– ¿Confiable? • DOS puntos de fallo

Page 23: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Múltiples servidores web

– Beneficios • El tráfico puede crecer más allá de la capacidad de un servidor

– Requerimientos

• Más máquinas

• Configurar balanceo de cargas

Page 24: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Balanceo de cargas utilizando DNS (DNS round robin)

• Registrar la lista de IPs en el DNS

• Balanceo de carga estadístico

• Los registros DNS son cacheados con TTL (Time To Live)

Page 25: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Balanceo de cargas utilizando DNS (DNS round robin)

• Registrar la lista de IPs en el DNS

• Balanceo de carga estadístico

• Los registros DNS son cacheados con TTL (Time To Live) • Downtime hasta que los registros DNS se propaguen

Page 26: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Balanceo de cargas utilizando DNS (DNS round robin)

– ¿Escalable? • Agregar más servidores web como sea necesario

– ¿Confiable? • No se puede redirigir tráfico rápidamente

• La base de datos aún es SPF

Page 27: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Balanceo de cargas utilizando reverse proxy

– Beneficios • Ruteo flexible

• Balanceo de carga a nivel aplicación

– Requerimientos • Más máquinas

• Configuración y código para proxies

Page 28: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Reverse proxy

– ¿Escalable? • Agregar más servidores web

• Especialización

• Limitado por – Capacidad de ruteo del proxy

– Una base de datos

– ¿Confiable? • Ruteo rápido a nivel de aplicación

• Componentes especializados son más robustos

• Múltiples proxies requieren ruteo a nivel de red – Balanceo de carga con DNS (DNS Round Robin)

– Hardware de ruteo de red

• Base de datos sigue siendo el SPF

Page 29: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Base de datos Maestro - Esclavo

– Beneficios • Mejor rendimiento de lectura

• Invisible a la aplicación

– Requerimientos • Aún más máquinas

• Cambios a MySQL

Page 30: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Base de datos Maestro - Esclavo

– ¿Escalable? • Escala el ratio de lectura con el número de servidores

• Pero no la escritura

– Requerimientos • Aún más máquinas

• Cambios a MySQL

Page 31: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Base de datos Maestro - Esclavo

– ¿Confiable? • Maestro es SPF para escrituras

• Maestro puede morir antes de replicarse

Page 32: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

• Base de datos particionada

– Beneficios – Escala el rendimiento en

lectura tanto en escritura como lectura

– Requerimientos – Aún más máquinas

– Mucha administración

– Re arquitectura del modelo de datos

– Reescribir consultas

Page 33: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Shared nothing (SN)

• Cada nodo independiente

• Eliminar SPFs

• Storage separado

• DB separada de web

• Cache

• Sesiones

Page 34: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿CLOUD COMPUTING?

Page 35: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

Cloud computing es un nuevo modelo de prestación de servicios de negocio y tecnología, que permite al

usuario acceder a un catálogo de servicios estandarizados y responder a las necesidades de su negocio, de forma flexible y adaptativa, en caso de

demandas no previsibles o de picos de trabajo, pagando únicamente por el consumo efectuado.

Wikipedia

Page 36: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

– Todo el trabajo de escalabilidad, alto rendimiento y alta disponibilidad esta a cargo del proveedor del servicio y totalmente abstraído del cliente – recursos abstraidos.

– Escalabilidad “instantánea”

– Capacidad de procesamiento y almacenamiento “ilimitado” - Capacidad elástica

– Software as Service

– Pago solo por lo que uso

– Dependencia de otras empresas proveedoras

– Ejemplos • Google app engine

• Amazon web services

• Azure de Microsoft

• Rackspace

Page 37: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento

¿

Page 38: Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta disponibilidad y alto rendimiento