Lessons Learned
36 Engineering-Praxisberichte und die Lehren daraus.
Gesammelt von unseren Engineers und aus der Branche: 36 Geschichten über Redis-Zusammenbrüche, bereute Microservices, Cloud-Kostenüberraschungen und Kubernetes-Ausfälle — und was jede davon lehrt.
Redis-Cache-Überlastung legt Datenbank lahm
Ein Traffic-Spike trieb Redis auf 100% CPU, Timeouts galten als Cache Misses — der Stampede tötete die Datenbank in 30 Sekunden.
Lesen → Caching #2Redis noeviction: Wenn Schreibvorgänge stoppen
Redis mit noeviction stürzt nicht ab — es lehnt Schreibvorgänge ab. Sessions und Zahlungen fielen aus, weil sie eine Instanz mit dem Cache teilten.
Lesen → Caching #3Desaster durch veraltete Cache-Daten
Eine Aktion endete in der Datenbank, lebte aber vier Stunden im Cache weiter: 327 Bestellungen zum alten Preis, rund $49.000 verschenkt.
Lesen → Caching #4Cache-Invalidierung: Zwei harte Lektionen
Ein Cache-Key, der die Daten eines Nutzers an alle auslieferte, und ein Invalidierungs-Fan-out, den niemand überblickte. Was wir geändert haben.
Lesen → Caching #5Wenn Multi-Layer-Caching scheitert
L1-, L2- und L3-Cache für „bessere Performance“ — und plötzlich drei Stellen, an denen Daten falsch sein können, statt einer.
Lesen → Caching #6Rate Limiter: Der Redis-Crash
Der Rate Limiter hielt seinen Zustand in Redis. Als Redis ausfiel, ging er auf Fail-open — und der abgewehrte Traffic flutete direkt in die API.
Lesen → Caching #7Session-Storage-Migration auf Redis
Sessions für horizontale Skalierung nach Redis verlegt — und vergessen, dass Redis In-Memory ist. Ein Neustart loggte 50.000 Nutzer aus.
Lesen → Cloud #8Spot-Instance-Desaster am Black Friday
100% Spot zum Kostensparen. Am Black Friday zog AWS 50 Instanzen auf einmal zurück, die AZ hatte keine freie Kapazität: 15 Minuten Teilausfall.
Lesen → Cloud #9Die $50.000-CloudWatch-Logging-Rechnung
Log-alles-Kultur plus ein vergessenes Debug-Statement ergaben einen $50.000-CloudWatch-Monat. Die Rechnung dahinter und die Fixes auf $3.200.
Lesen → Cloud #10Multi-Region-Replikation, die niemand nutzte
Replikation über drei Regionen für $8.000 im Monat, null Failover-Tests in 18 Monaten. Wie wir auf $1.200 kamen — mit einer gemessenen RTO.
Lesen → Cloud #11Staging kostet mehr als Produktion
Staging lief 24/7 in Prod-Größe bei 24% Auslastung. Geplantes Abschalten, kleinere Instanzen und Slack-Hochfahren senkten die Kosten um 60%.
Lesen → Cloud #12Überraschung bei den VPC-Egress-Kosten
Kaum Compute, trotzdem hohe AWS-Rechnung: das NAT Gateway verarbeitete 500GB Trainingsdaten täglich. VPC-Endpoints drückten $20.250 auf $1.200.
Lesen → Kubernetes #13Autoscaling, das die Datenbank lahmlegte
Ein HPA skalierte Pods von 5 auf 50 und trieb PostgreSQL über max_connections in einen Restart-Sturm. PgBouncer und HPA-Ratenlimits halfen.
Lesen → Kubernetes #14Health Checks, die logen
Pods meldeten sich gesund, konnten aber nicht bedienen — dann löste eine Liveness Probe mit Dependency-Checks einen Restart-Sturm aus.
Lesen → Kubernetes #15Ausfall durch ConfigMap-Tippfehler
Zwei Stunden Produktionsausfall wegen eines falsch geschriebenen Keys in einer ConfigMap. Warum nichts ihn validierte und wie Fail-fast hilft.
Lesen → Kubernetes #16Docker-Image mit 47 CVEs
Ein Security-Audit fand 47 bekannte CVEs in einem 18 Monate alten Produktions-Image. Wie Scanning, Pinning und Rebuilds Images sauber halten.
Lesen → Kubernetes #17Hochverfügbarkeit, die keine war
Drei Replicas auf drei Nodes sahen hochverfügbar aus — bis wir merkten, dass alle Nodes in us-east-1a standen. Topology Spread richtig gemacht.
Lesen → Kubernetes #18Rechnungsschock durch Cross-AZ-Traffic
Geschwätzige Microservices über drei AZs addierten still rund $8K im Monat an Datentransfer. Wie Topology-aware Routing den Traffic um 60% senkte.
Lesen → Kubernetes #19Pod-Eviction-Kaskade
Ein Node erreichte die Eviction-Schwelle, verdrängte alle Pods und nahm sie gleich wieder auf. Wie die Schleife läuft und welche Limits sie brechen.
Lesen → Kubernetes #20Ingress Controller als Single Point of Failure
Zwanzig Services mit je drei Replicas hinter einem einzigen ingress-nginx-Pod. Ein OOMKill nahm alle vom Netz. Der Fix: vier Zeilen Helm.
Lesen → Microservices #21Microservices aus den falschen Gründen
Zwölf Deployables für 50 tägliche Nutzer und ein Vier-Personen-Team. Die echten Kosten — Bus-Faktor, Dauerbereitschaft, $3K/Monat Infrastruktur.
Lesen → Microservices #22Microservices-Konsolidierung, die schiefging
10 Microservices zu 3 zusammenführen: sechs Monate statt sechs Wochen. Versteckte Async-Abhängigkeiten, doppelte Datenhoheit, umgekehrter Strangler.
Lesen → Microservices #23Alles skaliert außer der Datenbank
20 Services wunderbar skaliert — alle auf derselben PostgreSQL-Instanz mit max_connections=100. Die Rechnung, die Todesspirale, der Fix.
Lesen → Microservices #2420.000 Workloads nach Kubernetes: Post-Mortem
Als 20.000 Microservices verkauft, real 900 Services auf 20.000 Instanzen. Warum der Lift-and-Shift nach Kubernetes scheiterte und was funktioniert.
Lesen → Microservices #25Den Monolithen zu schnell aufgeteilt
15 Microservices in 3 Monaten, 2 Jahre Korrektur: Warum Service-Grenzen nach Tabellen statt nach Bounded Contexts alles verlangsamten.
Lesen → Microservices #26Die Hölle der Teilausfälle
1 von 8 Services zu 50% ausgefallen — und das ganze Produkt unbenutzbar. Warum Teilausfälle schlimmer sind als ein Komplettausfall.
Lesen → Microservices #27Von 1K auf 10K RPS: Komplexitätsexplosion
10x Traffic sprengte Connection Pools, Timeout-Budgets und die Logging-Rechnung. Was brach, welche Signale es gab und welche Patterns halfen.
Lesen → Microservices #28Microservices waren eine Organisationsfrage
Unsere Architektur spiegelte exakt das Organigramm. Als die Reorganisation kam, brach alles — Conway's Law in Aktion.
Lesen → Architektur #29Blue-Green-Config-Drift
Ein nur in Blue umgelegtes Feature Flag fiel beim Cutover still zurück. Wie Git plus ein gemeinsamer Flag-Service den Drift beendeten.
Lesen → Architektur #30Lambda Cold Starts: unser P99-Fix
P50 bei 50ms, P99 bei 8 Sekunden: Wie SnapStart und kleinere Pakete unsere Java-Lambda retteten — und welcher VPC-Rat veraltet ist.
Lesen → Architektur #31Service-Mesh-Overhead: Was wir falsch gemacht haben
Wir gaben Istio die Schuld für 15ms pro Hop — ausgehungerte Sidecars waren der Grund. Realistische Mesh-Zahlen und wann sich ein Mesh lohnt.
Lesen → Architektur #32Serverless-Lock-in: die Realität
Voll auf AWS Serverless gesetzt; eine Migration zu GCP würde 18 Monate dauern. Warum Lock-in ein Risiko ist, aber nicht automatisch ein Problem.
Lesen → Architektur #33Blue-Green-Datenbank-Albtraum
Eine destruktive Schemamigration machte den Rollback mitten im Incident unmöglich. Expand/Contract über drei Releases hält Blue-Green umkehrbar.
Lesen → Architektur #34Der Cache, der Latenz hinzufügte
Ein Redis-Cache sollte Requests beschleunigen — mit 3% Hit Rate machte er jeden Request langsamer. Die Cache-Rechnung, die jedes Team vorher braucht.
Lesen → Architektur #35Event Sourcing für CRUD
Event Sourcing für eine CRUD-App mit 500 Nutzern: vier Monate Infrastruktur, zwei Wochen Features. Wann das Pattern seinen Preis wert ist.
Lesen → Architektur #36Engpass bei horizontaler Skalierung
Auf 50 Instanzen skaliert, und der Engpass wanderte nur weiter: App, Datenbank, Load Balancer, Queue. Kapazitätsplanung Ende-zu-Ende, die trägt.
Lesen →