SlideShare una empresa de Scribd logo
1 de 68
Descargar para leer sin conexión
Social Erlang
Carlos Abalde
TPF’10 - Taller de Programación Funcional (PROLE’10)
7 de septiembre de 2010 - Valencia
Contenido

• Tuenti,Yo, el Universo, y Todo lo Demás
• Backend IM Casero
• Tuenti Chat
• Un Vistazo a Facebook
• Conclusiones
Tuenti,Yo, el Universo...
Tuenti, yo, el Universo...
• VoDKA: Video on Demand Kernel...
• ARMISTICE: Advanced Risk Management...
• Social FP,
   • Scala (Twitter), Haskel (Facebook)...
• Social Erlang,
   • Facebook, gitHub, last.fm... Tuenti
Fuente: Tuenti
Fuente: Tuenti
Fuente: Tuenti
Fuente: Tuenti
Fuente: Telefónica
Fuente: El Economista
Fuente: Google Zeitgeist
Fuente: Google Zeitgeist
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
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
Fuente: Tuenti
Fuente: Tuenti
Fuente: Chris Pesto
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
Es-ca-la-bi-li-dad

• Javascript + PHP
• Cache (CDNs, memcached)
• BD (MySQL, Hadoop)
• Monitorización & optimización
• Sistemas
Tuenti Chat
• HackMeUp
• Contexto,
   • Cuanto antes
   • Bajo coste
   • Integrado (p.e. listas de amigos)
   • 1M de usuarios chateando a la vez
   • Estable, escalable, etc.
Fuente: Tuenti
Backend IM Casero
                Fuente: Dale Mahalko
Prueba de concepto
• Long polling (Comet / AJAX server push)
• Maximizar #clientes por servidor
   • Medida coste económico
• Basado en MochiWeb (Erlang)
   • http://github.com/mochi/mochiweb
• Coste mensajes vs. coste notificaciones
Referencias

Richard Jones (last.fm)
“A Million-user Comet Application
with Mochiweb. Parts 1, 2 & 3”
http://www.metabrew.com
Gestor de conexiones

• Implementación MochiWeb básica
   • Broadcast cada 10 segundos
• < 50 líneas de código Erlang
• 10K clientes
• ~ 45 KB/cliente / ~ 1% CPU
⊕ router de mensajes
• Mensajería uno a uno
   • Nodos frontend HTTP & router
   • +K true +P 134217727
• < 140 líneas código Erlang
• 10K clientes & 1.000 mensajes/seg
• ~ 25 KB/cliente / ~ 1% CPU
⊕ router de mensajes




[erlang:garbage_collect(P) || P <- erlang:processes()].
                                               Fuente: Richard Jones
⊕ hibernación procesos

• Hibernación de clientes idle
 • erlang:hibernate(Module, Function, Args).
• < 140 líneas código Erlang
• 10K clientes & 1.000 mensajes/seg
• ~ 8 KB/cliente / ~ 1% CPU
⊕ hibernación procesos




                   Fuente: Richard Jones
⊕ pub/sub & libevent

• Publicación/subscripción de eventos
   • BD de contactos (mnesia)
   • Cambios de estado
• Nuevo gestor de conexiones
   • C-Node Erlang usando libevent
   • MochiWeb eliminado
⊕ pub/sub & libevent

• < 230 líneas Erlang + < 160 líneas C
• 1M clientes & 16.666 mensajes/seg
• ~ 2 KB/cliente / ~ 5% CPU
Conclusiones
Conclusiones
☺ Erlang es una opción viable
☺ ¡No serán necesarios meses desarrolando!
☺ ¡¡No es necesario un nuevo CPD!!
Tuenti Chat
              Fuente: Tuenti
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
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
Solución casera

✓ Eficiente, a medida & muy cool
✗ Costoso en tiempo
✗ Propenso a errores
✗ Implementación de clientes
✗ Mantenimiento
XMPP
• Extensible Messaging & Presence Protocol
• Estándar abierto & flexible
• Overhead backend
• Orientado a conexión
   • HTTP Polling: XEP-0025
   • HTTP Binding: XEP-0124 (long polling)
ejabberd
• ProcessOne
• Erlang + Open Source + Maduro + Activo
• Alternativas,
   • Openfire (Java)
   • Tigase (Java)
   • jabberd2 (C)
   • ...
Fuente: Process One
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)...
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
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
Optimizacion (y III)


• Controles extra,
   • Politicas de contención de paquetes de
      presencia (broadcasts)
   • ACLs bloqueo/desbloqueo
Adaptación

• Filtrado de funcionalidades
• API interna
• Autenticación ad-hoc C2S
• Nuevos paquetes S2S
• Broadcast de comandos de control
• Rate limiting
Despliegue (I)

• Infraestructura sistemas,
    • Configuración de red compleja
    • Balanceadores
• Métricas client y server side
Despliegue (y II)
• Dark launch (1 semana)
   • Reconexiones, mensajes & cambios de
      estado ocultos
   • Iteraciones & monitorización
• Cuellos de botella en procesos S2S
   • Presence probes
• Apertura progresiva durante 24h
Fuente: John Martz
Un Vistazo a Facebook
                    Fuente: Facebook
- MochiWeb es usada
para la gestión del
número masivo de
conexiones long polling
en los channel ser vers.




                           Fuente: Carlos Abalde @ Facebook
- MochiWeb es usada
para la gestión del
número masivo de
conexiones long polling
en los channel ser vers.




                           Fuente: Carlos Abalde @ Facebook
- MochiWeb es usada
para la gestión del
número masivo de
conexiones long polling
en los channel ser vers.




                           Fuente: Carlos Abalde @ Facebook
Referencias

“Facebook Engineering’s Notes”
http://www.facebook.com

Chris Piro y Eugene Letuchy
“Functional Programming at Facebook”
Commercial Users of Functional Programming
4 de septiembre de 2009
Fuente: Chris Piro & Eugene Letuchy
Fuente: Chris Piro & Eugene Letuchy
Fuente: Chris Piro & Eugene Letuchy
Fuente: Chris Piro & Eugene Letuchy
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
Componentes (I)
• Servidores de canales (Erlang)
   • MochiWeb
   • Enrutamiento de mensajes
   • Una cola/proceso por usuario
   • Particionamiento por user id
   • Un cluster por partición
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)
Componentes (y III)
• Frontales XMPP (Erlang)
   • ejabberd
   • Introducido en una segunda fase
• Thrift
   • Framework RPC eficiente
   • Integración de componentes
Conclusiones
               Fuente: Open Source Erlang
Erlang (I)

✓ Escala masiva & paralelismo baratos
✓ Implementacion natural
    • 1 usuario - 1 proceso
✓ Distribución natural
✓Ágil (i.e. centrado en el problema)
✓ Aislamiento de bugs
Fuente: Twitter
Fuente: Twitter
Erlang (y III)
✗ Punto único de fallo
   • Resolución de bugs
   • Reconfiguraciones
   • Situaciones de emergencia
✗ Utilidades de despliegue separadas
✗ Infraestructura diferente
http://jobs.tuenti.com
TPF ! gracias

Más contenido relacionado

Similar a Social Erlang

Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorAlberto Gimeno
 
Barcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
Barcamp v5 by Jose ToNy Verdin at Culiacan SinaloaBarcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
Barcamp v5 by Jose ToNy Verdin at Culiacan SinaloaJose Antonio Chavez Verdin
 
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Antonio Ognio
 
Aplicaciones Big Data Marketing
Aplicaciones Big Data MarketingAplicaciones Big Data Marketing
Aplicaciones Big Data MarketingStratebi
 
como realmente_trabaja_internet
 como realmente_trabaja_internet como realmente_trabaja_internet
como realmente_trabaja_internetJhoni Guerrero
 
Markos calderon lecciones aprendidas del desarrollo de un sistema de web co...
Markos calderon   lecciones aprendidas del desarrollo de un sistema de web co...Markos calderon   lecciones aprendidas del desarrollo de un sistema de web co...
Markos calderon lecciones aprendidas del desarrollo de un sistema de web co...StarTech Conference
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Socialmetrix
 
Tuenti - tu entidad
Tuenti -  tu entidadTuenti -  tu entidad
Tuenti - tu entidadTuenti
 
Aplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalRAplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalRRodolfo Finochietti
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012Asier Marqués
 
Flowics - Jornada en Big Data 2016 - ITBA
Flowics - Jornada en Big Data 2016 - ITBA Flowics - Jornada en Big Data 2016 - ITBA
Flowics - Jornada en Big Data 2016 - ITBA Andres Moratti
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosEmmanuel Fortuna
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaDomingo Suarez Torres
 
Symfony y 3 millones de usuarios, nuestro dia a dia
Symfony y 3 millones de usuarios, nuestro dia a diaSymfony y 3 millones de usuarios, nuestro dia a dia
Symfony y 3 millones de usuarios, nuestro dia a diaJordi Llonch
 
Argentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting
 
Documertar APIs - Meetup.js
Documertar APIs - Meetup.jsDocumertar APIs - Meetup.js
Documertar APIs - Meetup.jsEzequiel Rial
 
Oliver Montes - Chatbots para programadores y gestores eCommerce
Oliver Montes - Chatbots para programadores y gestores eCommerceOliver Montes - Chatbots para programadores y gestores eCommerce
Oliver Montes - Chatbots para programadores y gestores eCommerceMage Titans ES
 

Similar a Social Erlang (20)

Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
Barcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
Barcamp v5 by Jose ToNy Verdin at Culiacan SinaloaBarcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
Barcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
 
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
Desarrollo ágil de sistemas distribuidos con Python empleando la arquitectura...
 
Aplicaciones Big Data Marketing
Aplicaciones Big Data MarketingAplicaciones Big Data Marketing
Aplicaciones Big Data Marketing
 
como realmente_trabaja_internet
 como realmente_trabaja_internet como realmente_trabaja_internet
como realmente_trabaja_internet
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
Markos calderon lecciones aprendidas del desarrollo de un sistema de web co...
Markos calderon   lecciones aprendidas del desarrollo de un sistema de web co...Markos calderon   lecciones aprendidas del desarrollo de un sistema de web co...
Markos calderon lecciones aprendidas del desarrollo de un sistema de web co...
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
Tuenti - tu entidad
Tuenti -  tu entidadTuenti -  tu entidad
Tuenti - tu entidad
 
Aplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalRAplicaciones Real-Time con SignalR
Aplicaciones Real-Time con SignalR
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
 
Flowics - Jornada en Big Data 2016 - ITBA
Flowics - Jornada en Big Data 2016 - ITBA Flowics - Jornada en Big Data 2016 - ITBA
Flowics - Jornada en Big Data 2016 - ITBA
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
Grails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta cargaGrails, opción real y escalable para sitios web de alta carga
Grails, opción real y escalable para sitios web de alta carga
 
Symfony y 3 millones de usuarios, nuestro dia a dia
Symfony y 3 millones de usuarios, nuestro dia a diaSymfony y 3 millones de usuarios, nuestro dia a dia
Symfony y 3 millones de usuarios, nuestro dia a dia
 
Introducción a HTML5
Introducción a HTML5Introducción a HTML5
Introducción a HTML5
 
Argentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimoArgentesting 2019 - Por que-python-esta-buenisimo
Argentesting 2019 - Por que-python-esta-buenisimo
 
Intranet por Monono
Intranet por MononoIntranet por Monono
Intranet por Monono
 
Documertar APIs - Meetup.js
Documertar APIs - Meetup.jsDocumertar APIs - Meetup.js
Documertar APIs - Meetup.js
 
Oliver Montes - Chatbots para programadores y gestores eCommerce
Oliver Montes - Chatbots para programadores y gestores eCommerceOliver Montes - Chatbots para programadores y gestores eCommerce
Oliver Montes - Chatbots para programadores y gestores eCommerce
 

Último

PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptxCamuchaCrdovaAlonso
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024IES Vicent Andres Estelles
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOluismii249
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...JoseMartinMalpartida1
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfcarolinamartinezsev
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024IES Vicent Andres Estelles
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesMarisolMartinez707897
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONamelia poma
 
prostitución en España: una mirada integral!
prostitución en España: una mirada integral!prostitución en España: una mirada integral!
prostitución en España: una mirada integral!CatalinaAlfaroChryso
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxBeatrizQuijano2
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalJonathanCovena1
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOluismii249
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCCarlosEduardoSosa2
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...jlorentemartos
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfapunteshistoriamarmo
 

Último (20)

PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptxPLAN LECTOR 2024  integrado nivel inicial-miercoles 10.pptx
PLAN LECTOR 2024 integrado nivel inicial-miercoles 10.pptx
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
PP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomasPP_Comunicacion en Salud: Objetivación de signos y síntomas
PP_Comunicacion en Salud: Objetivación de signos y síntomas
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACIONRESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
RESOLUCIÓN VICEMINISTERIAL 00048 - 2024 EVALUACION
 
prostitución en España: una mirada integral!
prostitución en España: una mirada integral!prostitución en España: una mirada integral!
prostitución en España: una mirada integral!
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptx
 
Los dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la VerdadLos dos testigos. Testifican de la Verdad
Los dos testigos. Testifican de la Verdad
 
La Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración AmbientalLa Sostenibilidad Corporativa. Administración Ambiental
La Sostenibilidad Corporativa. Administración Ambiental
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 

Social Erlang

  • 1. Social Erlang Carlos Abalde TPF’10 - Taller de Programación Funcional (PROLE’10) 7 de septiembre de 2010 - Valencia
  • 2. Contenido • Tuenti,Yo, el Universo, y Todo lo Demás • Backend IM Casero • Tuenti Chat • Un Vistazo a Facebook • Conclusiones
  • 4. Tuenti, yo, el Universo... • VoDKA: Video on Demand Kernel... • ARMISTICE: Advanced Risk Management... • Social FP, • Scala (Twitter), Haskel (Facebook)... • Social Erlang, • Facebook, gitHub, last.fm... Tuenti
  • 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
  • 19. Es-ca-la-bi-li-dad • Javascript + PHP • Cache (CDNs, memcached) • BD (MySQL, Hadoop) • Monitorización & optimización • Sistemas
  • 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.
  • 22. Backend IM Casero Fuente: Dale Mahalko
  • 23. Prueba de concepto • Long polling (Comet / AJAX server push) • Maximizar #clientes por servidor • Medida coste económico • Basado en MochiWeb (Erlang) • http://github.com/mochi/mochiweb • Coste mensajes vs. coste notificaciones
  • 24. Referencias Richard Jones (last.fm) “A Million-user Comet Application with Mochiweb. Parts 1, 2 & 3” http://www.metabrew.com
  • 25. Gestor de conexiones • Implementación MochiWeb básica • Broadcast cada 10 segundos • < 50 líneas de código Erlang • 10K clientes • ~ 45 KB/cliente / ~ 1% CPU
  • 26. ⊕ router de mensajes • Mensajería uno a uno • Nodos frontend HTTP & router • +K true +P 134217727 • < 140 líneas código Erlang • 10K clientes & 1.000 mensajes/seg • ~ 25 KB/cliente / ~ 1% CPU
  • 27. ⊕ router de mensajes [erlang:garbage_collect(P) || P <- erlang:processes()]. Fuente: Richard Jones
  • 28. ⊕ hibernación procesos • Hibernación de clientes idle • erlang:hibernate(Module, Function, Args). • < 140 líneas código Erlang • 10K clientes & 1.000 mensajes/seg • ~ 8 KB/cliente / ~ 1% CPU
  • 29. ⊕ hibernación procesos Fuente: Richard Jones
  • 30. ⊕ pub/sub & libevent • Publicación/subscripción de eventos • BD de contactos (mnesia) • Cambios de estado • Nuevo gestor de conexiones • C-Node Erlang usando libevent • MochiWeb eliminado
  • 31. ⊕ pub/sub & libevent • < 230 líneas Erlang + < 160 líneas C • 1M clientes & 16.666 mensajes/seg • ~ 2 KB/cliente / ~ 5% CPU
  • 33. Conclusiones ☺ Erlang es una opción viable ☺ ¡No serán necesarios meses desarrolando! ☺ ¡¡No es necesario un nuevo CPD!!
  • 34. Tuenti Chat Fuente: Tuenti
  • 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
  • 38. XMPP • Extensible Messaging & Presence Protocol • Estándar abierto & flexible • Overhead backend • Orientado a conexión • HTTP Polling: XEP-0025 • HTTP Binding: XEP-0124 (long polling)
  • 39. ejabberd • ProcessOne • Erlang + Open Source + Maduro + Activo • Alternativas, • Openfire (Java) • Tigase (Java) • jabberd2 (C) • ...
  • 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
  • 46. Despliegue (I) • Infraestructura sistemas, • Configuración de red compleja • Balanceadores • Métricas client y server side
  • 47. Despliegue (y II) • Dark launch (1 semana) • Reconexiones, mensajes & cambios de estado ocultos • Iteraciones & monitorización • Cuellos de botella en procesos S2S • Presence probes • Apertura progresiva durante 24h
  • 49. Un Vistazo a Facebook Fuente: Facebook
  • 50. - MochiWeb es usada para la gestión del número masivo de conexiones long polling en los channel ser vers. Fuente: Carlos Abalde @ Facebook
  • 51. - MochiWeb es usada para la gestión del número masivo de conexiones long polling en los channel ser vers. Fuente: Carlos Abalde @ Facebook
  • 52. - MochiWeb es usada para la gestión del número masivo de conexiones long polling en los channel ser vers. Fuente: Carlos Abalde @ Facebook
  • 53. Referencias “Facebook Engineering’s Notes” http://www.facebook.com Chris Piro y Eugene Letuchy “Functional Programming at Facebook” Commercial Users of Functional Programming 4 de septiembre de 2009
  • 54. Fuente: Chris Piro & Eugene Letuchy
  • 55. Fuente: Chris Piro & Eugene Letuchy
  • 56. Fuente: Chris Piro & Eugene Letuchy
  • 57. Fuente: Chris Piro & Eugene Letuchy
  • 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
  • 62. Conclusiones Fuente: Open Source Erlang
  • 63. Erlang (I) ✓ Escala masiva & paralelismo baratos ✓ Implementacion natural • 1 usuario - 1 proceso ✓ Distribución natural ✓Ágil (i.e. centrado en el problema) ✓ Aislamiento de bugs
  • 66. Erlang (y III) ✗ Punto único de fallo • Resolución de bugs • Reconfiguraciones • Situaciones de emergencia ✗ Utilidades de despliegue separadas ✗ Infraestructura diferente