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. O consenso da equipe é que é em grande parte devido ao Erlang.
- Interesting to note que o Facebook Chat foi escrito em Erlang em 2009, mas eles se afastaram dele porque era difícil encontrar programadores qualificados.
- Server systems that do the backend message routing are done in Erlang.
- WhatsServidor App começou de ejabberd
>ul>>>li>Ejabberd é um famoso servidor Jabber de código aberto escrito em Erlang.
>/li>>li>li>Originalmente escolhido porque o seu aberto, teve grandes revisões por parte dos programadores, facilidade de início e a promessa da adequação a longo prazo de Erlang para grandes sistemas de comunicação. - Os anos seguintes foram gastos reescrevendo e modificando algumas partes do ejabberd, incluindo a mudança do XMPP para o protocolo desenvolvido internamente, reestruturando a base de código e redesenhando alguns componentes principais, e fazendo muitas modificações importantes no Erlang VM para otimizar a performance do servidor.
>li> Um indicador primário da saúde do sistema é o comprimento da fila de mensagens. O comprimento da fila de mensagens de todos os processos em um nó é constantemente monitorado e um alerta é enviado se eles acumularem backlog além de um limite pré-definido. Se um ou mais processos ficarem para trás, o que dá um ponteiro para o próximo gargalo a ser atacado.
>li>li>Multimedia messages are sent by uploading the image, audio or video to be sent to an HTTP server and then sending a link to the content along with its Base64 encoded thumbnail (if applicable).
Some código é normalmente empurrado todos os dias. Muitas vezes, é várias vezes ao dia, embora em geral sejam evitados horários de pico de tráfego. O Erlang ajuda a ser agressivo na obtenção de correções e características na produção. Carregamento a quente significa que as atualizações podem ser empurradas sem reinicializações ou mudanças de tráfego. Erros geralmente podem ser corrigidos muito rapidamente, novamente através de carregamento a quente. Os sistemas tendem a ser muito mais frouxamente acoplados, o que faz com que seja muito fácil fazer mudanças de forma incremental.
li>>Que protocolo é usado no aplicativo Whatsapp? Soquete SSL para os pools do servidor WhatsApp. Todas as mensagens são enfileiradas no servidor até o cliente se reconectar para recuperar as mensagens. A recuperação bem sucedida de uma mensagem é enviada de volta para o servidor Whatsapp que reencaminha este estado de volta para o remetente original (que verá isso como um ícone de "checkmark" ao lado da mensagem). As mensagens são apagadas da memória do servidor assim que o cliente tiver aceite a mensagem
>>e os slides originais apresentados pelo WhatsApp em 2012 sobre como escalaram a sua pilha Erlang para 2M ligações TCP num único host está aqui: http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf
Artigos semelhantes
- How to access the wamp server (localhost) page of my computer, from my android mobile browser
- Como atualizar o Python 2.7 para 3.6 no meu Red Hat Linux Server
- Por que você escolheria o Plex Media server em vez do Kodi?
- Com quantos utilizadores posso partilhar um calendário de perspectiva ao mesmo tempo no MS Exchange Server?