alto rendimiento y escalabilidad en plataformas rails: casos prácticos. soluciones y trucos

49
Alto rendimiento y escalabilidad en plataformas Rails Fernando Blat [email protected] Luis Bosque [email protected] Daniel Blanco [email protected]

Upload: luis-bosque

Post on 14-Dec-2014

2.212 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 2: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

¿Pero esto podemos hacerlo con Rails?

Page 3: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

YES, WE CAN!Foto: Peter Yang para Rolling Stone

Page 4: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

¿Cómo?

Page 5: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Monitorización!• Logs

• Gráficas

Page 6: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Logs

• Repositorio común de logs (Data mining)

• syslog-ng

• Generación de Informes

• production_log_analyzer

• SlowQueries

Page 7: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Análisis de gráficas

• Identificación de patrones de comportamiento

• Reconocer síntomas

Page 8: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Crisis? What Crisis?

Page 9: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• Carga Elevada

Page 10: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• Elevado número de conexiones

Page 11: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• Slow Queries

Page 12: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• IOstat

Page 13: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• Uso intensivo de CPU

Page 14: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Reconociendo Síntomas• Swap

Page 15: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa Web

Page 16: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• Primero fue Lightp(httpd) con FastCGI

• Luego Apache + Mongrel

• El módulo mod_proxy_balancer de apache no hace balanceo inteligente: round-robin

• Aparece HAProxy

• Entre Apache y Mongrels

• Distribuye las requests en base a las encoladas por los mongrels

Capa Web

Page 17: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• fair_proxy_balancer

• Se mantiene en memoria el nivel de ocupación de los backends

• Balanceo inteligente

Page 18: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• Alta disponibilidad entre servidores web

• Failover

Capa Web

Virtual IP

Page 19: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• Para aprovechar la máquina:

• Varios Dominios

• Instancias Virtuales

• Importante: Configuración del servidor web para entrega de estáticos

Capa Web

Page 20: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa de Aplicación

Page 21: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• Almacenamiento en red

• SAN / NAS

• S3

Compartiendo Estáticos

Page 22: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Caché, Caché, Caché!!!!!

Page 23: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa de Datos

Page 24: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa de Datos• Máquinas dedicadas

• Esquemas Maestro/Esclavo

• Tablas InnoDB:

• Evitar Bloqueos

• Busquedas:

• Eliminar FULL TEXT KEYS

• Indexado con Sphinx

• Importante: Ajuste parámetros de configuración

Page 25: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa de Datos• Replicación MySQL no es suficiente

• Failover manual

• Cluster MySQL

• Muy escalable, pero configuración compleja y procesos manuales

• MySQL Proxy

• Replicación DRBD + Replicación MySQL

• Configuración sencilla. Failover automático. Escalable (salvo aplicaciones con muchas consultas de escritura)

Page 26: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Capa de Datos

• Escalado Sencillo

• Failover Automático

• Balanceo de Consultas

Texto

Virtual IP

Esclavos

Activo Pasivo

Page 27: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Entonces, podemos tener alta redundancia para la base de datos?

Page 28: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Virtual IP

Esclavos

Activo Pasivo

Mongrel Cluster

+Mongrel Cluster

+Mongrel Cluster

+

Web

App

Datos

Page 29: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Infraestructura

Page 30: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

• Memcached

• Virtualización

Page 31: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Memcached• Sistema de almacenamiento de objetos en

memoria de forma distribuida.

• Fundamental para escalar:

• Sesiones

• Fragmentos

• Consultas lentas

• NGINX + Memcached

Page 32: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Query Memcached

• almacenar resultado de una consulta a base de datos en Memcached

• cada tabla tiene un número de versión y dicha versión se añade a la query y se genera un MD5 como clave de Memcached

• expirar ese número de versión al ejecutar cualquier query que no sea un SELECT

Page 33: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Virtualización

• Mayor aprovechamieno de los recursos de hardware.

• Fácil migración en caso de fallo de una instancia.

• Arranque bajo demanda

• Redundancia y tolerancia a fallos hardware si la instancia se almacena en red

Page 34: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Amazon S3

• Servidores Europa vs USA

• MD5 en nombre de fichero o ETAG para cachear sin tiempo de expiracion.

• http://lcp.s3.amazonaws.com/blat%2Ff%2F5e3d6c54c094b0cfe15d3021dc17fe1e

Page 35: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Amazon EC2

• Máquinas bajo demanda

• Gestión remota con Elastic Cloud y gema Amazon EC2

Page 36: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

EC2: evitando regenerar imágenes

• Todo está en modo RO, excepto /usr/local, que es un repositorio de GIT

• enlaces simbólicos donde haga falta

• al arrancar la máquina hace un git pull y se ejecuta un script

• una rama por feature, y merges de ramas para combinar features

Page 37: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Merb

• Comunicación por HTTP y claves para asegurar la autenticidad de los datos.

• No cargamos ningún modelo de ActiveRecord para evitar inconsistencias (DRY!!) y el monothreading

Page 38: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Rompiendo convenciones

Page 39: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Sistemas de colas • Evitar ralentizar la respuesta al usuario:

Importante: cuidado con observers, sweepers, envíos de email, notificaciones remotas...

• Flickr Engineers Do It Offline

• Algunos sistemas:

• Delayed Jobs

• Starling

• ActiveMQ + Ruby Stomp

Page 40: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Datos en memoria

• Carga anticipada de datos

• Base de datos + buffer de datos (Memcached):

• inserción de datos en memoria

• datos más frecuentes en memoria

Page 41: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Renderizado en segundo plano

• el renderizado es una de las tareas más pesadas, superado el cuello de la base de datos

• Erubis: implementación en C puro de ERB con algunas características interesantes: caché, preprocesado, fácil de extender, sintaxis 100% compatible, rápido

• Renderizar en segundo plano y guardar en caché

• Combinar este renderizado con la carga de datos anticipada

Page 42: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Paginación

• Sólo interesan los primeros resultados

• Evitamos mostrar el total exacto de páginas

• Precargamos la página actual y las N siguientes

• Cuando estamos en la N - 1 cargamos la N + 1 y las siguientes

Page 43: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

Recursos, referencias y bla, bla ,bla...

Page 47: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

¡Gracias!

Page 48: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

no, en serio..¡¡Muchas gracias!!

Page 49: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos

¿Quieres trabajar en The Cocktail?

Envíanos tu C.V. a [email protected]

http://www.the-cocktail.com