2 points par GN⁺ 2023-07-07 | 1 commentaires | Partager sur WhatsApp

« 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

 
GN⁺ 2023-07-07
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

    • Techniquement, c’est vrai, mais ils ne font plus tourner du PHP pur depuis longtemps. Ils le convertissent en code x86 avec HHVM JIT pour une exécution native sur la machine, avec énormément d’optimisations en plus
      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...
    • J’étais ingénieur chez Facebook à ses débuts, et le PHP de l’époque n’avait rien à voir avec le PHP utilisé pour les templates de sites web. Il existait toutes sortes de bibliothèques dédiées qui permettaient un style de programmation bien plus sophistiqué
      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
    • Exact. Le Python pur n’était pas assez rapide, donc il a fallu faire plus de travail
      « 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”
    • Tu parles bien de cette entreprise qui, pour vraiment scaler, a dû créer deux implémentations de PHP et un transpileur vers C++ ?
    • Le choix du langage fait souvent perdre de vue l’ensemble. Choisir C++ plutôt que Python pour économiser quelques nanosecondes ou cycles pèse peu face aux millisecondes perdues à la frontière réseau pour lire un cache service ou une base de données
  • 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

    • Ce sujet m’intéresse vraiment beaucoup. Je me demande comment tu sais que le serveur web est en Django. J’ai cherché sans rien trouver
      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
    • Le fait qu’ils aient choisi Django est intéressant et réjouissant, mais j’aimerais connaître la source
    • Django n’est pas un serveur web, c’est un framework WSGI/ASGI. Je me demande ce qui gère réellement la terminaison HTTP
    • Je me demande dans quelle mesure ils utilisent des annotations de type et de la vérification de types dans la codebase
    • Corrigez-moi si je me trompe, mais Django n’est pas un serveur web. C’est un framework utilisé avec un serveur d’applications comme gunicorn et un serveur web comme nginx
  • « 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

    • J’ai déjà porté du code de Cinder vers CPython. Ce fork contient quelques optimisations qui peuvent être intégrées assez facilement dans CPython, et Facebook est aussi ouvert au portage de fonctionnalités
      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
    • Il faut aussi se rappeler que Python 3.10 a 9 versions majeures d’avance sur 3.1
    • À proprement parler, Python est une spécification, pas une implémentation
  • C’est ironique qu’un article sur le backend de Threads ait été publié sur Twitter

    • Si on veut trouver la vraie ironie, c’est plutôt ça : faire tourner une application appelée Threads sur Python, qui a un verrou global de l’interpréteur rendant le threading plus difficile
      Vous l’avez ? Threads, threading…? Bon, d’accord, je sors
    • Threads est une application uniquement mobile, comme Instagram. On ne peut pas vraiment utiliser Threads depuis un navigateur desktop, donc c’est probablement pour ça que cela a été partagé via un post Twitter
      Même si cela avait été un post Threads, ça n’aurait sans doute pas pu être soumis sur HN
    • Il n’y a pas encore d’application web. On dirait qu’on peut lier directement vers un thread, mais on ne voit que le contenu lié, pas l’arborescence de discussion ni ce genre de choses
      Ce n’est pas encore ouvert au web. Apparemment, ça le sera un jour
    • Pourquoi voter contre ? C’est une remarque tout à fait légitime
    • Il existe actuellement une version web de Threads, ou c’est uniquement une app ?
  • 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++

    • Je considère que le serveur web qui traite toutes les requêtes, ou la majorité d’entre elles, est une partie sensible aux performances du système. Le simple fait de le réécrire de Python vers Go apporte souvent un gain de performance de 2 à 3x, et à l’échelle des FAANG cela peut représenter une grosse différence en coût matériel
    • C’est exactement l’usage prévu de Python, et c’est comme ça qu’il a toujours été utilisé
  • J’ai travaillé sur Cinder et sur le serveur web. Je peux répondre aux questions techniques :)

    • Je me demande si Cinder peut aider pour les optimisations de streaming en temps réel. Nous recevions un flux UDP, puis nous faisions de l’inférence de machine learning en temps réel sur ce flux après divers tours de magie avec gstreamer et nvidia deepstream. Si je me souviens bien, le développeur principal l’avait implémenté en Python
      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
    • Je me demande quelle fonctionnalité a l’impact le plus important et les meilleures chances d’être intégrée à CPython
    • Je me demande si tu recommanderais Cinder pour une stack composée de Django, Cython et Numpy
    • Peux-tu en dire plus sur la partie serveur web ? Est-ce que vous implémentez WSGI ?
    • À qui Cinder peut-il profiter ? À quel type de charge de travail est-il adapté ? Le README seul est un peu insuffisant
  • 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

    • À mon avis, ils ont sûrement fait un surprovisionnement massif pour absorber les premières semaines, voire les premiers mois, de croissance attendue
      Cela dit, il y a sûrement beaucoup de détails intéressants à entendre
    • L’ensemble des produits Meta compte 3,8 milliards d’utilisateurs actifs mensuels
      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
    • Ça tourne simplement sur une infrastructure Meta mutualisée conçue pour gérer cette échelle
  • Il ne faut absolument jamais oublier https://github.com/twitter/the-algorithm/pull/447

    • Enfin une différence entre les deux
  • 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

    • Du calme. Python est un langage tout à fait correct