L = λ × W: Un Rettangolo
La Legge di Little: L'Equazione Più Utile nella Pianificazione della Capacità
John Little ha provato nel 1961 che per qualsiasi coda stabile, indipendentemente dalla sua struttura interna: L = λ × W, dove:
- L = numero medio di elementi nel sistema (coda + in servizio)
- λ (lambda) = tasso medio di arrivo degli elementi per unità di tempo
- W = tempo medio che ogni elemento trascorre nel sistema
La lettura geometrica: traccia il tasso di arrivo λ su un asse & il tempo di residenza W sull'altro. Il prodotto L è l'area del rettangolo che formano. La pianificazione della capacità vive dentro questo rettangolo.
Perché è importante: due qualsiasi dei tre valori determinano il terzo. Se misuri il throughput e la latenza, conosci l'occupazione. Se misuri l'occupazione e il throughput, conosci la latenza. La legge è robusta: si applica alle richieste web, ai tavoli dei ristoranti, alle code dei supermercati e alle pipeline CPU senza modifiche.
Tre esempi concreti:
- Un servizio web gestisce 200 richieste/secondo con latenza media di 50 ms (0.05 s). L = 200 × 0.05 = 10 richieste in volo in qualsiasi momento.
- Un bar serve 60 clienti/ora con tempo medio di permanenza di 15 minuti (0.25 h). L = 60 × 0.25 = 15 clienti dentro in media.
- Una linea di produzione produce 100 widget/ora con ogni widget che impiega 2 ore da inizio a fine. L = 100 × 2 = 200 widget in processo.
Implicazione di provisioning: se riesci a dimensionare per L (elementi in volo simultaneamente), hai dimensionato il sistema. Il numero di thread di lavoro, connessioni al database, o slot di coda derivano tutti da L.
Dimensionamento di un Pool di Worker
Il tuo servizio di transcodifica video è dimensionato per un tasso medio di arrivo di 30 job di transcodifica al minuto, ognuno che richiede 90 secondi da inizio a fine. Il pool di worker attuale ha 30 worker.
Perché la Latenza Esplode Oltre l'80% di Utilizzo
La Curva Più Importante nella Pianificazione della Capacità
Traccia l'utilizzo sull'asse x (0% al 100%) & la latenza media sull'asse y. La forma che emerge è una delle curve più consequenziali nelle operazioni: spiega perché i team mirano a un utilizzo ben al di sotto del 100%, perché il margine riservato non è spreco, & perché i sistemi che girano 'efficientemente' ad alto utilizzo crollano senza preavviso.
La curva di accodamento M/M/1: per un sistema con arrivi di Poisson (casuali) & tempi di servizio esponenziali (casuali), il tempo medio di attesa segue:
W_q = ρ / (μ(1-ρ))
dove ρ (rho) è l'utilizzo (0 a 1) & μ è il tasso di servizio. Il denominatore (1-ρ) è il punto cruciale: man mano che ρ si avvicina a 1, il denominatore si avvicina a 0, & il tempo di attesa si avvicina all'infinito.
Esempi numerici (moltiplicatore di latenza vs ρ per M/M/1):
- ρ = 0.5: rapporto di latenza 1.0 (baseline)
- ρ = 0.7: rapporto di latenza ~2.3
- ρ = 0.8: rapporto di latenza ~4.0
- ρ = 0.9: rapporto di latenza ~9.0
- ρ = 0.95: rapporto di latenza ~19.0
- ρ = 0.99: rapporto di latenza ~99.0
Il gomito si trova intorno al 70-80% di utilizzo. Al di sotto del gomito, aggiungere carico aumenta la latenza lentamente. Al di sopra del gomito, la latenza esplode in modo non lineare. Questo è il motivo per cui la regola canonica dell'SRE è: punta a un utilizzo allo stato stazionario al di sotto dell'80%, non eseguire mai sostenuto al di sopra del 90%.
Perché i team operativi tradizionali sottovalutano questo: un server al 60% CPU 'sembra occupato' ma ha un comodo margine di latenza. Un server al 90% CPU 'sembra produttivo' ma è a un urto di carico lontano dalla catastrofe di latenza. La verità geometrica: la pendenza della curva è la minaccia effettiva, non il suo valore y attuale.
Leggere la Curva
Un team esegue un servizio al 85% di utilizzo CPU allo stato stazionario. La latenza p99 attuale è 200 ms. Stanno considerando di aggiungere il 30% di traffico in più per consolidare il carico di lavoro da un altro servizio che viene interrotto.
Pendenza, Intercetta, & il Cono di Previsione
Leggere la Crescita da una Pendenza
La previsione della domanda si riduce (in molti casi) a disegnare la linea giusta attraverso i dati storici. Le proprietà geometriche di quella linea: pendenza, intercetta, & il cono di incertezza, codificano l'intera previsione.
Trend lineare (y = mx + b): appropriato per finestre brevi o processi genuinamente lineari. La pendenza m è il tasso di crescita per unità di tempo. L'intercetta b è il valore di inizio. Utile quando la crescita è costante. Tende a sottostimare quando il processo è effettivamente composto.
Trend esponenziale (y = b × e^(mx)): appropriato per la crescita composta: adozione virale, effetti di rete degli utenti, moltiplicatività stagionale. Su un asse y a scala logaritmica, la crescita esponenziale diventa lineare, il che rende la stima della pendenza più facile. La pendenza m su scala logaritmica è il tasso di crescita per unità di tempo.
Lineare a pezzi: appropriato quando la crescita ha regimi distinti. Un'azienda in avviamento potrebbe crescere lentamente per 18 mesi, poi avere un'inflessione virale che produce 6 mesi di crescita esplosiva, poi stabilizzarsi. Tre segmenti lineari si adattano meglio a questa situazione di qualsiasi curva singola.
Cono di previsione: la stima centrale più i limiti superiori & inferiori, disegnati come un cono che si allarga nel futuro. La larghezza del cono cresce nel tempo perché l'incertezza si compone. Una previsione di 4 settimane potrebbe avere limiti di ±10%; una previsione di 12 mesi spesso ha ±50% o più.
Decomposizione della stagionalità: la domanda reale combina trend + ciclo stagionale + rumore. Le librerie statistiche (statsmodels, Prophet) decomposero una serie in questi tre componenti, permettendo al trend di essere proiettato separatamente dal modello stagionale. Geometricamente, il trend è la deriva sottostante, la stagionalità è l'ondulazione periodica sopra, & il rumore è il jitter residuo.
Scegliere un Modello di Trend
Hai 24 mesi di volumi mensili di richieste. I mesi 1-12 sono cresciuti da 1M a 2M (aspetto lineare, +83K/mese). I mesi 13-18 sono cresciuti da 2M a 4M (più ripido, +330K/mese). I mesi 19-24 sono cresciuti da 4M a 12M (molto più ripido ancora). Marketing conferma che una funzione di prodotto virale è stata lanciata nel mese 13 guidando l'inflessione.
Capacità vs Domanda come Geometria 2D
Il Grafico Dentro Cui Ogni Team di Capacità Vive
Traccia il tempo sull'asse x. Traccia domanda & capacità sull'asse y come due linee separate. Il divario verticale tra loro in qualsiasi momento nel tempo è il margine. L'area 2D tra le curve è l'inviluppo di margine.
Tre forme di riferimento:
- Inviluppo sano: la linea di capacità rimane comodamente al di sopra della linea di domanda. Il divario potrebbe restringersi durante i picchi ma non scompare mai. L'inviluppo è una banda di sicurezza.
- Inviluppo che si chiude: la capacità cresce più lentamente della domanda. Il divario si restringe nel tempo. Il punto di intersezione nel futuro è quando il sistema esaurisce il margine: la data entro cui il team deve aggiungere capacità.
- Inviluppo invertito: la domanda supera la capacità. Il sistema è in territorio di incidente. La grandezza verticale dell'inversione è il deficit che deve essere servito in qualche modo (overflow della coda, tassi di errore, impatto sui clienti).
Il grafico di pianificazione della capacità standard traccia:
- Storico della domanda recente (linea blu continua)
- Previsione della domanda con limiti (linea tratteggiata + cono ombreggiato)
- Capacità attuale (linea verde continua)
- Aggiunte di capacità pianificate con date di consegna (funzione a gradini)
- La data di intersezione in cui la domanda prevista supera la capacità attuale: questa è la scadenza per il prossimo provisioning
La regola di decisione visiva: mantieni la funzione a gradini di capacità al di sopra del limite superiore del cono di previsione in ogni momento. Non eseguire il provisioning alla stima centrale; esegui il provisioning al limite superiore. Il costo del provisioning eccessivo è finito (un po' di capacità inattiva); il costo del provisioning insufficiente è illimitato (utenti persi, fallimento a cascata, danno alla reputazione).
Leggere l'Inviluppo
Il tuo grafico di capacità mostra: la domanda attuale è 1,500 RPS in crescita del 20% al mese. La capacità attuale è 2,500 RPS. Un nuovo lotto di server (+1,500 RPS di capacità) arriva in 8 settimane. Il cono di previsione ha limiti di ±15% all'orizzonte di 8 settimane.
Geometria della Capacità: Ricapitolazione
Forme che Prevedono il Futuro
Hai percorso quattro strutture geometriche che corrono sottostante la pianificazione della capacità:
- La Legge di Little (L = λ × W) come l'area di un rettangolo che definisce l'occupazione allo stato stazionario
- La curva di accodamento con il suo gomito all'80% di utilizzo, codificando il costo non lineare di funzionare caldo
- Pendenze di trend & coni di previsione che trasformano i dati storici in proiezioni attuabili
- Inviluppi di margine come grafici 2D di capacità rispetto a domanda, con date di intersezione che contrassegnano le scadenze di provisioning
La pianificazione della capacità è, al suo nucleo visivo, la disciplina di mantenere una curva in sicurezza al di sopra di un'altra nel tempo. I numeri sono decorazione; le forme portano la verità. Un ingegnere di capacità che legge correttamente la curva di accodamento coglierà i problemi che una dashboard CPU nasconde fino a quando il sistema non è già in fiamme.
La lezione complementare sulla pianificazione della capacità ha coperto le pratiche: misurazione, previsione, test di soffitto, margine, & ridimensionamento. Questa lezione ha coperto la geometria sottostante. Insieme formano l'impalcatura visiva & analitica della gestione di servizi che si ridimensionano senza sorprese.