Engpass bei horizontaler Skalierung
Wir haben horizontal auf 50 Instanzen skaliert. Der Engpass ist nur weitergewandert.
Phase 1: Engpass in der Anwendung
- 5 App-Server, 100% CPU
- Lösung: Auf 20 Server skalieren
- Ergebnis: App-CPU 30%
Phase 2: Engpass in der Datenbank
- Datenbank: 100% CPU, 5000 Verbindungen
- Lösung: Connection Pooling, Read Replicas
- Ergebnis: Datenbank-CPU 60%
Phase 3: Engpass im Load Balancer
- Die ALB-Skalierung hinkte einem steilen Traffic-Spike hinterher — ALBs skalieren automatisch über LCUs, aber nicht sofort, und unser Spike war schneller
- Lösung: vor bekannten Traffic-Events vorskaliert (in Abstimmung mit dem AWS Support) und den spitzenlastigsten internen TCP-Traffic auf einen NLB verlegt
- Ergebnis: Traffic verteilt
Phase 4: Engpass in der Message Queue
- RabbitMQ-Einzelknoten gesättigt
- Lösung: Geclusterte Queue, partitionierte Topics
- Ergebnis: Nachrichten fließen
Die Lektion:
Theory of constraints, applied to systems:
System throughput = min(
app_capacity,
db_capacity,
network_capacity,
queue_capacity,
external_api_capacity
)
Was wir gelernt haben:
- Den Engpass VOR dem Skalieren identifizieren
- Den gesamten Pfad lasttesten
- Alle Komponenten überwachen, nicht nur die Apps
- Manchmal ist vertikales Skalieren günstiger
Lasttests über den gesamten Pfad — vom Client bis zur Datenbank und zurück, nicht nur die App-Schicht — sind eine Standardübung in unseren DevOps-Engagements, denn die Komponente, die Sie nicht getestet haben, ist die, in der der nächste Engpass sitzt.
Lektion: Eine Komponente zu skalieren verschiebt den Engpass zur nächsten. Planen Sie die Kapazität Ende-zu-Ende.
Incidents wie dieser sind vermeidbar. Unser AWS Managed Services-Team überwacht Kundenumgebungen 24/7 mit KI-gestütztem Monitoring und Senior Engineers auf dem Pager — damit Geschichten wie diese im Archiv bleiben.