El recorrido de escalamiento de Pinterest
El proceso de escalamiento de Pinterest se divide en cuatro etapas:
- La era del autodescubrimiento: un pequeño equipo de ingeniería manejó la creación rápida de prototipos y los requisitos cambiantes del producto.
- La era de la experimentación: el crecimiento acelerado de usuarios exigió escalar rápidamente, pero eso llevó a un sistema complejo y frágil.
- La era de la madurez: simplificaron la arquitectura usando tecnologías maduras y escalables como MySQL, Memcache y Redis.
- La era de la regresión: una vez que tuvieron la arquitectura adecuada, continuaron creciendo mediante escalamiento horizontal.
Tecnologías clave
Pinterest priorizó tecnologías centradas en la confiabilidad, la facilidad de comprensión y la escalabilidad:
- MySQL: una base de datos relacional estable y fácil de mantener.
- Memcache: almacena en memoria caché los datos a los que se accede con frecuencia para descargar lecturas de la base de datos.
- Redis: un almacén de datos flexible capaz de manejar varias estructuras de datos.
- Solr: una plataforma de búsqueda lista para usar rápidamente.
Escalamiento de base de datos: clustering vs sharding
Pinterest consideró dos enfoques para distribuir su base de datos:
Clustering
- Cuando llegan los datos, se determina el nodo óptimo y los datos se replican en varios nodos.
- Tiene ventajas como autoescalado, facilidad de configuración y garantía de disponibilidad de datos, pero también desventajas como complejidad, falta de madurez y dificultad para actualizar.
Sharding
- Divide los datos en fragmentos pequeños y coloca cada fragmento en un servidor independiente.
- Tiene ventajas como una arquitectura simple, escalamiento independiente y propiedad clara de los datos, pero también desventajas como la imposibilidad de hacer joins y transacciones a nivel de base de datos, además de una mayor complejidad en la aplicación.
Pinterest eligió sharding debido a su experiencia negativa con clustering.
Transición a una arquitectura con sharding
Pinterest hizo la transición gradualmente a sharding durante un congelamiento de funcionalidades:
- Eliminar joins: eliminaron todos los joins de MySQL y aprovecharon la desnormalización de datos y el caché.
- Sharding basado en ID: aplicaron sharding con base en IDs de 64 bits para simplificar el enrutamiento de datos.
Desventajas del sharding y soluciones
- Scripts de migración: transferir datos a la infraestructura de sharding consumía mucho tiempo.
- Lógica de aplicación: fue necesario mantener la consistencia de los datos ante la ausencia de joins y transacciones a nivel de base de datos.
- Modificación de esquema: planificaron y aplicaron cambios de esquema en todos los shards.
- Generación de reportes: generaron reportes unificando varios shards.
Lecciones
Las principales lecciones del recorrido de escalamiento de Pinterest:
- La simplicidad importa: elegir tecnologías fáciles de entender ayuda a resolver problemas y reducir riesgos.
- La escalabilidad primero: en entornos de crecimiento acelerado, priorizar la escalabilidad incluso si eso implica sacrificar funciones de base de datos.
- Diseñar para escalamiento horizontal: elegir una arquitectura que permita agregar recursos a medida que crece la base de usuarios.
Aún no hay comentarios.