L = λ × W
Die nützlichste Gleichung in der Kapazitätsplanung
Für jede stabile Warteschlange, unabhängig von ihrer internen Struktur: L = λ × W, wobei:
- L = durchschnittliche Anzahl der Elemente im System (in Bearbeitung oder wartend)
- λ (Lambda) = durchschnittliche Ankunftsrate (Elemente pro Zeiteinheit)
- W = durchschnittliche Zeit, die ein Element im System verbringt
Die geometrische Interpretation: Trage λ auf einer Achse und W auf der anderen auf. Das Produkt L ist die Fläche des Rechtecks, das sie bilden. Kapazitätsplanung findet innerhalb dieses Rechtecks statt.
Warum es wichtig ist: Jedes beliebige Paar der drei Größen bestimmt die dritte. Misst man Durchsatz und Latenz, kennt man die Belegung. Misst man Belegung und Durchsatz, kennt man die Latenz. Das Gesetz ist robust: Es gilt für Web-Anfragen, Restauranttische, Supermarktschlangen und CPU-Pipelines ohne Modifikation.
Drei konkrete Beispiele:
- Ein Webdienst verarbeitet 200 Anfragen/s mit einer durchschnittlichen Latenz von 50 ms (0,05 s). L = 200 × 0,05 = 10 Anfragen in Bearbeitung.
- Ein Kaffeehaus bedient 60 Kunden/Stunde mit einer durchschnittlichen Verweildauer von 15 Minuten (0,25 h). L = 60 × 0,25 = 15 Kunden im Haus.
- Ein Backend-Pool verarbeitet 1500 Anfragen/s mit einer durchschnittlichen Latenz von 200 ms (0,2 s). L = 1500 × 0,2 = 300 Anfragen in Bearbeitung.
Auswirkung auf die Dimensionierung: Die Anzahl der Worker / Threads / Verbindungen einer Ebene muss mindestens L betragen, um Schritt zu halten. Alles Weniger führt zu einem Wachstum der Warteschlange.
Warum die Latenzzeit bei einer Auslastung über 80 % explodiert
Die wichtigste Kurve im Betrieb
Tragen Sie die Auslastung auf der x-Achse (0 % bis 100 %) und die durchschnittliche Wartezeit auf der y-Achse auf. Die Form ist eine der folgenreichsten Kurven in der Kapazitätsplanung.
Das M/M/1-Warteschlangenmodell: Für ein System mit Poisson-Ankünften (zufällig) und exponentiellen Bedienzeiten (zufällig) gilt für die durchschnittliche Wartezeit:
W_q = ρ / (μ × (1 - ρ))
wobei ρ die Auslastung (0 bis 1) und μ die Bedienrate ist.
Die Form der Kurve:
- Bei ρ = 0,5 (50 % Auslastung) ist die Wartezeit gering (1 Bedieneinheit).
- Bei ρ = 0,7 (70 % Auslastung) beträgt die Wartezeit ca. 2,3 Bedienzeiten.
- Bei ρ = 0,8 (80 % Auslastung) beträgt die Wartezeit ca. 4 Bedienzeiten.
- Bei ρ = 0,9 (90 % Auslastung) beträgt die Wartezeit ca. 9 Bedienzeiten.
- Bei ρ = 0,95 (95 % Auslastung) beträgt die Wartezeit ca. 19 Bedienzeiten.
- Bei ρ = 1,0 (100 % Auslastung) ist die Wartezeit unendlich.
Der Knickpunkt: Bei etwa 80 % Auslastung knickt die Kurve scharf ab. Unterhalb des Knickpunkts ist die Kapazität komfortabel; oberhalb steigt die Latenz schneller an als die Auslastung.
Praktische Einordnung: Ziel ist eine Auslastung von 70 % im stationären Zustand, niemals 100 %. Die 30 % „Reserve“ sind keine Verschwendung, sondern der Preis für eine begrenzte Latenz.
Größenbestimmung über das „Knie“ hinweg
Zwei Szenarien:
Szenario A: 10 Replikate mit 60 % CPU-Auslastung. Latenz p99 = 100 ms.
Szenario B: derselbe Fuhrpark mit 90 % CPU-Auslastung aufgrund des Traffic-Wachstums. p99 = 600 ms.
Derselbe Fuhrpark, derselbe Code, nur die Auslastung hat sich geändert.
Größe & Auslöser kombinieren
Synthese
Sie können nun das Little's Law als Rechteck anwenden, die Warteschlangenkurve und ihren Kniepunkt lesen und beides mit Kapazitätsentscheidungen verknüpfen.
Beides anwenden.
Eine Backend-Ebene verarbeitet 2.000 req/s mit einer durchschnittlichen Latenz von 50 ms pro Replik. Die Kapazität pro Replik beträgt 80 req/s bei 70 % CPU-Auslastung. Der Surge-Faktor beträgt 2x; du sollst 3 gleichzeitige Replik-Ausfälle überstehen.
Begleitende Notizen
Begleitende Notizen
Diese Lektion zur Geometrie formuliert die Hauptlektion Stateless Horizontal Scaling als quantitative Geometrie neu.
Die nächste Begleitlektion, geometry_of_ingress_egress_separation, formuliert die Trennung der Netzwerkgrenze als einen bipartiten Graphen mit einem Schnittknoten, den die Trennung eliminiert, neu.
Gut gemacht.