Das Backend von Meta Threads wurde mit Python 3.10 aufgebaut
(twitter.com/llanga)„Wussten Sie, dass das Backend von #MetaThreads mit #Python 3.10 aufgebaut wurde?
Es läuft auf dem #Cinder-Fork von Instagram, und dieser Fork enthält mehrere interessante Funktionen, die sich von normalem Python 3.10 unterscheiden, darunter ein JIT-Compiler, Module mit Lazy Loading und vorcompilierte statische Module.“
1 Kommentare
Meinungen auf Hacker News
Für die Fraktion „Python ist für Production-Backends nicht schnell genug“ ist das ziemlich ironisch. Schließlich hat dieselbe Firma das größte soziale Netzwerk betrieben, das mit PHP + MySQL gebaut wurde
Auch die virtuelle Maschine, die den JIT ausführt, ist komplett in C++ geschrieben, und die MySQL-Distribution ist ebenfalls ein stark modifizierter interner Fork für Skalierbarkeit. Darin stecken Dinge wie Trennung von Storage und Compute, Sharding, eine RocksDB-basierte Storage Engine statt InnoDB und Raft für synchrone Replikation
Um die Backend-Infrastruktur skalierbar zu machen, ist wirklich hervorragendes Engineering eingeflossen
Lesenswerte Materialien:
[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...
Man kann sich darunter funktionale Helper, asynchrone Ausführung über Tausende von Cores hinweg und Spanning Trees über Rechenzentren hinweg per SSH vorstellen. Nebenbei: Viele der guten Dinge, die ich benutzt habe, stammten von Evan Priestley; er hat auch Phabricator und mehrere andere leistungsfähige Systeme gebaut
„Es läuft auf Instagrams Cinder-Fork, der JIT, Lazy-Loading-Module, vorkompilierte statische Module und mehrere interessante Änderungen gegenüber reinem Python 3.10 enthält“
Das stand im Tweet
Persönlich ist es mir egal, welche Sprache Leute verwenden. Jeder weiß: Wenn man Geld hat, stellt man einfach mehr Server dazu. Jedenfalls bis CFO und CTO wegen der Rezession „Kosten senken“ zur nächsten großen Aufgabe erklären
Es ist erstaunlich, dass 2023 immer noch über die „Production Readiness“ gängiger Programmiersprachen gestritten wird. Wirkt fast wie ein Wettbewerb darum, wer zu den „coolen Kids“ gehört
Die Teile, die tatsächlich viel Performance brauchen, liegen in mehreren C++-basierten Aggregations- und Empfehlungssystemen. Der Webserver ist aber tatsächlich Django
Warum würden sie Django verwenden? Ich habe es bei kleinen Projekten ausprobiert, aber es ist nicht besonders schnell, und ich hätte gedacht, dass es für so eine große App nicht passt. Ich würde gern die Vor- und Nachteile verstehen
Warum haben sie es nicht in C++ oder Rust gebaut? Selbst wenn die schweren Teile in einer kompilierten Sprache geschrieben sind, begrenzt Python nicht die Antwortzeiten? Ich bin Amateur, die Frage ist also vielleicht naiv
„Es läuft auf Instagrams Cinder-Fork, der JIT, Lazy-Loading-Module, vorkompilierte statische Module und mehrere interessante Änderungen gegenüber reinem Python 3.10 enthält“
Also ist es nicht einfach nur Python 3.10
Ich weiß nicht, ob Facebook den Fork dauerhaft weiter pflegen will, aber die CPython-Seite ist offen dafür, solche Features zu mergen, wenn sie sinnvoll sind
Dass ein Beitrag über das Threads-Backend auf Twitter gepostet wurde, ist ironisch
Verstanden? Threads, threading…? Schon gut, ich finde selbst hinaus
Selbst wenn es ein Threads-Post gewesen wäre, hätte man ihn vermutlich nicht bei HN einreichen können
Es ist noch nicht fürs Web geöffnet. Angeblich soll das irgendwann kommen
Dass sich das Backend bis zu einem gewissen Grad überschneidet, ist klar. https://www.threads.net/t/C ist der erste Instagram-Post, ist aber auch auf Threads sichtbar und hat exakt dieselbe Anzahl an Likes wie auf Instagram.
Auf https://www.threads.net/@kevin steht allerdings, dass es keine Threads gibt.
Python ist lediglich der Webserver. Die wirklich performancekritischen Komponenten – Edge-Proxys, Load Balancer, Backend-Services, Datenbanken, Caches und Storage-Services – sind größtenteils in C++ geschrieben.
Ich habe an Cinder und am Webserver gearbeitet. Wenn es technische Fragen gibt, kann ich sie beantworten. :)
Hier war Latenz allerdings ein großes Problem, und wie immer wurde die Optimierung zugunsten des Erreichens des MVP niedriger priorisiert.
Daher frage ich mich, ob man Cinder zur Optimierung von Echtzeit-Datenstreaming einsetzen kann – oder ob schon die Frage zeigt, dass ich den Use Case nicht verstanden habe.
Nebenbei haben wir auch Django eingesetzt, und im Nachhinein frage ich mich, ob wir auf FastAPI hätten wechseln sollen. Das ist aber eine separate Frage.
Ich würde gern mehr über den Rollout erfahren. Es kommen pro Stunde weit über eine Million neue Nutzer hinzu, das ist ziemlich enorm.
Trotzdem gibt es sicher viele interessante Details, die man gern hören würde.
Ein paar Millionen neue Nutzer sind weniger als 0,1 % des Gesamtwerts. Das liegt problemlos innerhalb erwartbarer Schwankungen.
https://github.com/twitter/the-algorithm/pull/447 sollte man nie vergessen.
Threads verwendet das Backend/die API von Instagram wieder. Instagram war von Anfang an Python-basiert, daher nutzt auch Threads Python.
Das bedeutet aber nicht, dass man Python wählen sollte, wenn man so eine App neu baut und es Alternativen gibt, die keinen internen Fork benötigen. Wenn man den ganzen Artikel liest, ist das ziemlich leicht zu verstehen, aber die „nur Überschrift lesen“-UI von Hacker News verzerrt das vermutlich.