Arquitectura de LinkedIn
Me ha resultado interesante ver como la arquitectura de una red social como LinkedIn (con 22 millones de usuarios), se basa plenamente en Solaris+Java. El post que aparece en CookiesAreForClosers recopila información de 2 sesiones que ha dado la gente de LinkedIn en JavaOne2008:
- LinkedIn – A Professional Social Network Built with Java™ Technologies and Agile Practices
- LinkedIn Communication Architecture
A modo de resumen (más info en el post original)
Estadísticas de uso
- 22 millones de miembros
- Más de 4 millones de visitantes únicos al mes
- 40 millones de páginas vistas al día
- 2 millones de búsquedas al día
- 250.000 invitaciones mandadas cada día
- 1 millón de respuestas posteadas
- 2 millones de mensajes de e-mail mandados al día
Software
- S.O. Solaris (en Sun x86 y Sparc)
- Tomcat y Jetty como servidores de aplicaciones
- No usan ORM (Object-relational mapping) tipo hibernate, acceden directamente a base de datos con JDBC
- Usan ActiveMQ (un gestor de mensajes de Apache) como para JMS (Java Messaging Sservice)
- Lucene para las búsquedas
- Spring como “pegamento”
A día de hoy la arquitectura de LinkedIn se organiza en torno a servicios que aglutinan partes consistentes de la lógica de negocio. Las WebApp todavía presentan la interfaz al usuario, pero ahora llaman a los servicios para manipular los perfiles, grupos, etc.
En el post original y las presentaciones hechas en JavaOne 2008 se profundiza bastante en la arquitectura. Casi lo que más interesante me parece son los consejos que dan cara a la escalabilidad:
- No puedes usar solo una base de datos. Utiliza muchas, particionándolas horizontal y verticalmente.
- Dados los particionados, olvídate acerca de la integridad de los JOINs interdominios.
- Olvidate del 100% de la integridad de los datos.
- A larga escala, los costes son un gran problema: hardware, bases de datos, licencias, almacenamiento, energía, etc.
- Una vez eres “importante”, los spammers y otros “piratillas” son una jodienda
- ¡Cache!
- Utiliza flujos asíncronos.
- La generación de informes y el análisis de los mismos es algo retador; considéralos una pieza fundamental a la hora de diseñar el sistema.
- Espera que el sistema falle.
- No subestimes tu trayectoria de crecimiento.