Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.
-
Upload
luis-bosque -
Category
Technology
-
view
2.213 -
download
1
description
Transcript of Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.
![Page 1: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/1.jpg)
Alto rendimiento y escalabilidad
en plataformas RailsFernando Blat
[email protected] Bosque
[email protected] Blanco
![Page 2: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/2.jpg)
¿Pero esto podemos hacerlo con Rails?
![Page 3: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/3.jpg)
YES, WE CAN!Foto: Peter Yang para Rolling Stone
![Page 4: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/4.jpg)
¿Cómo?
![Page 5: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/5.jpg)
Monitorización!• Logs
• Gráficas
![Page 6: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/6.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/7.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/8.jpg)
Crisis? What Crisis?
![Page 9: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/9.jpg)
Reconociendo Síntomas• Carga Elevada
![Page 10: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/10.jpg)
Reconociendo Síntomas• Elevado número de conexiones
![Page 11: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/11.jpg)
Reconociendo Síntomas• Slow Queries
![Page 12: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/12.jpg)
Reconociendo Síntomas• IOstat
![Page 13: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/13.jpg)
Reconociendo Síntomas• Uso intensivo de CPU
![Page 14: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/14.jpg)
Reconociendo Síntomas• Swap
![Page 15: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/15.jpg)
Capa Web
![Page 16: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/16.jpg)
• 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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/17.jpg)
• 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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/18.jpg)
• 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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/19.jpg)
• 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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/20.jpg)
Capa de Aplicación
![Page 21: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/21.jpg)
• Almacenamiento en red
• SAN / NAS
• S3
Compartiendo Estáticos
![Page 22: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/22.jpg)
Caché, Caché, Caché!!!!!
![Page 23: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/23.jpg)
Capa de Datos
![Page 24: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/24.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/25.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/26.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/27.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/28.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/29.jpg)
Infraestructura
![Page 30: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/30.jpg)
• Memcached
• Virtualización
![Page 31: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/31.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/32.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/33.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/34.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/35.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/36.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/37.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/38.jpg)
Rompiendo convenciones
![Page 39: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/39.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/40.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/41.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/42.jpg)
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.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/43.jpg)
Recursos, referencias y bla, bla ,bla...
![Page 44: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/44.jpg)
• Erubis: http://www.kuwata-lab.com/erubis/
• Flickr Engineers Do It Offline: http://code.flickr.com/blog/2008/09/26/flickr-engineers-do-it-offline/
• Query Memcached: http://github.com/ferblape/query_memcached/tree/master
• ActiveMQ: http://activemq.apache.org/
• Stomp: http://github.com/grempe/stomp/tree/master
![Page 45: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/45.jpg)
• New Relic: http://www.newrelic.com/
• Query Reviewer: http://code.google.com/p/query-reviewer/
• Mongrel Proctitle: http://purefiction.net/mongrel_proctitle/
• Production log analyzer: http://rails-analyzer.rubyforge.org/
• syslog-ng: http://www.balabit.com/network-security/syslog-ng/opensource-logging-system/
![Page 46: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/46.jpg)
• Nginx and Memcached, a 400% boost!: http://www.igvita.com/2008/02/11/nginx-and-memcached-a-400-boost/
• MySQL Proxy: http://forge.mysql.com/wiki/MySQL_Proxy
![Page 47: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/47.jpg)
¡Gracias!
![Page 48: Alto rendimiento y escalabilidad en plataformas Rails: Casos prácticos. Soluciones y trucos.](https://reader034.fdocuments.in/reader034/viewer/2022051514/548d61b2b47959d5328b45e5/html5/thumbnails/48.jpg)
no, en serio..¡¡Muchas gracias!!