GH GambleHub

Limity stawek i kwoty

Limity stawek i kwoty są podstawową mechaniką zarządzania popytem na wspólne zasoby: procesor, sieć, baza danych, kolejki, zewnętrzne API. Celem jest uczciwość, przewidywalność SLO i ochrona przed wybuchami, nadużyciami i „hałaśliwym sąsiadem”.


1) Podstawowe pojęcia

Limit szybkości - ograniczenie intensywności żądań/operacji (req/s, msg/min, bajty/sec).
Wybuch - dopuszczalny krótkoterminowy wybuch powyżej średniej stawki.
Kontyngent - limit objętości dla każdego okna czasowego (dokumenty/dzień, GB/miesiąc).
Ograniczenie współistnienia - ograniczenie jednoczesnych operacji (jednoczesne żądania/zadania).
Zakres - zakres: per-najemca, per-user, per-token, per-endpoint, per-IP, per-region, per-feature.


2) Ograniczenie algorytmów

2. 1 wiadro Token

Parametry: 'szybkość' (żetony/s), 'burst' (rozmiar wiadra).
Działa jak „kredyt”: nagromadzone żetony pozwalają na krótkie szczyty.
Nadaje się do zewnętrznych interfejsów API i żądań użytkowników.

2. 2 Nieszczelne wiadro

Płynnie „krwawi” przepływ ze stałą prędkością.
Dobry do wygładzania ruchu do wrażliwych pleców.

2. 3 Okno stałe/przesuwne

Okno stałe: proste, ale podatne na „przełączanie okien”.
Okno przesuwne: dokładniejsze, ale droższe obliczeniowo.

2. 4 GCRA (generyczny algorytm szybkości komórek)

Token Bucket równoważne pod względem wirtualnego czasu przyjazdu.
Dokładne i stabilne dla ograniczników rozproszonych (stan mniej sprzeczny).

2. 5 Granice równoczesności

Ograniczanie jednoczesnych operacji.
Chroni przed wyczerpaniem puli gwintu/połączenia i blokowaniem głowicy.


3) Gdzie stosować limity

Na granicy (brama L7/API): główna bariera, szybka awaria (429/503), tanie kontrole.
Usługi wewnętrzne: dodatkowe pułapy dla operacji ciężkich (eksport, raporty, przekształcenia).
Na wyjściu do systemów zewnętrznych: indywidualne limity dla osób trzecich (anty-kary).
W sprawie kolejek/pracowników: uczciwość do wspólnych basenów.


4) Zakres i priorytety (wieloosobowy najemca)

Иерардий: Global → Region → Tenant/Plan → Użytkownik/Token → Endpoint/Feature → IP/Device.
Świadomość priorytetu: VIP/Enterprise uzyskać więcej „pęknięcia” i wagi, ale nie złamać ogólnych SLO.
Skład graniczny: tolerancja całkowita = 'min (globalny, regionalny, najemca, użytkownik, punkt końcowy)'.


5) Kontyngenty ilościowe

Dzienne/miesięczne kwoty: dokumenty/dzień, GB/miesiąc, wiadomości/min.
Progi miękkie/twarde: Ostrzeżenia (80/90%) i stop twardy.
Roll-up: księgowanie według obiektów (tabele, pliki, zdarzenia) i „wypłata” do rozliczenia.


6) Ograniczenia rozproszone

Wymagania: niska opóźnienie, konsystencja, tolerancja uszkodzeń, skalowanie poziome.

Synchronizacja lokalna + probabilistyczna: miejscowe wiadra odłamkowe + synchronizacja okresowa.
Sklep centralny: Redis/МDB/Memcached.LUA/atomic ops (INCR/PEXPIRE).
Shading: klucze formularza 'limit: {scope}: {id}: {window}' z jednolitą dystrybucją.
Skew zegara: przechowywać „prawdę” na serwerze limitera, a nie na klientach.
Idempotencja: Idempotency-Keys zmniejszyć fałszywe opłaty.


7) Przeciwdziałanie nadużyciom i ochrona

Odcisk palca urządzenia per-IP + dla publicznych punktów końcowych.
Dowód pracy/CAPTCHA w nieprawidłowościach.
Spowolnienie (throttling) zamiast kompletnej awarii, gdy UX jest ważniejszy (wiersze wyszukiwania).
Limity adaptacyjne: dynamiczne zmniejszanie progów w przypadku incydentów/drogich degradacji.


8) Zachowanie klienta i protokół

Kody: „429 Zbyt wiele wniosków” (stawka), „403” (kwota/plan przekroczony), „503” (degradacja ochronna).

Najlepsze praktyki:
  • 'Retry-After: ' - kiedy spróbować ponownie.
Rodzina Limit- (IETF):
  • 'Limit-Limit: ; w = '
  • 'Limit-Pozostałe: '
  • 'Limit-Reset: '
  • Backoff: wykładniczy + jitter (full jitter, equal jitter).
  • Idempotencja: nagłówek „Idempotency-Key” i powtarzalność bezpiecznych operacji.
  • Terminy i anulowania: prawidłowo przerwać zawieszone żądania, aby nie „przechwytywać” limitów.

9) Obserwowalność i badania

Тева: 'tenant _ id',' plan ',' user _ id', 'endpoint', 'region', 'decision' (zezwolenie/odmowa), 'reason' (quota/rate/concurrency).
Wskaźniki: przepustowość, wskaźnik awarii 429/403/503, opóźnienie ogranicznika p95/p99, wskaźnik trafienia pamięci podręcznej klucza, przydział planu.
Dzienniki audytu: przyczyny bloków, top „hałaśliwe” klucze.
Testy: profile obciążenia „piła/pęknięcie/płaskowyż”, chaos - awaria Redis/shard, desynchronizacja zegara.


10) Integracja z rozliczeniami

Liczniki użytkowania są zbierane na granicy, zagregowane przez partie (co N minut) z idempotencją.
Podsumowanie planu: nadmierne wydatki → doładowanie lub tymczasowe zwiększenie planu.
Rozbieżności: wykorzystanie uzgodnień w stosunku do faktury; wpisy do delty.


11) Sprawiedliwość wewnątrz (kolejki, pracownicy)

Ważone targi kolejkowania/DRR: Przydzielanie czasu na start lub lądowanie najemcom według wagi planu.
Baseny na najemcę: sztywna izolacja VIP/hałaśliwa.
Kontrola wjazdu: awaria przed wykonaniem, jeżeli kwoty są wyczerpane; kolejki nie puchną.
Czapki na równoczesność: Ograniczyć jednoczesne ciężkie jabs.


12) Typowe profile planu (przykład)

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) Odniesienie architektoniczne (system słowny)

1. Brama krawędzi/API: TLS → kontekst ekstraktu (najemca/plan) → sprawdzenie limitów/kwot → umieszczenie nagłówków Limit → dziennik/ślad.
2. Silnik polityki: zasady priorytetowe (VIP), progi adaptacyjne.
3. Limiter Store: Redis/PowerDB (operacje atomowe, LUA), shading klucza, replikacja.
4. Usługi: drugorzędny limit i pułapy dla ciężkich operacji; idempotencja; Kolejki z WFQ/DRR.
5. Użycie/Rozliczenie: zbieranie, agregacja, faktura, wpisy według progów.
6. Obserwowalność: znaczniki/kłody/szlaki, deski rozdzielcze na najemcę.


14) Lista kontrolna przedsprzedaży

  • Zdefiniowano zakresy limitów (najemca/użytkownik/token/punkt końcowy/IP) oraz ich hierarchię.
  • Wybrany algorytm (Token Bucket/GCRA) i 'rate/burst' parametry.
  • Wdrożone pułapy współistnienia i kontrola dopuszczenia do ciężkich operacji.
  • W tym nagłówki „ Limit-” i „Retry-After”; klienci obsługują backoff + jitter.
  • Ogranicznik jest rozproszony i odporny na uszkodzenia (odłamki, replikacja, degradacja).
  • Zbieranie użytkowania jest idempotentne; pakiet z rachunkami, alerty za nadmierne wydatki.
  • Obserwowalność: mierniki/ścieżki/znakowane kłody, górne „hałaśliwe” klucze, zmiany.
  • Testy: wybuchy, „piła”, awaria storu, skok zegara, zimny start.
  • Dokumentacja klienta: limity planu, przykłady 429/Retry-After, przekwalifikowanie najlepszych praktyk.
  • Polityka wykluczenia: Jak tymczasowo podnieść limity i kiedy.

15) Typowe błędy

Globalny limit bez jednego najemcy/punktu końcowego - „hałaśliwy sąsiad” łamie wszystkie SLO.
Brak „wybuchu”: UX cierpi w krótkich wybuchach.
Używając tylko stałe okno → „podwójne trafienie na granicy okna”.
Nie ma idempotencji i retras z jitter → burza powtórzeń.
Limity tylko na granicy, bez czapek w usługach/kolejkach → wewnętrzne „korki”.
Brak odrzucenia limitów w odpowiedziach (brak 'Retry-After', ' Limit-') → klienci nie dostosowują się.
Przechowywanie stanu ogranicznika w bazie danych OLTP → wysokie opóźnienia i gorące blokady.


16) Szybki wybór strategii

Publiczne interfejsy API ze szczytami: Token Bucket + duży 'burst', Limit - nagłówki, pamięć podręczna CDN/krawędź.
Wewnętrzne ciężkie dźwignie: czapki równoległe + WFQ/DRR, kontrola wstępu.
Integracja z osobami trzecimi: oddzielne limity wyjścia, buforowanie/przekładki.
Wieloosobowy najemca SaaS: hierarchia limitów (globalny → najemca → użytkownik → punkt końcowy), priorytety VIP, miesięczne kwoty.


Wniosek

Dobre limity stawek i kwoty to umowa systemowa między platformą a klientem: uczciwy udział zasobów, odporność na kolce, przewidywalne SLO i przejrzyste rozliczenia. Łączyć algorytmy (Token/GCRA + czapki równoległe), wdrożyć hierarchię ospreys, dać jasne nagłówki i mierniki, i regularnie sprawdzać schematy w prawdziwych profilach ruchu - w ten sposób platforma pozostanie stabilna nawet przy agresywnym wzroście obciążenia.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.