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

Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 

Último (20)

Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 

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