Il software dietro Facebook
Per gestire due miliardi di utenti attivi e garantire un livello di servizio ottimale a tutti gli ingegneri di Facebook devono affrontare sfide significative. La scalabilità di cui necessita la piattaforma è notevole, e le tecniche web tradizionali non sono sufficienti o adatte a raggiungere l’obiettivo.
È interessante scoprire come il social network più usato riesca a gestire un tale livello di complessità. Prima di addentrarci nei dettagli software, riportiamo alcuni dati per dare un’idea di quanto sia importante per l’azienda scalare correttamente:
- Facebook ha 2.3 miliardi di utenti (dati aggiornati all’ultimo quarto del 2018);
- in un minuto vengono postati 317mila stati, 147mila foto e 54mila link vengono condivisi;
- ogni giorno si contano 8 miliardi di visualizzazioni di video.
I software di Facebook
Facebook segue il modello LAMP per lo stack web:
- Linux come sistema operativo;
- Apache come server HTTP;
- MySQL come database principale;
- PHP come linguaggio di programmazione.
Oltre a queste componenti, però, la piattaforma social ha esteso e modificato le operazioni dello stack per incorporare nuovi servizi. Ad esempio, PHP viene utilizzato ma convertito in codice sorgente sui server web per motivi di performance. Oltre a ciò si sono affiancati dei sistemi custom per gestire operazioni specifiche. Vediamo quali.
Memcached
È un sistema di caching di memoria distribuito che viene utilizzato come layer di cache tra i web server e i server MySQL. Il software viene utilizzato da molti altri siti oltre a Facebook (come Wikipedia e Zynga), ma l’azienda di Zuckerberg ha apportato numerose ottimizzazioni per adattarlo alle proprie necessità. Grazie ad esso il tempo di caricamento delle pagine viene ridotto drasticamente.
HipHop
Per convertire il PHP viene utilizzato HipHop. Essendo un linguaggio di scripting è molto più lento rispetto a del codice che viene eseguito nativamente su un server. Il software converte il PHP in C++, che viene compilato per migliorare le performance.
Haystack
Per gestire l’upload e il download delle foto viene utilizzato Haystack. Esso è in grado di lavorare con qualsiasi tipo di oggetto, ma viene utilizzato da Facebook per le immagini. Ogni volta che viene caricata una foto essa viene salvata in 4 risoluzioni diverse: considerano che ci sono più di 20 miliardi di foto caricate, ne devono essere gestite 80 miliardi. La sfida poi non riguarda soltanto la gestione dello storage, ma anche le performance web per il caricamento: secondo i dati riportati, ogni secondo vengono caricate quasi 2500 foto.
BigPipe
Quando navighiamo sulla home di Facebook essa ci appare come una pagina unica. Dietro, in realtà, ci sono diverse “sezioni” chiamate pagelets che servono ad ottimizzare le performance. BigPipe è un serving system di pagine web che si occupa proprio di recuperare le diverse sezioni. La chat che appare in basso a destra è una sezione diversa rispetto alla bacheca, e ce ne si può accorgere facendo caso al fatto che, quando la bacheca si aggiorna, le chat non vengono refreshate. L’utilità delle pagelets è che possono essere recuperate in parallelo, migliorando così le performance e garantendo che anche se una parte del sito non funziona, non significa che anche le altre ne risentano.
Hadoop (e Hive)
Per quanto riguarda i calcoli sui dati la piattaforma utilizza Hadoop, un’implementazione open-source del framework MapReduce. Esso permette di effettuare calcoli su enormi quantità di dati, con cui poi generare delle analisi. Al suo fianco troviamo Hive, nato proprio in Facebook, che permette di effettuare query SQL su Hadoop.
Thrift
Se PHP viene utilizzato per il front-end, Erlang viene invece utilizzato per la chat, e insieme ad essi troviamo anche Java e C++. Per gestire tutti questi linguaggi è stato sviluppato un framework cross-language chiamato Thrift, che permette la comunicazione tra di essi.
Varnish
Varnish è un acceleratore HTTP che viene utilizzato sia come load balancer che come gestore di cache. Questo viene utilizzato principalmente per rendere disponibili foto caricate e foto profilo.
React
Anche React, una delle librerie JavaScript più utilizzate al mondo, nato da un ingegnere di Facebook. Oltre ad esso, qualche anno dopo, è stata rilasciata React Fiber, una collezione di algoritmi per il rendering grafico.
Da The software behind Facebook