lunes, diciembre 13, 2010

Notas sobre la arquitectura de Facebook Chat

lunes, diciembre 13, 2010 por Martín

En la línea de las notas de arquitectura que suelo publicar voy a escribir hoy un post con un resumen de notas que he ido sacando sobre un documento acerca de la arquitectura del chat de Facebook. Si os interesa el tema entonces os pueden interesar también las notas sobre la arquitectura de Facebook del año pasado. Empiezo.

En 2007 en Facebook se dan cuenta de que necesitan un Chat, seguir los mensajes entre muros es un infierno. El código surge en el 2007 de lo que en Facebook denominan un Hackathon, es decir quedarse los ingenieros durante toda una noche programando. No es hasta el 2008 cuando se manda el primer mensaje y lo lanzan oficialmente.

Las estadísticas del chat dan miedo:

  • 800+ million user messages / day

  • 7+ million active channels at peak

  • 1GB+ in / sec at peak

  • 100+ channel machines



En cuanto a como funciona, la barra de Facebook chat consiste en Javascript que se encarga de controlar las diferencias entre navegadores, problemas de envio, etc. Se utiliza AJAX para el envio de mensajes y consultas generales. Se utiliza polling para la lista de amigos online. Se utiliza long polling (comet) para la recepción de mensajes.

En cuanto al servidor, utilizan Thrift, PHP, C++ y Erlang para los canales de comunicación. Para la comunicación mantienen un canal de Erlang por usuario activo y una request HTTP abierta por pestaña del navegador.

El documento continua con una serie de factores fundamentales de Erlang que el equipo de ingeniería de Facebook consideran que han sido claves para el éxito de su chat y sobre los que yo no puedo opinar pero si listarlos:

  • Concurrencia simplificada y paralelismo a gran escala.

  • Comunicación distribuida y muy sencilla. Nodos remotos como locales.

  • Aislamiento de errores. Los errores no tiran el sistema completo.

  • Informes de errores bastante completos.

  • Hot-code swapping. Cambio de código sin parar el sistema.

  • Facilidades de monitorización.

  • Shell remote. Capacidad de conectarse a código vivo en ejecución.

  • Erlang top. Como top (unix) pero para procesos Erlang.

  • Hibernación. El proceso "encoge" hasta que no vuelve a ser usado.

  • SMP. Soporte de múltiples cores.



Fuente: PDF original de Eugene Letuchy.
Y eso es todo :)

comments

0 Respuestas a "Notas sobre la arquitectura de Facebook Chat"