L = λ × W
La equazione più utile nel pianificamento della capacità
Per qualsiasi coda stabile, indipendentemente dalla sua struttura interna: L = λ × W, dove:
- L = numero medio di elementi nel sistema (in corso di elaborazione o in attesa)
- λ (lambda) = tasso medio di arrivo (elementi per unità di tempo)
- W = tempo medio trascorso da ciascun elemento nel sistema
La lettura geometrica: traccia λ su un asse e W sull'altro. Il prodotto L è l'area del rettangolo che formano. Il pianificamento della capacità vive all'interno di questo rettangolo.
Perché è importante: due delle tre quantità determinano la terza. Misuri throughput e latenza, sapete l'occupazione. Misuri occupazione e throughput, sapete la latenza. La legge è robusta: si applica a richieste web, tavoli di ristoranti, code dei supermercati e pipeline CPU senza modifiche.
Tre esempi concreti:
- Un servizio web gestisce 200 richieste al secondo con latenza media di 50 ms (0,05 s). L = 200 × 0,05 = 10 in corso di elaborazione.
- Un bar serve 60 clienti all'ora con tempo di permanenza medio di 15 minuti (0,25 h). L = 60 × 0,25 = 15 clienti all'interno.
- Una pool backend gestisce 1500 richieste al secondo con latenza media di 200 ms (0,2 s). L = 1500 × 0,2 = 300 in corso di elaborazione.
Implicazione di dimensionamento: il numero di worker / thread / connessioni di un livello deve essere almeno L per mantenere il ritmo. Qualcosa di meno significa crescita della coda.
Perché la latenza esplode oltre l'80% di utilizzo
La curva più importante nelle operazioni
Rappresentazione dell'utilizzo del plot sulle ascisse (0% a 100%) & del tempo medio di attesa sulle ordinate. La forma è una delle curve più importanti nella pianificazione delle capacità.
Il modello di coda M/M/1: per un sistema con arrivi di Poisson (casuali) & tempi di servizio esponenziali (casuali), il tempo medio di attesa:
W_q = ρ / (μ × (1 - ρ))
dove ρ è l'utilizzo (0 a 1) & μ è il tasso di servizio.
La forma della curva:
- A ρ = 0.5 (50% di utilizzo), il tempo di attesa è piccolo (1 tempo di servizio).
- A ρ = 0.7 (70% di utilizzo), il tempo di attesa è ~2.3 tempi di servizio.
- A ρ = 0.8 (80% di utilizzo), il tempo di attesa è ~4 tempi di servizio.
- A ρ = 0.9 (90% di utilizzo), il tempo di attesa è ~9 tempi di servizio.
- A ρ = 0.95 (95% di utilizzo), il tempo di attesa è ~19 tempi di servizio.
- A ρ = 1.0 (100% di utilizzo), il tempo di attesa è infinito.
La ginocchia: intorno all'80% di utilizzo, la curva piega bruscamente. Sotto la ginocchia, la capacità è confortevole; sopra, la latenza aumenta più velocemente dell'utilizzo.
Lettura pratica: mira a un utilizzo del 70% per lo stato di equilibrio; non il 100%. Il 30% di 'spazio libero' non è spreco; è il prezzo della latenza limitata.
Dimensionamento oltre la Ginocchia
Due scenari:
Scenario A: 10 repliche in esecuzione al 60% di CPU. Latenza p99 = 100 ms.
Scenario B: stesso fleet in esecuzione al 90% di CPU a causa della crescita del traffico. p99 = 600 ms.
Stesso fleet, stesso codice, cambiato solo l'utilizzo.
Dimensionamento e Triggers insieme
Synthesis
Puoi ora applicare la legge di Little come un rettangolo, leggere la curva della coda e la sua ginocchia, e connettere entrambi alle decisioni di capacità.
Applica entrambi.
Un livello back-end gestisce 2.000 richieste al secondo con latenza media di 50 ms per capacità replica 80 richieste al secondo al 70% del CPU. Fattore di sopravvivenza 2x; vuoi sopravvivere a 3 fallimenti simultanei dei replicanti.
Note di accompagnamento
Note di accompagnamento
Questa lezione sulla geometria ridisegna la lezione principale Scaling orizzontale senza stato come geometria quantitativa.
La prossima compagna, geometry_of_ingress_egress_separation, ridisegna lo spartimento del confine di rete come un grafo bipartito con un vertice di taglio che rimuove lo spartimento.
Ben fatto.