Algoritmi di limitazione della frequenza
Confronti i limitatori fixed, sliding, token e di concorrenza.
Algoritmi di limitazione della frequenza è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Perché usare il rate limiting
Il rate limiting limita il numero di richieste che un client può effettuare in un determinato intervallo di tempo. Protegge l'API da abusi, client fuori controllo e picchi di traffico accidentali, mantenendo equa la capacità disponibile tra gli utenti.
// e.g. allow 100 requests per minute per API keyRate limiting integrato
A partire da .NET 7, ASP.NET Core include un middleware di rate limiting completo in Microsoft.AspNetCore.RateLimiting, con quattro algoritmi integrati.
// Algorithms: Fixed Window, Sliding Window,
// Token Bucket, ConcurrencyFinestra fissa
L'algoritmo a finestra fissa consente N richieste per ogni intervallo di tempo fisso. Al termine dell'intervallo, il contatore viene reimpostato a zero.
È semplice, ma i picchi al confine tra due finestre possono raddoppiare temporaneamente la frequenza effettiva.
// 10 requests per 60s window
// All 10 used at 0:59, 10 more at 1:00 -> 20 in 2 secondsFinestra scorrevole
La finestra scorrevole risolve il problema dei confini dividendo l'intervallo in segmenti e facendo avanzare quelli scaduti, così il limite si applica a qualsiasi finestra temporale continua.
// 10 requests per 60s, 6 segments of 10s each
// The count slides as each segment expiresToken bucket
Il token bucket contiene un insieme di token. Ogni richiesta ne consuma uno; i token vengono reintegrati a una velocità costante. Sono consentiti brevi picchi fino alla capacità del bucket, mantenendo al contempo una media nel lungo periodo.
// Bucket = 10 tokens, refill 5 tokens / 10s
// Burst of 10 allowed, then 5 every 10 secondsLimite di concorrenza
Il limitatore di concorrenza funziona diversamente: limita il numero di richieste in elaborazione contemporaneamente, non il numero di richieste per unità di tempo. È ideale per proteggere le operazioni costose.
// At most 5 concurrent requests in flight
// The 6th waits in the queue or is rejectedLa coda
Ogni limitatore può accodare le richieste che superano il limite, invece di rifiutarle immediatamente. QueueLimit imposta le dimensioni della coda e QueueProcessingOrder stabilisce l'ordine di elaborazione, dando priorità alle richieste più vecchie o più recenti.
// QueueLimit = 2, OldestFirst
// Over-limit requests wait if a slot exists, else get 503/429Scelta dell'algoritmo
Scelga l'algoritmo in base all'obiettivo:
- Finestra fissa: è la soluzione più semplice e sufficiente in molti casi.
- Finestra scorrevole: è più uniforme ed evita i picchi ai confini.
- Token bucket: consente picchi controllati.
- Concorrenza: limita il carico simultaneo, non la frequenza.
// Bursty clients -> token bucket
// Expensive endpoint -> concurrencyPartizionamento
I limiti vengono applicati per chiave di partizione, in genere l'utente, la chiave API o l'indirizzo IP, così un singolo client rumoroso non può esaurire la quota di tutti. Un'unica partizione condivisa limiterebbe tutto il traffico insieme.
// Partition by user id, IP, or API key
// Each partition gets its own independent counterCiò che vede il client
Una richiesta rifiutata restituisce HTTP 429 Too Many Requests. Un'API ben progettata restituisce anche un header Retry-After che indica al client quando riprovare.
// HTTP/1.1 429 Too Many Requests
// Retry-After: 30Rate limiting, throttling e quote a confronto
Si tratta di concetti correlati: il rate limiting limita la frequenza a breve termine, le quote limitano i totali su periodi più lunghi, ad esempio per giorno o per mese, mentre il throttling rallenta il traffico invece di rifiutarlo. Il middleware si concentra sul rate limiting.
// rate limit: 100/min quota: 10000/dayVerifica rapida
Verifichi la sua comprensione degli algoritmi.
Riepilogo
Ha appreso i concetti del rate limiting:
- Quattro algoritmi: finestra fissa, finestra scorrevole, token bucket e concorrenza.
- Il token bucket consente picchi; la concorrenza limita il carico simultaneo.
- I limiti vengono applicati per chiave di partizione; le code gestiscono i superamenti temporanei.
- Le richieste rifiutate ricevono 429 con
Retry-After.
Prossimo argomento: configurazione del middleware.
Domande Frequenti
La lezione «Algoritmi di limitazione della frequenza» è gratuita?
Sì — il testo completo di «Algoritmi di limitazione della frequenza» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Algoritmi di limitazione della frequenza»?
Confronti i limitatori fixed, sliding, token e di concorrenza. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Algoritmi di limitazione della frequenza»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Algoritmi di limitazione della frequenza
- Configurazione del middleware di limitazione della frequenza
- Nozioni di base sull'output caching
- Policy e invalidazione della cache