QNA > W > What Is Whatsapp's Server Architecture?

What is WhatsApp's server architecture?

HighScalability pieced this together from various sources on the web they could find in Feb 2014, a week after their acquisition: The WhatsApp Architecture Facebook Bought For $19 Billion - High Scalability -

The gist of their scale of servers:

  • Hundreds of nodes
  • >8000 cores
  • Hundreds of terabytes of RAM


Components of their backend stack:

  • Erlang
  • FreeBSD
  • Yaws, lighttpd
  • PHP
  • Custom patches to BEAM (BEAM is like Java’s JVM, but for Erlang)
  • Custom XMPP
  • Hosting may be in Softlayer


Brief description of how their Erlang services work:

  • WhatsApp server is almost completely implemented in Erlang.
    • Server systems that do the backend message routing are done in Erlang.
    • Great achievement is that the number of active users is managed with a really small server footprint. Il consenso del team è che è in gran parte merito di Erlang.
    • Interessante notare che Facebook Chat è stata scritta in Erlang nel 2009, ma l'hanno abbandonata perché era difficile trovare programmatori qualificati.
  • Il server di WhatsApp è partito da ejabberd
    • Ejabberd è un famoso server Jabber open source scritto in Erlang.
    • Originariamente scelto perché è aperto, ha avuto grandi recensioni dagli sviluppatori, facilità di avvio e la promessa dell'idoneità a lungo termine di Erlang per grandi sistemi di comunicazione.
    • I prossimi anni sono stati spesi a riscrivere e modificare parecchie parti di ejabberd, incluso il passaggio da XMPP al protocollo sviluppato internamente, ristrutturando il codice base e riprogettando alcuni componenti principali, e facendo molte modifiche importanti alla Erlang VM per ottimizzare le prestazioni del server.
  • Per gestire 50 miliardi di messaggi al giorno l'attenzione è rivolta a creare un sistema affidabile che funzioni. La monetizzazione è qualcosa a cui guardare dopo, è molto lontana nel tempo.
  • Un indicatore primario della salute del sistema è la lunghezza della coda dei messaggi. La lunghezza della coda dei messaggi di tutti i processi su un nodo è costantemente monitorata e viene inviato un allarme se si accumulano arretrati oltre una soglia prestabilita. Se uno o più processi rimangono indietro, questo viene segnalato, il che fornisce un indicatore del prossimo collo di bottiglia da attaccare.
  • I messaggi multimediali vengono inviati caricando l'immagine, l'audio o il video da inviare a un server HTTP e poi inviando un link al contenuto insieme alla sua miniatura codificata in Base64 (se applicabile).
  • Alcuni codici vengono solitamente inviati ogni giorno. Spesso, è più volte al giorno, anche se in generale le ore di picco del traffico vengono evitate. Erlang aiuta ad essere aggressivi nel portare correzioni e caratteristiche in produzione. Hot-loading significa che gli aggiornamenti possono essere spinti senza riavvii o spostamenti di traffico. Gli errori di solito possono essere annullati molto rapidamente, sempre tramite l'hot-loading. I sistemi tendono ad essere molto più liberamente accoppiati, il che rende molto facile distribuire i cambiamenti in modo incrementale.
  • Quale protocollo viene usato nell'app Whatsapp? Il socket SSL al pool di server di WhatsApp. Tutti i messaggi sono accodati sul server fino a quando il client si ricollega per recuperare i messaggi. L'avvenuto recupero di un messaggio viene rimandato al server whatsapp che inoltra questo stato al mittente originale (che lo vedrà come un'icona "segno di spunta" accanto al messaggio). I messaggi vengono cancellati dalla memoria del server non appena il client ha accettato il messaggio


E le slide originali presentate da WhatsApp nel 2012 su come hanno scalato il loro stack Erlang a 2M connessioni TCP su un singolo host sono qui: http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf

Di Grove

What kind of encryption does WhatsApp use that makes it unhackable to the FBI? :: Quale linguaggio di programmazione è stato usato per creare WhatsApp?
Link utili