Le backend de Meta Threads a été construit avec Python 3.10
(twitter.com/llanga)« Saviez-vous que le backend de #MetaThreads a été construit avec #Python 3.10 ?
Il fonctionne sur le fork #Cinder d’Instagram, qui inclut plusieurs fonctionnalités intéressantes absentes de Python 3.10 standard, comme un compilateur JIT, des modules à chargement différé et des modules statiques précompilés. »
1 commentaires
Commentaires sur Hacker News
C’est assez ironique pour ceux qui disent que « Python n’est pas assez rapide pour un backend de production ». La même entreprise exploite depuis longtemps le plus grand réseau social du monde, construit avec PHP + MySQL
La machine virtuelle qui fait le JIT est elle aussi entièrement en C++, et leur distribution MySQL est un fork interne lourdement modifié pour la scalabilité. On y trouve notamment la séparation stockage/calcul, le sharding, un moteur de stockage basé sur RocksDB au lieu d’InnoDB, ou encore Raft pour la réplication synchrone
Il y a eu un travail d’ingénierie vraiment remarquable pour rendre l’infrastructure backend scalable
Références utiles :
[1] https://engineering.fb.com/2016/08/31/core-data/myrocks-a-sp...
[2] https://research.facebook.com/file/529018501538081/hhvm-jit-...
[3] https://research.facebook.com/file/700800348487709/HHVM_ICPE...
Pensez à des helpers fonctionnels, à l’exécution asynchrone sur des milliers de cœurs, ou à des arbres couvrants traversant les datacenters via SSH. Au passage, une bonne partie des outils géniaux que j’utilisais avaient été créés par Evan Priestley, qui a aussi construit Phabricator et d’autres systèmes très puissants
« Il tourne sur le fork Cinder d’Instagram, qui inclut un JIT, des modules à chargement différé, des modules statiques précompilés, ainsi que plusieurs autres modifications intéressantes par rapport à Python 3.10 standard »
C’est ce qui est indiqué dans le tweet
Personnellement, je me moque du langage que les gens choisissent. Tout le monde sait que si on a de l’argent, on peut simplement ajouter plus de serveurs. Enfin, jusqu’à ce que le CFO et le CTO décident que le prochain grand chantier sera la “réduction des coûts” à cause du ralentissement économique
Ce qui m’étonne, c’est qu’en 2023 on débatte encore de la « capacité à être prêt pour la production » des langages de programmation grand public. On dirait un concours pour savoir qui est dans le camp des “cool kids”
En pratique, les parties qui demandent vraiment beaucoup de performances sont plusieurs services d’agrégation et de recommandation basés sur C++. Mais le serveur web est bien en Django
Pourquoi utiliser Django ? Je l’ai utilisé sur de petits projets, mais je ne le trouvais pas très rapide et je pensais qu’il ne conviendrait pas à une application de cette taille. J’aimerais comprendre les avantages et inconvénients
Pourquoi ne pas l’avoir fait en C++ ou en Rust ? Même si les parties lourdes sont en langage compilé, est-ce que Python ne limiterait pas quand même le temps de réponse ? Je pose peut-être une question naïve, je suis amateur
« Il tourne sur le fork Cinder d’Instagram, qui inclut un JIT, des modules à chargement différé, des modules statiques précompilés, ainsi que plusieurs autres modifications intéressantes par rapport à Python 3.10 standard »
Donc ce n’est pas complètement du simple Python 3.10
Je ne sais pas si Facebook tient absolument à conserver ce fork sur la durée, mais côté CPython, ils sont ouverts à fusionner ce type de fonctionnalités quand elles sont pertinentes
C’est ironique qu’un article sur le backend de Threads ait été publié sur Twitter
Vous l’avez ? Threads, threading…? Bon, d’accord, je sors
Même si cela avait été un post Threads, ça n’aurait sans doute pas pu être soumis sur HN
Ce n’est pas encore ouvert au web. Apparemment, ça le sera un jour
Il est clair qu’une partie du backend se recoupe. https://www.threads.net/t/C est le premier post Instagram, mais il apparaît aussi sur Threads, avec exactement le même nombre de likes que sur Instagram
En revanche, https://www.threads.net/@kevin indique qu’il n’y a pas de threads
Python n’est qu’un serveur web. Les composants vraiment sensibles aux performances — proxy edge, load balancer, services backend, base de données, cache, services de stockage — sont pour la plupart en C++
J’ai travaillé sur Cinder et sur le serveur web. Je peux répondre aux questions techniques :)
Mais ici, la latence était un gros problème et, comme toujours, l’optimisation a été reléguée assez bas dans les priorités pour atteindre le MVP
Je me demande donc si Cinder peut servir à optimiser le streaming de données en temps réel, ou si le simple fait de poser cette question montre que je n’ai pas compris le cas d’usage
À noter qu’on utilisait aussi Django, et maintenant je me demande si on aurait dû passer à FastAPI. Mais c’est une autre question
J’aimerais en savoir plus sur le rollout. Il y a bien plus d’un million de nouveaux utilisateurs ajoutés chaque heure, c’est assez énorme
Cela dit, il y a sûrement beaucoup de détails intéressants à entendre
Quelques millions de nouveaux utilisateurs ne représentent même pas 0,1 % du total. C’est largement dans la plage de variation prévisible
Il ne faut absolument jamais oublier https://github.com/twitter/the-algorithm/pull/447
Threads réutilise le backend/l’API d’Instagram. Instagram était basé sur Python dès le départ, donc Threads utilise aussi Python
Cela ne veut pas dire qu’il faille choisir Python pour créer une nouvelle app de ce type alors qu’il existe des alternatives ne nécessitant pas de fork interne. C’est assez facile à comprendre en lisant l’article en entier, mais l’interface de Hacker News, centrée sur les “lecteurs de titres”, semble le déformer