Il rate limiting è un meccanismo importante per controllare l’utilizzo delle risorse e mantenere la qualità del servizio. Go supporta elegantemente il rate limiting con goroutine, canali e ticker. |
|
![]() ![]()
|
|
|
|
|
|
Prima vedremo il rate limiting di base. Supponiamo di voler limitare la gestione delle richieste in arrivo. Serviremo queste richieste da un canale con lo stesso nome. |
|
Questo canale |
|
Bloccandoci su una ricezione dal canale |
|
Potremmo voler consentire brevi raffiche di richieste nel
nostro schema di rate limiting preservando il
limite generale del rate. Possiamo farlo
bufferizzando il nostro canale limiter. Questo canale |
|
Riempiamo il canale per rappresentare la raffica consentita. |
|
Ogni 200 millisecondi proveremo ad aggiungere un nuovo
valore a |
|
Ora simuliamo altre 5 richieste in arrivo. Le prime
3 di queste beneficeranno della capacità di raffica
di |
|
Eseguendo il nostro programma vediamo il primo lotto di richieste gestite una volta ogni ~200 millisecondi come desiderato. |
|
Per il secondo lotto di richieste serviamo le prime 3 immediatamente a causa del rate limiting con raffiche, poi serviamo le rimanenti 2 con ritardi di ~200ms ciascuna. |
|
Prossimo esempio: Contatori Atomici.