Folge 22

Die Lasttest-Abrechnung

"Wenn die Datenbank lügt, wem glaubst du dann?"
12 Min. Lesezeit
Woche vom 29. Juni - 3. Juli 2026

Das Team fährt den ersten massiven Lasttest gegen die neue Multi-Region-Staging-Umgebung und simuliert 150.000 gleichzeitige Spielerprofile. Als sich die Datenbank-Replikas unter der Last zu desynchronisieren beginnen, müssen Hassan und Sofia einen Weg finden, mit Eventual Consistency zu leben, ohne die Spielerfahrung zu zerbrechen. Stefan hilft ihnen zu verstehen, dass Konsistenz keine binäre Entscheidung ist, sondern ein Design-Trade-off, den man nah an der Domäne steuern muss.

Zuvor: „Der Preis der Geschwindigkeit“ — Anton wollte Tests umgehen, um die Turnier-Matchmaking-UI schneller zu bauen, und behauptete, TDD bremse nur. Doch die neue Staging-Umgebung zerlegte seine Annahmen sofort und brach unter Multi-Region-Latenz auseinander. Mariana setzte sich mit ihm hin und schrieb einen Characterization-Test, der die Race Condition in zehn Minuten sichtbar machte. Anton begriff: TDD ist keine Theologie, sondern gute Entwicklung. Und das Team begann, sein System wieder zu besitzen, Test für Test.

Montag, 10:15 — Die Vorbereitung auf den Sturm

Hassan Al-Rashid studiert die Lasttest-Workstation, während Sofia auf das Script auf dem Monitor zeigt und Stefan Richter neben dem Server-Rack zusieht.
„Wir lassen den Sturm los.“

Der Operations-Raum war kalt, die Klimaanlage summte in einer tiefen, gleichmäßigen Frequenz, die die fernen Geräusche des Berliner Straßenverkehrs hinter dem Fenster fast vollständig schluckte.

Sofia schob ihre Brille zurecht. In den Gläsern spiegelten sich grün-weiße Zeilen aus der Lasttest-Konfiguration.

„Ich habe die Locust-Skripte auf 150.000 gleichzeitige Nutzerprofile konfiguriert“, sagte sie. In ihrer Stimme lag diese nervöse Spannung, die sie immer vor großen Deployments bekam. „Wir rampen mit 1.000 pro Sekunde hoch, verteilt über drei regionale Gateways: Frankfurt, Virginia und Singapur. Aber ich mache mir Sorgen wegen des Replikationsverzugs, Hassan. Unter so viel Schreiblast werden die Replikas zurückfallen.“

Hassan nickte langsam, die Finger trommelten einen ruhigen Rhythmus auf die Tischplatte. „Werden sie. Das ist kein Bug, Sofia. Das ist Physik. Ein Write aus Frankfurt braucht Zeit bis Virginia. Und noch mehr Zeit bis Singapur. Die Frage ist nicht, ob sie hinterherhinken. Die Frage ist, was unsere Anwendung tut, wenn sie es tun.“

„Antons Matchmaking-UI erwartet synchrone Antworten“, sagte Sofia und zog den C#-Controller auf den zweiten Monitor. „Wenn die US-East-Replika den aktualisierten Player-State noch nicht hat, wenn der Matchmaking-Service abfragt, wird mit veralteten Daten gematcht. Dann landet jemand in einer Lobby mit Items, die er gar nicht mehr besitzt. Oder schlimmer: Der State passt nicht, und die Verbindung fliegt auseinander.“

Stefan erschien in der Tür mit frischem Kaffee in der Hand. Zehn Minuten lang hatte er sie schon durch die Glaswand beobachtet, diese ruhige, konzentrierte Zusammenarbeit, die das hektische Chaos des Vormonats ersetzt hatte.

„Staging-Parität ist etwas Schönes, oder?“, sagte Stefan, kam herein und lehnte sich gegen das Server-Rack. „Vor drei Wochen hätten wir diesen Test am Samstagmorgen in Produktion gefahren und den Sonntag mit Datenbank-Rollbacks verbracht. Jetzt führen wir am Montagmorgen eine Design-Diskussion, bevor auch nur eine Zeile live geht.“

„Schön ist es“, gab Sofia zu, ein kleines Lächeln brach durch ihre Anspannung. „Aber auch beängstigend. Wenn der Test scheitert, fängt Lukas wieder an zu fragen, ob sich die Operational Realism Initiative gelohnt hat.“

„Lukas will Stabilität“, sagte Stefan. „Und Stabilität heißt nicht, dass ein System nie an physische Grenzen stößt. Es heißt, dass es sich vorhersagbar verhält, wenn diese Grenzen erreicht sind. Fahr den Test, Sofia. Schauen wir, wo die Datenbank reißt.“

Sofia sah Hassan an. Er gab ihr ein einziges, ruhiges Nicken.

„Okay“, sagte sie, die Finger über der Enter-Taste. „Wir lassen den Sturm los.“

Dienstag, 14:30 — Die Desynchronisierung

Hassan Al-Rashid arbeitet an der Tastatur, während Sofia Replikationslatenz-Grafiken und aufflackernde Singapur-Error-Logs beobachtet; Stefan Richter beugt sich hinter ihnen über den Tisch.
„Die Datenbank ist konsistent ... irgendwann. Aber die Spielererfahrung ist sofort.“

Der Lasttest lief seit zwanzig Minuten.

Bei 50.000 Nutzern war das System stabil. Bei 100.000 ging die Datenbank-CPU in Frankfurt auf 75 Prozent, aber die Read-Replikas in Virginia und Singapur hielten noch.

Dann traf der Traffic das Ziel von 150.000.

„Der Replikationsverzug steigt“, sagte Hassan, die Stimme jetzt angespannt. „Frankfurt nach Virginia liegt bei 450 Millisekunden. Frankfurt nach Singapur peakt bei 1,2 Sekunden.“

„Wir sehen Matchmaking-Fehler in der Region Singapur“, sagte Sofia, während ihr Terminal mit Fehlermeldungen durchrauschte. „Spieler werden gematcht, aber wenn der Game-Server die Singapur-Replika nach dem Inventar fragt, kommt ein 404 zurück. Das Inventar-Update ist noch nicht repliziert.“

„Wie fühlt sich das für die Spieler an?“, fragte Stefan und beugte sich über Sofias Schulter.

„Wie ein Totalschaden“, sagte Sofia und zog einen Testclient auf ihrem Tablet hoch. „Schau. Ich kaufe in Frankfurt ein Booster-Pack. Die Transaktion geht durch, mein Gold sinkt. Dann gehe ich sofort in eine Turnier-Lobby, die in Singapur gehostet wird. Die Singapur-Replika glaubt noch, ich hätte den alten Goldstand und gar kein Booster-Pack. Die UI zeigt das Booster an, aber sobald ich es ausrüsten will, lehnt der Server ab. Die App friert ein.“

„Eventual Consistency“, murmelte Stefan. „Die Datenbank ist konsistent … irgendwann. Aber die Spielererfahrung ist sofort.“

„Synchrone Replikation können wir nicht nehmen“, sagte Hassan, ohne vom Bildschirm aufzusehen. „Wenn Frankfurt auf Singapur warten muss, bevor ein Write erfolgreich zurückkommt, springt die Write-Latenz für jede einzelne Transaktion auf 300 Millisekunden. Das Spiel fühlt sich dann für alle unspielbar träge an.“

„Dann sitzen wir fest“, sagte Sofia, die Schultern sanken sichtbar. „Asynchron heißt: veraltete Daten und abstürzende App. Synchron heißt: langsames Netz und unspielbares Spiel.“

„Nur wenn du davon ausgehst, dass die Datenbank das Problem lösen muss“, sagte Stefan.

Sofia drehte sich zu ihm, die Stirn in Falten. „Wie meinst du das? Die Daten leben doch in der Datenbank.“

„Der Zustand wird in der Datenbank gespeichert“, korrigierte Stefan. „Aber die Geschäftsregeln leben in deiner Anwendung. Warum lässt du eine veraltete Replika in Singapur eine Transaktion validieren, die gerade in Frankfurt passiert ist?“

Sofia starrte ihn einen Moment an. In ihrem Kopf ratterte die Architektur in hoher Geschwindigkeit durch. „Weil … weil der Matchmaking-Service regional ist. Er fragt die nächstgelegene Replika ab, um Latenz zu sparen.“

„Und was wäre, wenn der Matchmaking-Service wüsste, welche Writes kritisch sind?“, fragte Stefan.

Sofias Augen wurden groß. Sie drehte sich wieder zum Bildschirm, die Finger schon auf dem Weg zur IDE. „Wir müssen gar nicht die ganze Datenbank konsistent machen. Wir müssen nur dafür sorgen, dass die eigenen Writes für den jeweiligen Spieler konsistent sind.“

Mittwoch, 11:15 — Die Physik des Zustands

Sofia erklärt Read-Your-Own-Writes-Routing an einem Whiteboard mit Frankfurt, Virginia, Singapur, Primary DB und Regional Replica, während Mariana, Hassan und Stefan das Diagramm auf der Entwicklungsfläche studieren.
„Wir müssen nur dafür sorgen, dass die eigenen Writes für den jeweiligen Spieler konsistent sind.“

„Das nennt sich Read-Your-Own-Writes-Konsistenz“, erklärte Sofia und tippte mit dem Marker gegen das Whiteboard.

Mariana saß halb zurückgelehnt im Stuhl, eine angebissene Brezel in der Hand, und hörte mit dieser stillen, harten Konzentration zu, die ihr Gesicht jedes Mal bekam, wenn etwas wirklich wichtig war.

„Wenn ein Spieler einen kritischen Write macht, zum Beispiel einen Item-Kauf oder den Eintritt in ein Turnier, schreiben wir auf die Primärdatenbank in Frankfurt“, sagte Sofia. „Aber wir setzen zusätzlich ein temporäres Session-Token auf dem Client, mit dem Zeitstempel dieses Writes. Für die nächsten fünf Sekunden umgeht jede Read-Anfrage dieses Clients die regionale Replika und geht direkt auf die Primärdatenbank. Danach, wenn sich der Replikationsverzug wieder beruhigt hat, fallen wir auf die regionale Replika zurück.“

„Das ist brillant“, sagte Mariana und biss in die Brezel. „Für 99 Prozent der Spieler bleiben die Reads billig und schnell, wenn sie nur durch die UI browsen. Aber für den Spieler, der gerade Geld ausgegeben oder sich in eine Queue gestellt hat, garantierst du Konsistenz. Der sieht nie veraltete Daten.“

„Und die Datenbank-CPU?“, fragte Hassan und kam von seinem Schreibtisch herüber. „Wenn bei Lastspitzen 150.000 Spieler alle an der Replika vorbei direkt auf die Primärdatenbank gehen, hämmern wir die doch trotzdem kaputt.“

„Nein“, sagte Sofia und zeigte auf die Skizze. „Weil das Session-Token nur bei kritischen Writes gesetzt wird. Normale Reads, Leaderboard laden, Store-Inventar ansehen, andere Profile anschauen, gehen weiter auf die regionalen Replikas. Dafür brauchen wir keine starke Konsistenz. Wenn ein Leaderboard eine halbe Sekunde zu spät aktualisiert wird, merkt das niemand. Wenn aber das eigene Gold zurückspringt, macht jemand sofort ein Support-Ticket auf.“

Stefan beobachtete sie aus der Distanz, und in seiner Brust legte sich dieses stille Gefühl von Stolz ab, das er immer suchte, wenn ein Team die Kurve bekam. Dieser Übergang: weg von Technologie als magischer Kiste, die entweder funktioniert oder nicht, hin zum Verständnis der Physik des eigenen Systems und einem Design, das mit den Grenzen arbeitet statt gegen sie.

„Dann schreiben wir zuerst die Tests“, sagte Mariana und schob ihren Stuhl nach vorn. „Wir müssen beweisen, dass dieses Session-Token-Routing funktioniert. Wir schreiben einen Test, der eine Sekunde Replikationsverzug mockt und dann prüft, dass ein Read mit frischem Token den aktualisierten Zustand liefert, während ein Read mit abgelaufenem Token den alten Zustand zurückgibt.“

„Ich baue das Middleware-Stück“, sagte Sofia. Jetzt war ihre Stimme klar. Die Anspannung war vollständig verschwunden. „Hassan, kannst du den Load Balancer so konfigurieren, dass er die Session-Routing-Header respektiert?“

„Betrachte es als erledigt“, sagte Hassan. Ein seltenes Grinsen erschien in seinem Gesicht.

Donnerstag, 16:00 — Die Verifizierung

Lukas Weber hält ein Tablet, während Hassan Al-Rashid sich am Arbeitsplatz zurücklehnt und Sofia und Mariana vor Dashboards mit null Fehlern feiern; Stefan Richter steht am Server-Rack.
„Null Fehler.“

„Null Fehler“, flüsterte Sofia.

Sie sah auf den Monitor, als traue sie dem, was dort stand, noch nicht ganz.

Der Traffic lag stabil bei 150.000 gleichzeitigen Nutzerprofilen. Der Replikationsverzug zwischen Frankfurt und Singapur peakte immer noch bei 1,1 Sekunden, aber der Matchmaking-Service lief fehlerfrei.

„Das Session-Routing hält“, sagte Hassan und zeigte auf die Load-Balancer-Metriken. „Nur 4 Prozent aller Read-Requests gehen auf die Primärdatenbank. Der Rest läuft über die regionalen Replikas. Die Primärdatenbank-CPU bleibt stabil bei 42 Prozent.“

„Wir haben es geschafft“, sagte Sofia und drehte sich zu Mariana um, die gerade den Raum betrat. „Der Test ist durch. Die Last hat uns nicht gebrochen.“

„Du hast das geschafft, Sofia“, sagte Mariana und klopfte ihr auf die Schulter. „Du hast das Konsistenzmodell entworfen, und du hast die Tests geschrieben, die belegen, dass es funktioniert. Das ist Backend-Entwicklung.“

Sofia errötete leicht. Stolz und Verlegenheit lagen gleichzeitig in ihrem Gesicht. „Ohne dein Test-Setup hätte ich das nicht geschafft. Und ohne Hassans Staging-Umgebung auch nicht.“

„Genau das ist der Sinn eines Teams“, sagte Stefan und trat vor. „Wenn du Staging-Parität hast, brauchst du keine Helden. Du brauchst nur eine disziplinierte Gruppe von Entwicklern, die auf dieselben Daten schaut, die Grenzen versteht und gemeinsam eine Lösung entwirft.“

Lukas kam mit seinem Tablet in den Raum. Er sah erst auf die Monitore, dann auf Sofias Gesicht.

„Ich habe den Testclient aus meinem Büro gefahren“, sagte Lukas. Sein Ton war leise, fast ehrfürchtig. „Ich habe zehn Booster-Packs in schneller Folge gekauft und dabei mein VPN zwischen Singapur, Tokio und New York umgeschaltet. Die UI war nahtlos. Kein Freeze. Keine State-Mismatches. Es hat einfach … funktioniert.“

Er sah zu Katja, die hinter ihm in der Tür erschienen war.

„Sechs Wochen“, sagte Lukas zu ihr. „Wir sind erst in Woche zwei der Operational Realism Initiative, und wir haben schon das größte technische Risiko der Q3-Roadmap gelöst.“

„Wir haben es nicht gelöst, indem wir schneller gearbeitet haben, Lukas“, sagte Katja mit der stillen Autorität, die sie im letzten Monat zurückgewonnen hatte. „Wir haben es gelöst, indem wir klüger gearbeitet haben. Indem wir dem Team die Zeit und die Werkzeuge gegeben haben, die Physik ihres Systems zu verstehen, statt sie zum Raten zu zwingen.“

Lukas nickte langsam. „Ich beginne zu verstehen, worin der Unterschied liegt.“

Er drehte sich zu Sofia. „Großartige Arbeit, Sofia. Wirklich.“

Als Lukas hinausging, ließ Sofia einen langen, langsamen Atemzug heraus, als hätte sie ihn seit Montagmorgen angehalten.

„Ich glaube, ich brauche ein Bier“, sagte sie.

„Geht auf mich“, sagte Hassan und griff schon nach seiner Jacke.

Freitag, 17:30 — Die Physik des Vertrauens

Stefan Richter und Katja Müller sitzen sich bei Sonnenuntergang im gläsernen Konferenzraum mit offenen Laptops und Weißweingläsern gegenüber und blicken auf den Kanal hinaus.
„Ein Team, das am Donnerstag einen Lasttest mit 150.000 Nutzerprofilen fährt und am Freitag pünktlich geht, ist ein Team, das seinem System vertraut.“

„Sofias Log-Eintrag heute Abend war unglaublich“, sagte Katja und nahm einen Schluck Wein.

„Lies ihn mir vor“, sagte Stefan und lehnte sich im Stuhl zurück.

Katja öffnete den Laptop und zog die tägliche Navigator-Synthese hoch.

Ich dachte früher, Konsistenz sei eine Einstellung der Datenbank, hatte Sofia geschrieben. Man schaltet synchrone Replikation ein, und die Datenbank garantiert die Wahrheit. Aber diese Woche hat gezeigt, dass Wahrheit eine Design-Entscheidung ist. Die Datenbank kann die Lichtgeschwindigkeit nicht lösen. Nur die Anwendung kann entscheiden, auf welche Wahrheiten wir warten müssen und welche wir uns leisten können, später zu erfahren. TDD hat uns nicht nur beim Schreiben des Codes geholfen. Es hat uns geholfen, die Grenzen unserer Realität zu definieren.

Stefan lächelte und sah hinaus auf das goldene Licht, das sich auf dem Kanal spiegelte. „Das ist das ganze Curriculum in einem Absatz. Sie ist nicht mehr nur Entwicklerin. Sie ist Architektin.“

„Ist sie“, sagte Katja leise. „Und Hassan ist heute um 17 Uhr gegangen. An einem Freitag. In einer Lasttest-Woche.“

„Vielleicht ist das die wichtigste Metrik von allen“, sagte Stefan. „Ein Team, das am Donnerstag einen Lasttest mit 150.000 Nutzerprofilen fährt und am Freitag pünktlich geht, ist ein Team, das seinem System vertraut. Es wartet nicht darauf, dass die Software ihm in den Rücken fällt.“

„Wir haben noch vier Wochen Initiative vor uns“, sagte Katja und sah ihn an. „Was kommt als Nächstes?“

„Als Nächstes“, sagte Stefan, „müssen wir uns um Daniel kümmern. Er hat diese erfolgreichen Staging-Läufe beobachtet und merkt langsam, dass seine manuellen Regressions-Checklisten überflüssig werden. Er wird für seine Gates kämpfen, Katja. Nicht weil er bösartig ist, sondern weil diese Gates definieren, worin er seinen Wert für die Firma sieht.“

Katja seufzte, ihr Lächeln verlor etwas von seiner Wärme. „Die menschlichen Begrenzungen sind immer schwerer als die physikalischen, oder?“

„Immer“, sagte Stefan und hob sein Glas. „Aber immerhin haben wir jetzt die Daten auf unserer Seite.“

Katja stieß mit ihm an. „Auf die Physik.“

„Auf die Physik“, sagte Stefan.

Navigator — Katja Müller — 3. Juli 2026, 18:30

Zweite Woche der Operational Realism Initiative.

Wir haben den ersten massiven Lasttest gegen die neue Multi-Region-Staging-Umgebung gefahren und 150.000 gleichzeitige Nutzerprofile simuliert. Die Staging-Umgebung hat genau das getan, wofür wir sie gebaut haben: Sie hat die physikalischen Grenzen unserer Datenbank-Replikation sichtbar gemacht.

Unter Spitzenlast stieg der Replikationsverzug zwischen Frankfurt und Singapur auf 1,2 Sekunden. Das führte zu massiver Zustands-Desynchronisierung und zu Abstürzen im regionalen Matchmaking.

Sofia hat die architektonische Lösung angeführt. Statt die Datenbank dazu zwingen zu wollen, die Lichtgeschwindigkeit zu lösen, hat sie ein Read-Your-Own-Writes-Konsistenzmodell entworfen. Kritische Reads werden mit temporären Session-Tokens direkt auf die Primärdatenbank geroutet, während unkritische Reads weiter auf den regionalen Replikas laufen. So blieb die Read-Latenz niedrig, und Konsistenz wurde genau dort garantiert, wo sie zählt.

Der zweite Lasttest am Donnerstag war ein makelloser Erfolg. Null Fehler unter 150.000 gleichzeitigen Nutzerprofilen, bei stabilen 42% CPU auf der Primärdatenbank.

Navigator-Signale dieser Woche:

  • 100% aller Backend-Commits enthielten Testdateien. Sofia und Mariana arbeiteten als Pair an den Konsistenz-Middleware-Tests.
  • Die Stabilität der Staging-Umgebung erreichte im finalen Lasttestlauf 100%.
  • Hassans geloggte Stunden blieben diese Woche stabil bei 40. Keine Wochenend- oder Nachtarbeit nötig.
  • Lukas äußerte nach seinem eigenen Testlauf mit dem Client ein hohes Vertrauen in den Fortschritt des Teams.

Wir haben bewiesen, dass operativer Realismus keine Ablenkung von Feature-Lieferung ist, sondern deren Grundlage. Wir konnten unser größtes technisches Risiko in Woche zwei lösen, weil wir die Werkzeuge hatten, die Wahrheit zu sehen.

Nächste Woche treffen wir auf die menschlichen Grenzen. Daniel bereitet seine manuellen Regressions-Checklisten für das Turniersystem vor. Wir müssen ihm zeigen, dass automatisierte Evidenz sicherer ist als manuelle Gates.

Nächste Folge: "Das Produktionsfreigabe-Review" Mit stabiler Staging-Umgebung und synchronisierten Datenbank-Replikas bereitet sich das Team auf das letzte Produktionsfreigabe-Review vor. Doch als Daniel auf einer manuellen Regressions-Checkliste besteht, die den Launch um zwei Wochen verschieben würde, müssen Katja und Stefan seine manuellen Gates in automatisierte Nachweise verwandeln.
×
×