API key rate limiting
Jak działa
1) Kazde zadanie jest identyfikowane po kluczu API (i ewentualnie uzytkowniku/planie). 2) Brama sprawdza liczniki uzycia dla tego klucza wzgledem skonfigurowanych limitow (np. RPM, TPM, kwota) uzywajac algorytmu (token bucket / sliding window). 3) Jesli limit nie jest przekroczony — zadanie przechodzi, a liczniki sa aktualizowane (we wspoldzielonym magazynie, np. Redis). 4) Jesli limit jest przekroczony — zadanie jest odrzucane (HTTP 429, czesto z naglowkiem Retry-After) albo opoznione/kolejkowane.
Rozwiązany problem
Bez limitow pojedynczy klient moze przeciazyc backend, wyczerpac kwoty dostawcow lub wygenerowac niekontrolowane koszty. Rate limiting per klucz API chroni system, zapewnia sprawiedliwy dostep i utrzymuje koszty pod kontrola.
Komponenty
Przechowuje biezace zuzycie per klucz (zadania/tokeny w oknie), zwykle we wspoldzielonym magazynie (np. Redis) dla spojnosci miedzy instancjami.
Oficjalna
Decyduje, czy zadanie miesci sie w limicie: token bucket, leaky bucket lub okno przesuwne (sliding window).
Oficjalna
Definicja limitow per klucz/plan (RPM/TPM/kwota) oraz miejsce, w ktorym zadanie jest przepuszczane, odrzucane (429) lub opozniane.
Oficjalna
Implementacja
Scisle globalne limity wymagaja spojnego licznika, co dodaje latencje; lokalne liczniki sa szybsze, ale mniej dokladne.
Przy oknie stalym (fixed window) wszyscy klienci moga uderzyc jednoczesnie po resecie, powodujac skok obciazenia.
Brak jasnych naglowkow (limit/pozostalo/Retry-After) utrudnia klientom poprawna obsluge 429.
Hiperparametry (konfigurowalne osie)
Co jest limitowane: zadania (RPM/RPD), tokeny (TPM), rownoczesnosc, budzet.
Token bucket, leaky bucket, fixed/sliding window.
Per klucz API, per uzytkownik, per plan/grupa, globalnie.
Złożoność obliczeniowa
Złożoność czasowa: O(1) na zadanie. Złożoność przestrzenna: O(liczba aktywnych kluczy).
Wąskie gardło obliczeniowe
Utrzymanie dokladnych, spojnych licznikow miedzy wieloma instancjami bramy przy niskiej latencji jest glownym wyzwaniem (kompromis dokladnosc vs wydajnosc).
Paradygmat wykonania
Wynik zalezy od biezacego zuzycia danego klucza.
Decyzja przepusc/odrzuc na podstawie licznikow, bez routingu.
Równoległość
Sprawdzenia sa niezalezne per zadanie; wyzwaniem jest globalna spojnosc licznikow.
Wymagania sprzętowe
Sprawdzanie limitow to lekka operacja I/O-bound; dziala na dowolnym CPU. Kluczowy jest szybki, wspoldzielony magazyn licznikow (np. Redis).