Read this article in english

J’adorais Facebook pendant mon enfance. Aujourd’hui Ă©lu pire rĂ©seau social par ma gĂ©nĂ©ration, il n’en reste pas moins le rĂ©seau social le plus populaire au monde. Avec ses 2 milliards d’utilisateurs actifs quotidiennement, Facebook n’est “pas mort, ni mourrant” selon son directeur en mars 2023.

CrĂ©Ă© le 4 fĂ©vrier 2004 par Mark Zuckerberg, “Zucc” pour les intimes, Facebook a fait ses dĂ©buts sur un monolithe PHP codĂ© en dehors des heures de cours de son crĂ©ateur. N’ayant pu anticiper son succĂšs, le code a Ă©tĂ© rĂ©adaptĂ© et l’infrastructure modernisĂ©e.

Aujourd’hui, Facebook (le rĂ©seau social) fĂȘte ses 20 bougies, et j’ai voulu faire un hommage Ă  ce grand site de mon Ă©poque que j’ai quand mĂȘme dĂ©cidĂ© de quitter en 2022 Ă  la fin de mes Ă©tudes. Un condensĂ© de sa stack technique sur laquelle Facebook communique dans son blog Engineering at Meta, et que j’ai dĂ©cidĂ© de tout vous condenser dans ce petit article qui m’a passionnĂ©.



Le frontend développé maison

Si ReactJS est utilisĂ© par tant de monde, c’est que tout le monde veut devenir Facebook. Les Ă©quipes Facebook ont lancĂ© en 2013 le framework JS le plus trendy malgrĂ© son dĂ©clin. C’est aujourd’hui le framework utilisĂ© par le nouveau site et les applis de Facebook.

GraphQL est ce qu’ils utilisent pour leurs requĂȘtes API. Pareil que pour React, GraphQL a Ă©tĂ© dĂ©veloppĂ© en 2015 par Facebook et est aujourd’hui open source. Le problĂšme des APIs traditionnelles et qu’elles renvoient trop de donnĂ©es par rapport Ă  ce qui est demandĂ©, ce que rĂ©souds notamment GraphQL.

Enfin, Relay, dont on entend moins parler, gĂšre les donnĂ©es dans React. L’idĂ©e derriĂšre ce framework est que les donnĂ©es ont besoin d’ĂȘtre hiĂ©rarchisĂ©es et que les composants dans React ont besoin de donnĂ©es spĂ©cifiques. Relay interroge alors GraphQL uniquement sur ce qu’il l’intĂ©resse, en prenant soin de prioriser le contenu important.



Le backend qui traĂźne des casseroles

Je me souviens d’une Ă©poque oĂč Facebook Ă©tait rĂ©guliĂšrement indisponible, et que je ne pouvais pas poster mes blagues mĂ©diocres Ă  mes potes d’internet. Je crois qu’aujourd’hui ce problĂšme est dĂ©finitivement rĂ©solu, et je comprends pourquoi.

Bien que n’ayant pas dĂ©cidĂ© d’implĂ©menter Kubernetes, Facebook a pris le choix d’utiliser un orchestrateur maison, Twine, dont on ne sait pas grand chose tant il est closed source. C’est le nouveau nom de Tupperware, qui gĂšre les workloads et containers de Facebook depuis la dĂ©cennie passĂ©e.

CĂŽtĂ© langage de programmation, Zucc Ă©tait parti sur du PHP. Puis, en 2014, Facebook a dĂ©veloppĂ© Hack, un langage de programmation orientĂ© objet qui compile en PHP. AccompagnĂ© d’un serveur HHVM (HipHop Virtual Machine), Hack supporte l’entiĂšretĂ© de sa base de code PHP et rĂ©souds pas mal de soucis de sĂ©curitĂ©.

J’ai ouĂŻ dire que CentOS Ă©tait utilisĂ© pour les serveurs bien que la distro soit morte. Ils ont dĂ©veloppĂ© en parallĂšle FBOSS, un OS pour leurs switchs rĂ©seau.



Du hardware maison, aussi

Je n’y comprends pas grand chose au hardware donc je ne vais pas m’Ă©taler dessus, mais Facebook dĂ©veloppe son propre matos depuis longtemps. Je me rappelle en 2013 qu’ils avaient essayĂ© de lancer un tĂ©lĂ©phone, le HTC First, mais c’Ă©tait en collaboration avec HTC.



CÎté base de données, on reste sur des classiques

Comme prĂ©vu, la plupart des bases de donnĂ©es tournent sous MySQL. Ils ont rĂ©cemment procĂ©dĂ© Ă  une migration vers la release 8.0, ce qui n’Ă©tait pas une mince chose Ă  faire.

Mais Facebook a aussi Ă©tĂ© Ă  l’origine de Cassandra, en 2008 utilisĂ© de base pour la messagerie instantannĂ©e, qu’ils ont revisitĂ© 10 ans plus tard avec Rocksandra, lui aussi open-source.



Une grosse infra pour des grosses données

Pour la big data, ils ont rĂ©Ă©crit une partie du code de MySQL pour crĂ©er MyRocks, servant Ă  stocker des donnĂ©es optimisant l’espace et l’Ă©criture dans la base maison (et toujours open source) RocksDB Ă©crit en C++ et basĂ© sur LevelDB de Google.

Facebook est aussi trĂšs fier de son moteur Scribe, le gestionnaire de files d’attentes de messages maison.

Apache Spark est par ailleurs utilisĂ© par les Ă©quipes de Machine Learning pour l’entraĂźnement. Ils revenaient de Hive, apparemment trop lent (j’y connais rien Ă  ça pour avoir un avis).

Enfin, Presto, sorti en 2012, a pour objectif d’optimiser les requĂȘtes SQL pour les gros volumes de donnĂ©es (Hive, HBase, Scribe…).



CÎté automatisation et DevOps, des technos inconnues au bataillon

Si certains des services mentionnĂ©s prĂ©cĂ©demment ne vous disent rien, ceux qui vont suivre sont encore plus obscurs. Chez Facebook, on utilise Sapling pour Git, qui leur permet d’avoir un serveur Git scalable pour leurs grosses bases de code. Ils auront pris une dizaine d’annĂ©e pour dĂ©velopper l’outil sl en interne, et l’ont open source en 2022.

Je ne sais pas ce qu’utilise Facebook pour ses pipelines d’intĂ©gration et de dĂ©ploiement CI/CD, mais ils ont dĂ©veloppĂ© Buck2, un systĂšme pour build leur Ă©norme base de code codĂ© en Rust.

Pour leurs tests, ils ont développé Infer pour leurs applis mobiles (C, C++, Objective-C, Java) et Sapienz pour leurs user stories.

Niveau alerting, SLICK leur permet de monitorer les SLI de leurs services (SLI-CK, get it ?). Pratique pour atteindre un objectif de 100% d’uptime. Malheureusement on n’a pas tant d’informations sur ce systĂšme qui reste closed source.

Enfin, Docusaurus est leur outil de documentation, avec une mascote plutÎt adorable de crocodile. Le résultat est trÚs joli, et ils ont open source le projet.

Conclusion et surprises

J’ai Ă©tĂ© Ă©tonnĂ© de voir que Facebook a dĂ©veloppĂ© autant de technos en interne, et que la plupart sont open source. C’est une bonne chose pour la communautĂ© dev & ops, et montre que le rĂ©seau social le moins apprĂ©ciĂ© a quand mĂȘme de longs jours devant lui.

En 20 ans, Facebook a mis la scalabilitĂ© au cƓur de ses prĂ©occupations, et a plutĂŽt rĂ©ussi la transition de son monolithe PHP Ă  une stack moderne. Ils ont accompli l’exploit de satisfaire les besoins de 2 milliards d’utilisateurs quotidiens en 2024 en partant de rien, tout Ă  leur honneur. Quels seront les prochains dĂ©fis du rĂ©seau social pour ne pas perdre, voire gagner, en popularitĂ© ?


BanniĂšre “Facebook” gĂ©nĂ©rĂ©e par DALL‱E