¿Cuál es la arquitectura del servidor de WhatsApp?

HighScalability unió esto de varias fuentes en la web que pudieron encontrar en febrero de 2014, una semana después de su adquisición: Facebook de WhatsApp Architecture compró por $ 19 mil millones – Alta escalabilidad –

La esencia de su escala de servidores:

  • Cientos de nodos
  • > 8000 núcleos
  • Cientos de terabytes de RAM

Componentes de su pila de backend:

  • Erlang
  • FreeBSD
  • Yaws, lighttpd
  • PHP
  • Parches personalizados para BEAM (BEAM es como JVM de Java, pero para Erlang)
  • XMPP personalizado
  • El alojamiento puede estar en Softlayer

Breve descripción de cómo funcionan sus servicios Erlang:

  • El servidor de WhatsApp se implementa casi por completo en Erlang.
    • Los sistemas de servidor que realizan el enrutamiento de mensajes de fondo se realizan en Erlang.
    • Un gran logro es que la cantidad de usuarios activos se gestiona con una huella de servidor realmente pequeña. El consenso del equipo es que se debe en gran parte a Erlang.
    • Es interesante notar que el chat de Facebook se escribió en Erlang en 2009, pero se alejaron porque era difícil encontrar programadores calificados.
  • El servidor de WhatsApp ha comenzado desde ejabberd
    • Ejabberd es un famoso servidor Jabber de código abierto escrito en Erlang.
    • Originalmente elegido porque es abierto, tuvo excelentes críticas de los desarrolladores, facilidad de inicio y la promesa de la idoneidad a largo plazo de Erlang para un gran sistema de comunicación.
    • Los siguientes años se dedicaron a reescribir y modificar bastantes partes de ejabberd, incluido el cambio de XMPP a un protocolo desarrollado internamente, la reestructuración de la base del código y el rediseño de algunos componentes centrales, y realizar muchas modificaciones importantes en Erlang VM para optimizar el rendimiento del servidor .
  • Para manejar 50 mil millones de mensajes al día, el enfoque está en hacer un sistema confiable que funcione. La monetización es algo para ver más adelante, está muy lejos en el futuro.
  • Un indicador principal del estado del sistema es la longitud de la cola de mensajes. La longitud de la cola de mensajes de todos los procesos en un nodo se supervisa constantemente y se envía una alerta si se acumulan más allá de un umbral preestablecido. Si uno o más procesos se atrasa, se alerta, lo que da un puntero al siguiente cuello de botella para atacar.
  • Los mensajes multimedia se envían cargando la imagen, el audio o el video para enviarlos a un servidor HTTP y luego enviando un enlace al contenido junto con su miniatura codificada Base64 (si corresponde).
  • Algunos códigos generalmente se envían todos los días. A menudo, es varias veces al día, aunque en general se evitan las horas pico de tráfico. Erlang ayuda a ser agresivo para obtener soluciones y características en la producción. La carga en caliente significa que las actualizaciones se pueden enviar sin reinicios ni cambios de tráfico. Los errores generalmente se pueden deshacer muy rápidamente, nuevamente cargando en caliente. Los sistemas tienden a estar mucho más flojos, lo que hace que sea muy fácil implementar los cambios de forma incremental.
  • ¿Qué protocolo se usa en la aplicación Whatsapp? Enchufe SSL a los grupos de servidores de WhatsApp. Todos los mensajes se ponen en cola en el servidor hasta que el cliente se vuelve a conectar para recuperar los mensajes. La recuperación exitosa de un mensaje se devuelve al servidor de WhatsApp que reenvía este estado al remitente original (que verá eso como un icono de “marca de verificación” al lado del mensaje). Los mensajes se borran de la memoria del servidor tan pronto como el cliente ha aceptado el mensaje

Y las diapositivas originales presentadas por WhatsApp en 2012 sobre cómo escalaron su pila Erlang a conexiones TCP de 2M en un solo host están aquí: http://www.erlang-factory.com/up…

Aquí va la respuesta 😉

Pila de WhatsApp

  • Erlang R16B01 (más sus propios parches)
  • FreeBSD 9.2
  • Mnesia (base de datos)
  • Pian
  • SoftLayer es su proveedor de nube, máquinas de metal desnudo, bastante aisladas dentro de la red, configuración de centro de datos dual

Hardware

  • ~ 550 servidores + equipo en espera ~ 150 servidores de chat (~ 1 millón de teléfonos cada uno, 150 millones de conexiones pico) ~ 250 mms (multimedia) servidores 2x2690v2 Ivy Bridge de 10 núcleos (40 hilos en total con hyperthreading) Los nodos de la base de datos tienen 512 GB de RAM Los nodos de cómputo estándar tienen 64 GB de RAMSSD principalmente para la confiabilidad, excepto cuando se almacena video porque se requiere más almacenamiento Dual-link GigE x2 (público que está orientado al usuario y privado que enfrenta los sistemas de back-end)
  • > 11,000 núcleos ejecutan el sistema Erlang
  • Distribución del trabajo: es necesario distribuir el trabajo en más de 11,000 núcleos. Comience con un único gen_server roscado.
  • Servicios de partición: Partición entre 2 y 32 vías. La mayoría de los servicios están divididos en 32 formas. El direccionamiento PG2, que son grupos de procesos distribuidos, se utiliza para direccionar particiones en todo el clúster. Los nodos se ejecutan en pares. Uno es primario y el otro secundario.
  • Mnesia : Debido a que no usan transacciones para obtener la mayor consistencia posible, serializan el acceso a registros en un solo proceso en un solo nodo mediante hash. Hash a una partición, que se asigna a un fragmento de mnesia, y termina siendo enviado a una fábrica, un trabajador.
  • Algunos grupos abarcan un continente, por lo que mnesia debería cargarse desde un nodo cercano en lugar de en todo el país.
  • Agregue la programación round-robin para el archivo asíncrono IO.
  • Optimice las tablas principales / nombres de ets para la escala.
  • No haga cola en el vertedero de mnesia si ya lo está haciendo.

Fuentes:

  • La arquitectura de WhatsApp que Facebook compró por $ 19 mil millones – Alta escalabilidad –
  • Cómo WhatsApp creció a casi 500 millones de usuarios, 11,000 núcleos y 70 millones de mensajes por segundo – Alta escalabilidad –

A continuación, he dado una breve nota sobre la funcionalidad y arquitectura de Whatsapp

  • Servidor – Ejabbered
  • El lenguaje de programación es ERLANG
  • El protocolo utilizado es XMPP
  • Para la gestión de bases de datos, aquí viene Mnesia y MySQL
  • El sistema operativo es FreeBSD
  • Para almacenar archivos multimedia, utiliza el servidor de almacenamiento YAWS

La optimización del servidor Ejabberd ( servidor Jabber de código abierto escrito en lenguaje Erlang) usando ERLANG es la mejor manera de construir un sistema de chat que acomode grandes comunicaciones con alta sostenibilidad.

Los técnicos de Whatsapp hicieron lo mismo, sin embargo lo refinaron modificando Ejabbered, desarrollando un protocolo XMPP interno, reestructuración de código, etc.

ERLANG es instantáneo en la adaptación de cambios y actualizaciones. Por lo tanto, no necesita reiniciar para inducir una nueva funcionalidad o actualización.

Al igual que WhatsApp, existe una solución de mensajería instantánea desarrollada con las tecnologías adecuadas. Contus Fly, una solución de mensajería instantánea basada en Ejabbered que cubre casi todas las características similares a WhatsApp. Base de datos puesta en Mnesia y MySQL y para Se utiliza la llamativa velocidad de lectura / escritura de la base de datos Cassandra .

Esta solución de mensajería instantánea se puede personalizar como aplicación de chat personalizada, aplicación de chat Enterprise, aplicación de chat basada en comercio electrónico, etc., según los requisitos.

Para más detalles sobre la funcionalidad de Whatsapp

Backend

  • Erlang
  • FreeBSD
  • Yaws, lighttpd
  • PHP
  • Parches personalizados para BEAM (BEAM es como JVM de Java, pero para Erlang)
  • XMPP personalizado
  • El alojamiento puede estar en Softlayer

Interfaz

  • Siete plataformas cliente: iPhone, Android, Blackberry, Nokia Symbian S60, Nokia S40, Windows Phone,?
  • SQLite

Hardware

Dual Westmere Hex-core (24 CPU lógicas);

  • 100 GB de RAM, SSD;
  • NIC dual (red pública orientada al usuario, back-end / distribución privada);

Fuente: La arquitectura de WhatsApp que Facebook compró por $ 19 mil millones – Alta escalabilidad –

El blog de la aplicación contiene esta publicación que hicieron cuando llegaron a 2 millones de conexiones TCP en una caja. Tiene algunos datos útiles más allá de eso, pero no mucho si hablamos de arquitectura
1 millón es tan 2011

Resumen de especificaciones de hardware: –
máquina: amd64
modelo: Intel (R) Xeon (R) CPU X5675 @ 3.07GHz
no. de núcleos: 24
memoria física: ~ 96GB

Se pueden encontrar más detalles del software en el blog.

Backend

  • Erlang
  • FreeBSD
  • Yaws, lighttpd
  • PHP
  • Parches personalizados para BEAM (BEAM es como JVM de Java, pero para Erlang)
  • XMPP personalizado
  • El alojamiento puede estar en Softlayer

Interfaz

  • Siete plataformas cliente: iPhone, Android, Blackberry, Nokia Symbian S60, Nokia S40, Windows Phone,?
  • SQLite

Hardware
Dual Westmere Hex-core (24 CPU lógicas);

  • 100 GB de RAM, SSD;
  • NIC dual (red pública orientada al usuario, back-end / distribución privada);

WhatsApp usa la pila LYME / LYCE, excepto la parte de Linux que es. Los cofundadores optaron por FreeBSD sobre Linux porque conocen el sistema de adentro hacia afuera y les gusta su seguridad y robustez.

Entonces, la arquitectura subyacente de la aplicación es esta:

OS : FreeBSD

Lenguaje de programación : Erlang

Máquina virtual (para ejecutar Erlang): BEAM

Servidores : Ejabberd, YAWS

El servidor Ejabberd se basa en un conjunto de módulos conectables que permiten funciones como:

  • Mensajes uno a uno
  • Almacenar y reenviar (mensajes sin conexión)
  • Lista de contactos y presencia
  • Chat grupal – Chat multiusuario (MUC)
  • Gestión de archivo de mensajes (MAM)
  • Protocolo de evento personal (PEP) e indicador de tipeo
  • Configuraciones de privacidad, extensiones de bloqueo simples

Utilizan una versión personalizada de XMPP (Protocolo de presencia y mensajería extensible) que permite la entrega de mensajes. Lo llaman FunXMPP (los detalles sobre la personalización se encuentran en esta publicación). WhatsApp almacena archivos multimedia en YAWS ( Y et a other w eb s erver).

Base de datos : Mnesia

Base de datos sin conexión : SQLite

WhatsApp es una aplicación de mensajería instantánea asincrónica. Utiliza un modelo cliente-servidor para la mensajería. Todos los mensajes se almacenan localmente (en la aplicación). Sin embargo, hacen cola en el servidor, en caso de que un destinatario esté fuera de línea. Tan pronto como se entrega, la cola se elimina. Un usuario puede hacer una copia de seguridad en la nube de Google.

Para obtener más detalles sobre la arquitectura de WhatsApp, consulte la publicación: Cómo crear una aplicación de chat como WhatsApp

Como WhatsApp es una aplicación móvil, consta del lado del cliente y del lado del servidor. La interacción entre estos dos ocurre a través de servicios RESTful. más precisamente, puedes entender que esta es la pila de tecnología utilizada en cuál aplicación
BACKEND

  1. OS: freeBSD
  2. Servidor: guiñada
  3. Aplicación de servidor: ejabberd personalizado
  4. Idioma: erlang
  5. Tecnología: XMPP personalizada
  6. PHP en algún lugar en el medio para transacciones de usuario de servidor no stream.
  7. Base de datos: mnesia

Interfaz :

  1. XMPP: para transferir mensajes.
  2. Cifrado: rc4

El front-end puede ser cualquier front-end de dispositivo como iOS o Android.

Además de los enlaces proporcionados por otros usuarios, me gustaría agregar algunos:

  • Escalando a millones de conexiones simultáneas: Rick Reed
  • Entrevista con Rick Reed

Su pila es Erlang en FreeBSD. Más allá de eso, no tengo idea 🙁
Editar: fuente: http://www.erlang-factory.com/co

Es probable que usen una pila similar a muchas aplicaciones móviles.

Un vistazo a su página de trabajos (WhatsApp :: Join) muestra que WhatsApp está disponible para iPhone, Android, Blackberry, Windows y Nokia. Entonces, como mínimo, su pila involucra todos esos lenguajes asociados (es decir, Objective-C para iOS) y las tecnologías relacionadas para alojar / entregar tales aplicaciones.