ShareThis' Erfahrung bei der Entwicklung von Meteor-Apps im großen Maßstab
Bei Vijay Annapureddy
ShareThis verwendet Meteor zur Erstellung von Web-Apps. Meteor ist eine Full-Stack-Plattform zum Erstellen von Web- und Mobile-Apps in reinem JavaScript. Eine Meteor-App enthält eine Client-seitige Komponente, die auf dem Client (dem Browser) ausgeführt wird, was es Meteor ermöglicht, das zu tun, was es "database everywhere" nennt. Meteor nimmt eine Teilmenge der Datenbank und kopiert sie auf den Client. Anstatt HTML-Code an den Client zu senden, sendet eine Meteor-App die tatsächlichen, rohen Daten und lässt den Client damit umgehen.
Da 65 % der Infrastruktur von ShareThis' gedockt ist und auf Kubernetes läuft und um Meteor effektiv zu nutzen, müssen wir Meteor-Apps im Maßstab mit der Fähigkeit, Millionen von Anfragen pro Monat zu verarbeiten, bauen. Dazu haben wir zunächst unsere Meteor-Applikationen einem Lasttest unterzogen und die Performance in Bezug auf die Anzahl der Anfragen pro Sekunde bei einer großen Anzahl von gleichzeitigen Anfragen beobachtet. Um Daten aus dem Backend der MongoDB-UI zu rendern, veröffentlichten die Meteor-Server Sätze von Datensätzen. Die Antwortzeiten unserer App, die auf Meteor und MongoDB lief, waren nicht zufriedenstellend. Es dauerte 1,5 Sekunden, bis Meteor 5.000 Mongo-Dokumente aktualisierte, wenn es mit 185 Anfragen pro Sekunde bei einem Gleichzeitigkeitsgrad von 125 getestet wurde. Die idealen Antwortzeiten sollten unter 1 Sekunde liegen.
Wichtige Dinge, die wir beim Betrieb von Meteor im Maßstab auf Kubernetes beobachtet haben, sind:
Meteor's Standard Publisher & Subscription kann nicht eine große Anzahl von MongoDB Updates in Echtzeit darstellen.
Meteor's sock.js und sticky sessions Anforderung machen die Benutzeroberfläche unsicher, wenn mehrere Meteor-Instanzen parallel hinter einem Load Balancer laufen.
Lesen Sie hier mehr über unseren Ansatz zur Skalierung von Meteor und die Änderungen, die wir an unserer Meteor-Architektur vorgenommen haben: