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.
- Server systems that do the backend message routing are done in Erlang.
- 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.
- Ejabberd è un famoso server Jabber open source scritto in Erlang.
- 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
Articoli simili
- Quali elementi compongono un server backend quando si parla di un server backend che servirà un'API costruita sullo standard REST?
- Cos'è un server di posta in entrata e un server di posta in uscita?
- Essere in grado di impostare un server di posta elettronica su un server dedicato è un segno di essere un ingegnere di rete di alto livello?
- Quanto costa fare una server farm di circa 200 server che eseguono un gioco di sopravvivenza open world con circa 150 giocatori collegati ciascuno?