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

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024AndreRiva2
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 

Último (20)

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 

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