GH GambleHub

Rate limits e quote

Rate limits e quote sono una meccanica fondamentale per la gestione della domanda di risorse condivise: CPU, rete, database, code, API esterne. L'obiettivo è la giustizia (fairness), la prevedibilità dello SLO e la protezione contro i picchi, gli abusi e il «noisy neighbor».


1) Concetti di base

Rate limit - Limita l'intensità delle query/operazioni (req/s, msg/min, byte/s).
Burst è un picco a breve termine valido sopra il rate medio.
Quota è il limite di tempo per finestra (documenti/ore, GB/mese).
Concurrency cap - Limita le operazioni simultanee (query simultanee/jobs).
Scope è l'ambito di applicazione: per-tenant, per-user, per-token, per-endpoint, per-IP, per-region, per-feature.


2) Algoritmi di limitazione

2. 1 Token Bucket (secchio di token)

Le opzioni sono «rate» (token/secondi), «burst» (dimensione secchio).
Funziona come «credito»: i token accumulati consentono picchi brevi.
Adatto per API esterne e query personalizzate.

2. 2 Leaky Bucket (secchio fluente)

Fluidifica il flusso a velocità costante.
Ottimo per alleggerire il traffico a backend sensibili.

2. 3 Fixed/Sliding Window

Fissed window: semplice, ma vulnerabile al cambio di finestra.
Sliding window: più preciso, ma più costoso calcolando.

2. 4 GCRA (Generic Cell Rate Algorithm)

L'equivalente di Token Bucket in termini di tempo di arrivo virtuale.
Accurato e stabile per i limitatori distribuiti (stato meno conflittuale).

2. 5 Concurrency Limits

Vincola le operazioni in esecuzione contemporaneamente.
Protegge contro l'esaurimento dei pool di flussi/connessioni e «head-of-line blocking».


3) Dove applicare i limiti

Al confine (gateway L7/API): barriera principale, guasto rapido (429/503), controlli a basso costo.
All'interno dei servizi: caps aggiuntivi per operazioni pesanti (esporti, report, trasformazioni).
All'uscita dei sistemi esterni: limiti individuali di terze parti (anti-penalty).
In coda/worker: fairness ai pool condivisi.


4) Scorci e priorità (multi-tenant)

Иерархия: Global → Region → Tenant/Plan → User/Token → Endpoint/Feature → IP/Device.
Priority-aware: VIP/Enterprise ottiene più «burst» e peso, ma non distrugge le SLO comuni.
Composizione dei limiti: tolleranza totale = 'min (globale, regionale, tenante, utente, endpoint)'.


5) Quote di volume

Quote giornaliere/mensili: documenti/giorno, GB/mese, messaggi/min.
Soglie morbide/rigide: avvertenze (80/90%) e stop rigido.
Roll-up - Conteggio degli oggetti (tabelle, file, eventi) e output.


6) Limitatori distribuiti

Requisiti: ritardo basso, coerenza, resistenza ai guasti, scalabilità orizzontale.

Locale + sync probabilistic: secchi di chard locali + sincronizzazione periodica.
Central store: Redis/KeyDB/Memcached с LUA/atomic ops (INCR/PEXPIRE).
Sharding: chiavi della vista «limit: {scope}: {id}: {window}» con distribuzione uniforme.
Clock skew - Memorizza la verità sul server limitatore anziché sui client.
Idempotenza: le chiavi di transazione (Idempotency-Key) riducono i falsi prelievi.


7) Anti-abuse e protezione

Per-IP + device fingerprint per endpoint pubblici.
Proof-of-Work/CAPTCHA in caso di anomalie.
Slowdown (throttling) invece di guasto completo quando UX è più importante (suggerimenti di ricerca).
Adattative limits: riduzione dinamica delle soglie per incidenti/degrado costoso.


8) Comportamento client e protocollo

Codici: '429 Too Many Recests' (rate),' 403 '(quota/piano superata),' 503 '(degrado di protezione).

Titoli di risposta (best practice):
  • «Retry-After: » - quando riprovare.
Famiglia IETF:
  • `RateLimit-Limit: ;w=`
  • `RateLimit-Remaining: `
  • `RateLimit-Reset: `
  • Backoff: esponenziale + jitter (full jitter, equal jitter).
  • Idampotenza: titolo «Idempotency-Key» e ripetibilità delle operazioni sicure.
  • Timeout e annulla - Interrompere correttamente le query in sospeso per non «catturare» i limiti.

9) Osservabilità e test

Теги: `tenant_id`, `plan`, `user_id`, `endpoint`, `region`, `decision` (allow/deny), `reason` (quota/rate/concurrency).
Metriche: larghezza di banda, failover, p95/p99 ritardi limitatori, hit ratio cache chiavi, distribuzione pianificata.
I loghi di verifica sono le cause dei blocchi, il top delle chiavi rumorose.
I test sono i profili di carico «sega/burst/platea», il caos - il guasto di Redis/Shard, la rassincronizzazione dell'orologio.


10) Integrazione con il bollettino

I contatori Usage vengono assemblati al limite, aggregati con batch (ogni N min) con idipotenza.
Il riepilogo dei piani è un sovraccarico o un aumento temporaneo del piano.
Soluzione temporanea - Comprimere usage vs invoice; Gli alert sul delta.


11) Fairness all'interno (code, worker)

Weighted Fair Queuing/DRR: distribuzione delle slot tra gli affittuari in base al peso del piano.
Per-tenant worker pools - isolamento rigido VIP/rumoroso.
Admision control: errore prima dell'esecuzione se le quote sono esaurite; le code non si gonfiano.
Caps su concertency - Limita i giubbotti pesanti simultanei.


12) Profili di piano tipici (esempio)

yaml plans:
starter:
rate: 50  # req/s burst: 100 concurrency: 20 quotas:
daily_requests: 100_000 monthly_gb_egress: 50 business:
rate: 200 burst: 400 concurrency: 100 quotas:
daily_requests: 1_000_000 monthly_gb_egress: 500 enterprise:
rate: 1000 burst: 2000 concurrency: 500 quotas:
daily_requests: 10_000_000 monthly_gb_egress: 5000

13) Riferimento architettonico (schema verbale)

1. Edge/API gateway: TLS è in grado di estrarre il contesto (tenant/plan), di controllare i limiti/le quote, di assegnare i titoli di - /trace.
2. Policy Engine: regole di priorità (VIP), soglie adattive.
3. Limiter Store: Redis/KeyDB (atomic ops, LUA), crash delle chiavi, replica.
4. Servizi: limite secondario e caps per operazioni pesanti Idampotenza; code WFQ/DRR.
5. Usage/Billing: raccolta, aggregazione, fattura, alert alle soglie.
6. Osservabilità: metriche/logi/roulotte con tag, dashboard per-tenant.


14) Foglio di assegno prima di vendere

  • Sono stati definiti gli scop dei limiti (tenant/user/token/endpoint/IP) e la loro gerarchia.
  • L'algoritmo selezionato (Token Bucket/GCRA) e i parametri «rate/burst».
  • Implementati concurrency caps e admision control per operazioni pesanti.
  • Le intestazioni «RateLimit -» e «Retry-After» sono abilitate; i clienti supportano backoff + jitter.
  • Limitatore distribuito e resistente ai guasti (chard, replica, degrado).
  • La raccolta Usage è idipotente; il collegamento con il bollettino, gli alert per il sovraccarico.
  • Osservabilità: metriche/roulotte/logi con tag, top chiavi «rumorose», alerter's.
  • Test: burst, «sega», errore di store, clock skew, inizio freddo.
  • Documentazione client: limiti di pianificazione, esempi 429/Retry-After, best pratices retraes.
  • Criteri di esclusione: come aumentare temporaneamente i limiti e quando.

15) Errori tipici

Un limite globale senza per-tenant/per-endpoint - «noisy neighbor» rompe tutto lo SLO.
Assenza di «burst»: UX soffre di picchi brevi.
Usare solo una finestra fissa per «doppio colpo al limite della finestra».
Nessuna idipotenza e nessun retro con jitter.
I limiti sono solo al confine, senza caps nei servizi/code, i «tappi» interni.
La non fissazione dei limiti nelle risposte (nessuna Retry-After, « -») non si adatta ai clienti.
Lo stato del limitatore nel database OLTP è stato memorizzato con elevata latitanza e blocchi hot.


16) Scelta rapida della strategia

API pubbliche con picchi: Token Bucket + grande «burst», RateLimit - titoli, CDN/edge cash.
I giubbotti pesanti interni sono concurrency caps + WFQ/DRR, admision control.
Integrazioni con terzi: limiti di uscita separati, buffering/retrai.
Multi-tenente SaaS: gerarchia dei limiti (global→tenant→user→endpoint), priorità VIP, quote mensili.


Conclusione

I buoni rate limits e le quote sono un contratto di sistema tra piattaforma e cliente, ovvero una fetta onesta di risorse, resistenza ai picchi, SLO prevedibili e un bollettino trasparente. Combinare algoritmi (Token/GCRA + concurrency caps), implementare una gerarchia di raggruppamenti, dare titoli e metriche comprensibili e controllare regolarmente gli schemi sotto i profili di traffico reali, in modo che la piattaforma rimanga resistente anche se il carico aumenta in modo aggressivo.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.