- Funktionen
- Pricing

Dieser Blog basiert auf dem Vortrag „Bulletproofing for Black Friday” von Thomás Di Luccio auf der Symfony 2024-Konferenz. Thomás ist Developer Relations Engineer bei Upsun. Wir haben KI-Tools für die Transkription und zur Verbesserung der Struktur und Verständlichkeit der Inhalte eingesetzt.
Stellen Sie sich Folgendes vor: Sie sind ein kleines Ticket-Startup, das gerade einen Großauftrag von einem großen Veranstaltungsort erhalten hat. Nach monatelanger Entwicklung von Features und Vorbereitungen für den Start ist der große Tag gekommen – der Verkauf der Saisonkarten beginnt. Dieser Veranstaltungsort könnte an einem einzigen Tag bis zur Hälfte seines Jahresumsatzes erzielen. Die Einsätze könnten nicht höher sein.
Um 10 Uhr beginnt der Ticketverkauf. Online-Kunden, Besucher vor Ort und Nutzer der mobilen App greifen alle gleichzeitig auf dieselbe API zu. 45 Minuten lang scheint alles in Ordnung zu sein. Dann wird die Anwendung allmählich langsamer. Nach einer Stunde stürzt alles komplett ab.
Genau das ist Thomás und seinem Team vor Jahren passiert. Es war ein vernichtender Misserfolg, der nicht nur diesen wichtigen Kunden, sondern alle ihre Kunden betraf. Die Stimmung im Büro war am Boden, und niemand wusste, was schiefgelaufen war oder wie man die Situation wieder in Ordnung bringen konnte.
Dieser Misserfolg war jedoch der Beginn einer Reise in die Welt der Anwendungsperformance und Skalierung, die Sie nicht wiederholen müssen.
Das grundlegende Problem lag nicht bei Symfony oder einer bestimmten Technologie. Das Problem war einfach: Das Team war so sehr auf die Bereitstellung von Features konzentriert, dass es die Vorbereitung auf Szenarien mit hohem Datenverkehr völlig übersehen hatte.
„Wir waren so sehr darauf konzentriert, das Produkt zu entwickeln, Features zu liefern und Features zusammenzustellen, dass wir etwas Wesentliches übersehen haben: die Vorbereitung auf den großen Tag“, erklärt Thomás.
Dies ist eine häufige Falle im E-Commerce und in allen Unternehmen mit Spitzenauslastungszeiten. Teams entwickeln hervorragende Funktionen, übersehen jedoch oft, dass Erfolg mehr Nutzer bedeutet und mehr Nutzer unvorbereitete Systeme überlasten können.
Die erste Lektion ist offensichtlich, wird aber oft übersehen: Testen Sie Ihre Anwendungen vor dem entscheidenden Tag einem Stresstest. Dabei geht es nicht nur darum, ein paar Lasttests durchzuführen, sondern darum, Ihre Anwendung systematisch zu zerstören.
Brechen Sie Ihre Anwendung absichtlich.
Testen Sie Ihre Anwendung nicht nur, sondern bringen Sie sie zum Absturz. Seien Sie kreativ. Finden Sie neue Wege, um sie zum Absturz zu bringen. Wie Thomás es ausdrückt: „Überlassen Sie dies nicht Ihren Nutzern, denn sie sind verrückt und werden sie auf eine Weise zum Absturz bringen, die Sie nicht kontrollieren können.“
Investieren Sie in Lasttest-Tools.
Wählen Sie Tools, die für Ihr Team geeignet sind, und bleiben Sie dabei. Beliebte Optionen sind:
Der Schlüssel liegt darin, das richtige Gleichgewicht zwischen Zeitaufwand und finanziellen Investitionen zu finden, um eine Konfiguration zu schaffen, die jeder in Ihrem Team zuverlässig nutzen kann.
Erstellen Sie echte User Journeys.
Generische Lasttests reichen nicht aus. Sie müssen das tatsächliche Benutzerverhalten simulieren:
Vergessen Sie Randfälle nicht.
Im Fall des Ticketunternehmens waren ihr Erzfeind Gruppen älterer Theaterliebhaber, die eine Person schickten, um Dutzende von Tickets für die gesamte Gruppe zu kaufen. Diese Szenarien mit großen Warenkörben verursachten massive Rechenlasten, die bei normalen Tests nicht berücksichtigt wurden.
Testen Sie immer Extremszenarien:
Machen Sie es mit einem Klick einfach.
Jeder in Ihrem Team sollte in der Lage sein, umfassende Lasttests mit einem einzigen Befehl oder Mausklick durchzuführen. Dadurch werden Hindernisse für regelmäßige Tests beseitigt und sichergestellt, dass die Tests tatsächlich durchgeführt werden.
Finden Sie Ihre Bruchstellen.
Lasttests liefern zwei wichtige Zahlen:
| # Fixture-Daten (Produkte, Kategorien, Suchbegriffe) aktualisieren # dann Journeys wie Legosteine zusammenstellen def journey_checkout(env): visit_home() search(random_keyword()) view_product(random_product_id()) add_to_cart(quantity=n) # auch n=100 testen pay() |
Das Verständnis dieser Schwellenwerte ist entscheidend, da oft ein direkter Zusammenhang zwischen gleichzeitigen Benutzern und Umsatz besteht. Wenn Sie Ihren Bruchpunkt kennen, wissen Sie, welchen maximalen Umsatz Ihre aktuelle Infrastruktur generieren kann.
Führen Sie niemals Stresstests in der Produktivumgebung durch. Das scheint offensichtlich, aber die Herausforderung besteht darin, wirklich genaue Kopien Ihrer Produktivumgebung zu erstellen.
Der Ansatz von Upsun
Upsun, wo Thomás arbeitet, bietet eine Git-basierte Platform-as-a-Service, die dies nahtlos ermöglicht. Sie beschreiben Ihre Infrastrukturanforderungen in YAML-Dateien, die in Ihrem Repository committet werden:
Jeder Commit erstellt eine neue Version, und jeder Branch erstellt eine vollständige Kopie der übergeordneten Umgebung, unabhängig von ihrer Komplexität.
DIY-Lösungen
Wenn Upsun keine Option ist, investieren Sie in die Schaffung ähnlicher Funktionen:
Für E-Commerce-Anwendungen ist diese Funktion unverzichtbar.
Lasttests und Staging-Umgebungen reichen nicht aus, wenn Sie nicht verstehen, was während Stresstests in Ihrer Anwendung vor sich geht.
Beobachtbarkeit ist „die Fähigkeit, das Verhalten einer Anwendung zu beobachten, Engpässe zu erkennen und die performance zu verbessern“. Stellen Sie sich das wie eine bionische Brille für Ihre Anwendung vor – eine Möglichkeit, durch die Black Boxes hindurchzusehen und fundierte Entscheidungen zu treffen.
Wichtige Observability-Features
Moderne Observability-Tools wie blackfire bieten mehrere wichtige Funktionen:
Der letzte Schritt besteht darin, zu verstehen, wie man effektiv skaliert. Dazu muss eine komplexe Frage beantwortet werden: „Welcher Teil Ihrer Anwendung benötigt welche Ressourcen, um welche Ergebnisse zu erzielen?“
Beginnen Sie mit Ihren Zielen
Definieren Sie Ihre Skalierungsszenarien:
Führen Sie für jedes Szenario Tests durch, bis Sie die genauen Anforderungen verstehen.
Identifizieren Sie präzise Anforderungen
Verwenden Sie Ihre Test- und Beobachtungstools, um Folgendes zu ermitteln:
Treffen Sie kosten- und performance-basierte Entscheidungen anhand realer Daten, nicht anhand von Annahmen.
Vergessen Sie die Worker nicht
Skalieren Sie Ihre Hintergrund-Mitarbeiter parallel zu Ihren Webanwendungen. Stellen Sie sicher, dass sie über ausreichende Ressourcen in ordnungsgemäß konfigurierten Containern verfügen.
Fein abgestimmte Ressourcenzuweisung
Upsun ermöglicht eine detaillierte Ressourcenzuweisung: Sie können einem Container mehr Speicher hinzufügen und gleichzeitig die CPU in einem anderen Container reduzieren, wo sie verschwendet wird. Sie können auch die Anzahl der Instanzen mit automatischer Lastverteilung skalieren.
Vermeiden Sie immer skalierte Lösungen
Viele Anwendungen laufen das ganze Jahr über mit maximaler Skalierung, weil ihre Hosting-Anbieter eine Skalierung nach oben und unten erschweren. Das verschwendet Geld und verursacht unnötige CO2-Emissionen. Finden Sie Lösungen, die eine dynamische Skalierung basierend auf dem tatsächlichen Bedarf ermöglichen.
Wenn Sie diese vier Strategien kombinieren, schaffen Sie ein ausfallsicheres Framework:
Erinnern Sie sich an den ursprünglichen Fehler? Der Engpass stellte sich als große Warenkörbe heraus, mit denen das Team nicht gerechnet hatte. Gruppen von Theaterbegeisterten kauften 50 bis 100 Tickets in einer einzigen Bestellung, was zu einer enormen Rechenlast für die Sitzplatzzuweisung, Preisberechnungen und Ticketgenerierung führte.
Das technische Problem war jedoch nur ein Symptom. Das eigentliche Problem war die Isolation des Teams von den tatsächlichen Nutzern. Sie entwickelten Features auf der Grundlage von Annahmen, anstatt zu verstehen, wie Veranstaltungsorte tatsächlich Tickets verkaufen.
„Wir waren in der Entwicklungsabteilung völlig isoliert und haben einfach Features aus einem Backlog ausgeliefert. Wir waren nicht mit den Leuten vor Ort zusammen, um zu sehen, wie sie tatsächlich arbeiten und wie sie tatsächlich verkaufen“, reflektiert Thomás.
Das Ziel ist eine Transformation: weg von Panik bei Veranstaltungen mit hohem Datenverkehr hin zu selbstbewusster Gelassenheit. Wenn Sie über geeignete Stresstests, Produktionsklonen, Beobachtbarkeit und Skalierung verfügen, können Sie den Black Friday mit dem Wissen angehen, dass Sie die vollständige Kontrolle haben.
Anstatt hektisch herumzurennen und zu versuchen, Probleme zu beheben, können Sie tatsächlich einen Drink genießen, während Sie die Systeme überwachen, von denen Sie wissen, dass sie jeden Traffic bewältigen können.
F: Wie viel Überwachung ist ausreichend?
A: Führen Sie eine kontinuierliche Profilerstellung durch. Für die Überwachung von Anfragen ist eine Stichprobenrate von 10 % für viele Anwendungen ein guter Ausgangspunkt. Apps mit extrem hohem Datenverkehr können einen geringeren Datenverkehr erzielen und gleichzeitig die statistische Zuverlässigkeit aufrechterhalten. Die frühen Erfolge durch den Einsatz dieser Tools gleichen oft ihren Mehraufwand aus.
F: Was hat den ursprünglichen Ausfall verursacht?
A: Riesige Warenkörbe sowie eine aufwändige Sitzplatzzuweisung und Ticketlogik, kombiniert mit Entscheidungen, die mit Blick auf die Versand-Features getroffen wurden, ohne zu berücksichtigen, wie sich echte Benutzer am Tag der Markteinführung verhalten würden. Sogar Drucker wurden mit übergroßen Bildern gefüttert. Tests fehlten. Die Behebung begann mit der Beobachtung realer Arbeitsabläufe und der Straffung des Systems.
F: Wie vermeide ich falsches Vertrauen in performance-Tests?
A: Schreiben Sie performance-Tests neben Unit- und Integrationstests. Beginnen Sie mit den kritischsten Benutzerabläufen – testen Sie die Ursachen, nicht nur die Ergebnisse. Geben Sie beispielsweise „weniger als N SQL-Abfragen” anstelle von nur „unter 10 ms” an, damit Sie nicht aufgrund warmer Caches bestehen, während Sie die tatsächlichen Kosten verbergen.
F: Was ist mit Drittanbieterdiensten während Stresstests?
A: Richten Sie Vorschauumgebungen über Umgebungsvariablen auf Sandbox-Konten aus. Verwenden Sie Produktionszugangsdaten nur in der Produktivumgebung. Auf diese Weise können Sie sicher testen, ohne echte Kontingente zu verbrauchen.
Warten Sie nicht, bis Sie selbst eine Katastrophe erleben. Beginnen Sie jetzt mit Stresstests, investieren Sie in geeignete Tools und bauen Sie Systeme auf, die mit Erfolg umgehen können. Ihr zukünftiges Ich und Ihre Benutzer werden es Ihnen danken, wenn der nächste Black Friday kommt und alles reibungslos funktioniert.
Der Unterschied zwischen einem erfolgreichen Event mit hohem Traffic und einem katastrophalen Ausfall liegt oft in der Vorbereitung. Machen Sie diese Vorbereitung zu einer Priorität und nicht zu einer Nebensache.
Join our monthly newsletter
Compliant and validated