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 backend IM

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 backend IM (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

La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxJUANCARLOSAPARCANARE
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxMartín Ramírez
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docxAgustinaNuez21
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 

Último (20)

La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
CIENCIAS NATURALES 4 TO ambientes .docx
CIENCIAS NATURALES 4 TO  ambientes .docxCIENCIAS NATURALES 4 TO  ambientes .docx
CIENCIAS NATURALES 4 TO ambientes .docx
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 

Social Erlang backend IM

  • 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