13. Company profile at LinkedIn:
Tuenti is the most trafficked
website in Spain, and the
country's leading private social
platform.
Based in Madrid, Tuenti has rapidly
grown in three years with millions
of active daily users and was one
of the most searched terms in
2008 and 2009 in Google's
annual zeitgeist.
Fuente: Google Zeitgeist
14. Company profile at LinkedIn:
Tuenti is the most trafficked
website in Spain, and the
country's leading private social
platform.
Based in Madrid, Tuenti has rapidly
grown in three years with millions
of active daily users and was one
of the most searched terms in
2008 and 2009 in Google's
annual zeitgeist.
Fuente: Google Zeitgeist
18. Tuenti en números
• Más de 8M usuarios
• 25.000M páginas vistas / mes (2Gbps)
• 3M fotografías subidas / día
• 2.500M imágenes servidas / día (6 Gbps) - Imágenes vía
CDN. En pico
• 100M mensajes chat / día
más de 6 Gbps,
70K hits/seg.
• 72 minutos usuario / día
• 1 CPD con más de 1.000 servidores
20. Tuenti Chat
• HackMeUp
• Contexto,
• Cuanto antes
• Bajo coste
• Integrado (p.e. listas de amigos)
• 1M de usuarios chateando a la vez
• Estable, escalable, etc.
35. Contexto
• Escalable, estable, bla bla bla... :)
• 1M usuarios conectados y charlando
• ~1 diseñador + ~1 FE + ~1 BE + ~0,5 SE
• Urgente (i.e. Facebok ya tiene el suyo)
• 1/2 meses análisis/benchmarking +
1/2 meses implementación/despliegue
36. Integración
• Backend existente (listas de amigos,
bloqueos, borrados, autenticación...)
• Frontends existentes (web) y futuros
(iPhone, Android, JME, BlackBerry...)
• Clientes desktop
• Federación con otros servicios
• Sin persistencia de datos
37. Solución casera
✓ Eficiente, a medida & muy cool
✗ Costoso en tiempo
✗ Propenso a errores
✗ Implementación de clientes
✗ Mantenimiento
41. Benchmarking
• Parámetros,
• Tamaño del roster
• Frecuencia de las reconexiones
• Volumen de mensajes
• Picos de tráfico
• ¿Cómo?
• Tsung, Jabsimul, ad-hoc (Erlang, C)...
42. Optimización (I)
• Particionamiento en dos niveles,
1. Ubicación geográfica
2. Id de usuario (mod vs. rangos)
• Partición dominios XMPP en varias VMs
+ Disponibilidad
+ Mantenibilidad
• Migraciones transparentes entre VMs
43. Optimización (II)
• Recolecciones de basura e hibernaciones
de procesos explícitas
• Compactación de Jabberd ids
•xmpp{d+}.tuenti.com
• Parseado XML frontend XEP-0124
• Cross-domain
44. Optimizacion (y III)
• Controles extra,
• Politicas de contención de paquetes de
presencia (broadcasts)
• ACLs bloqueo/desbloqueo
45. Adaptación
• Filtrado de funcionalidades
• API interna
• Autenticación ad-hoc C2S
• Nuevos paquetes S2S
• Broadcast de comandos de control
• Rate limiting
58. Tipos de interacción
↦ Envío de mensajes
• AJAX estándar ~ Tuenti
↤ Recepción de mensajes
• Long polling vía AJAX ~ Tuenti
⟳ Actualizaciones del roster
• Polling periódico vía AJAX
59. Componentes (I)
• Servidores de canales (Erlang)
• MochiWeb
• Enrutamiento de mensajes
• Una cola/proceso por usuario
• Particionamiento por user id
• Un cluster por partición
60. Componentes (II)
• Servidores de presencia (C++)
• Agregación de usuarios & estados
• Servidores de logging (C++)
• Recarga de estado entre clicks
• Facebook vs. Tuenti (100% AJAX)
61. Componentes (y III)
• Frontales XMPP (Erlang)
• ejabberd
• Introducido en una segunda fase
• Thrift
• Framework RPC eficiente
• Integración de componentes
66. Erlang (y III)
✗ Punto único de fallo
• Resolución de bugs
• Reconfiguraciones
• Situaciones de emergencia
✗ Utilidades de despliegue separadas
✗ Infraestructura diferente