aNieto2k me ha pasado (así, sin nada, ni un comentario ¿indirecta para que traduzca? :-P) por correo el enlace a la última entrada de High Scalability que trata sobre la arquitectura de Digg.
Y es que el Martes sin ir más lejos ya mencione éste sitio por el tema de la arquitectura de Youtube. Así que allá vamos:
Digg soporta 1.2 millones de usuarios con un alto nivel de páginas vistas sedientos de información, sin embargo la arquitectura de Digg se podría definir como "simplista".
Digg funciona bajo un LAMP clásico de Linux-Apache-MySQL y PHP junto a Lucene (un motor de búsqueda de alto rendimiento de Apache), MCache 2.0 y APC.
Empezaron en el 2004 con un solo servidor con GNU/Linux, Apache 1.3, PHP 4 y MySQL 4.0 usando MyISAM como sistema por defecto para la base de datos. Ahora con 200 millones de páginas vistas al mes y 30GB de datos reparten la carga entre 100 servidores en múltiples centros de datos.
Llama la atención tanto la cantidad como que de los 100 servidores, 20 son de bases de datos, 30 para servidores web, unos pocos para Lucene y el resto para redundancia.
Ninguno de los retos de escalabilidad que han tenido que afrontar ha sido con PHP. Los mayores problemas han sido relacionados a tema de base de datos. La naturaleza ligera de PHP ha permitido mover tareas de la base de datos a PHP para mejorar la escalabilidad. Ebay hace esto mismo de forma radical. Han movido casi todo el trabajo fuera de la base de datos hacia aplicaciones, incluyendo uniones (joins), un trabajo que normalmente hace la base de datos.
Los puntos más interesantes de la parte interna de Digg son:
- Se hace balanceo de carga a la hora de enviar querys a servidores PHP.
- Se usa MySQL en una configuración maestro-esclavo.
- Los servidores de transacciones pesadas usan InnoDB.
- Los servidores de transacciones pesadas OLAP usan MyISAM.
- Al migrar de MySQL 4.1 a 5 no han notado ninguna degradación del rendimiento.
- Se usa Memcached para el cache.
- El sharding al igual que en YouTube está presente para dividir la base de datos en partes más pequeñas.
- El patrón de comportamiento de uso en Digg ayuda a escalar. Mucha gente ve la página principal y se va. Por ello el 98% de los accesos a la base de datos de Digg son lecturas. Esto permite no tener que preocuparse mucho para generar una arquitectura compleja para optimizar las escrituras, por lo tanto es mucho más fácil escalar el sitio.
La parte más interesante sin duda son algunos puntos de la sección de lecciones aprendidas:
- Afina MySQL para el motor de base de datos de tu elección. Usa InnoDB cuando necesites transacciones y MyISAM cuando no. Por ejemplo, las tablas transaccionales del master pueden usar MyISAM para los slaves de solo lectura.
- En cierto punto de la curva de crecimiento se vuelve imposible crecer añadiendo más RAM, toca crecer en arquitectura.
- La gente a menudo dice que Digg es lento. Esto es debido al uso de las -- muchas -- bibliotecas Javascript y no a la arquitectura del backend.
- Las características nuevas pueden matar el rendimiento, hay que tener cuidado en no lanzar aplicaciones que usan mucha CPU. Los ingenieros a menudo tienen muchas buenas novedades que quieren lanzar, pero estas novedades pueden arrasar con la infraestructura si no crece de forma uniforme al nuevo consumo. Es mejor dejarlas fuera hasta que el sistema pueda soportarlas.
- La capa de datos es donde más problemas de rendimiento y escalabilidad se encuentran. Y esto pasa usando Java, PHP, Ruby o inserta aquí tu lenguaje favorito.
Comentarios