Escalando Twitter

Hace ya un par de meses la gente de HighScalability publicaba un artículo muy interesante acerca de cómo la gente de Twitter se lo habían montado para ser capaces de escalar su plataforma para hacerla un 10.000% más rápida. El artículo es muy extenso, y merece la pena dedicar tiempo a leerlo a fondo (si uno está interesado en estos temas). Resumo alguno de los aspectos y últimas modificaciones de Twitter para lograr este objetivo.
Estadísticas iniciales
  • Sobre 350.000 usuarios (cuando comenzaron los problemas de escalabilidad). Los datos más recientes no se conocen a ciencia cierta, aunque tienen que andar por encima de los 10 millones de usuarios registrados.
  • 600 peticiones por segundo
  • 200-300 conexiones por segundo en media, con picos de 800.
  • MySQL atendiendo 2.400 peticiones por segundo
  • 180 instancias Rails, usando Mongrel como servidor web
  • 1 servidor MySQL (con 8 cores) y 1 esclavo para estadísticas e informes.
  • Más de 30 procesos para tareas rutinarias
  • 8 máquinas Sun X4100S
  • Rails tarda 200 milisegundos en procesar cada petición
  • El tiempo medio empleado por la base de datos está entre 50 y 100 milisegundos
  • Sobre 16GB de Memcahed
Plataforma
  • Ruby on Rails
  • Erlang
  • MySQL
  • Mongrel
  • Nagios
  • Google Analytics
  • AWStats
  • Memcached
Algunos pasos a tomar
  • Indexa todo, para cada atributo en una clásula WHERE de una sentencia SQL, mete un índice
  • Desnormaliza todo lo que puedas
  • “No seas estúpido”: si tu aplicación hace cosas muy complicadas, como consultas del tipo “…like ‘%#{search}%”, vas realmente apañado. Nada de joins complejos ni de recorrer grandes conjuntos de datos
  • Cachea todo lo que puedas, especialmente los accesos desde el API
  • Manten tu aplicación fácilmente particionable desde el principio
  • La mayoría de las cosas no dependen tanto del lenguaje, si no de la arquitectura del sistema
Un consejo menos técnico, pero no menos importante

Trata tu plan de escalabilidad como si fuera un plan de negocio; reúne un consejo de expertos para que te aporten ideas y consejos
Algunos pasos en la evolución del escalado de Twitter

Personalmente, el que ahora todo esté en RAM es uno de los aspectos que más me llaman la atención, aunque tiene sentido, sobre todo teniendo en cuenta el coste actual de la RAM, las posibilidades que abren las arquitecturas de 64 bits y, sobre todo, que realmente Twitter no maneja tantos datos (comparado con el volumen que gestionan redes sociales más completas como Facebook).