Hız Sınırları ve Yük Kontrolü
TL; DR
Güvenilir bir devre, çeşitli seviyelerde limitlerin ve kotaların bir birleşimidir (kenar, BFF, servis), adil kaynak tahsisi (kiracı/anahtar/rota başına), SLO adaptif kısma ve sessiz zaman aşımları yerine geri yansıtıcı. "Hız" için jeton/sızdıran kova, muhasebe kotaları için kayan pencere, ağır işlemler için rekabetçi limitler, bozulmada dinamik kısma ve kırılgan yukarı akışa devre kesici kullanın. Her şey gözlem altında ve oyun kitaplarıyla birlikte.
1) Neden iGaming/fintech'te sınırlar
SLO ve sürdürülebilirlik: retray çığlara, turnuva/etkinlik zirvelerine, ödeme artışlarına karşı koruma.
Adalet: Bir kiracı veya ortak tüm bütçeyi "emmez".
Kötüye kullanım karşıtı/botlar: giriş/kayıt, spam, dizin kazıma.
Maliyet: Pahalı aramaların sınırlandırılması (KYC, raporlar, toplamlar).
Uyum/adil kullanım: Sözleşmelerde resmi "adil kullanım" kotaları.
2) Taksonomiyi sınırlayın
3) Algoritmalar ve nereye başvurulacağı
3. 1 Belirteç Kovası (varsayılan)
Parametreler: 'Oran' (belirteçler/sn), 'patlama' (maksimum marj).
API okuma, ödeme/durum, BFF için harika.
Boş bir kova ile - 429 + 'Retry-After'.
3. 2 Sızdıran Kova (ortalama)
RPS'nin garantili "yıkımı", işçileri puanlamamak için webhooks için yararlıdır.
3. 3 Sabit Pencere vs Sürgülü Pencere
Sabit - basit, ama "sınırlar"; Sürgülü - pencerede adil muhasebe (min/saat/gün).
Apply Sözleşme kotaları için kayar.
3. 4 Eşzamanlı sınırlar
Aynı anda aktif görevlerin sınırı. İhracat/raporlar, KYC paketleri, yeniden işleme için idealdir.
Eksiklik durumunda - 429/503 + kuyruk/yoklama.
3. 5 Maliyet/Karmaşıklık Sınırlayıcı
GraphQL/search: derinlik/kardinalite/uzantılarla "maliyeti" göz önünde bulundurun.
"Pahalı" isteklerin kırpılması/bozulması, bir ipucu ile yanıt.
4) Boyutlandırma tuşları
Kiracı başına (çoklu kiralama, özkaynak),
per-api_key/client_id (ortaklar),
Rota başına (daha ciddi kritik mutasyonlar),
Kullanıcı başına/cihaz/IP/ASN/geo
Per-BIN/ülke (ödeme yöntemleri, ihraççıların ve sağlayıcıların korunması),
Yöntem başına (GET daha yumuşak, POST/PUT daha sıkı).
Kompozisyon: ana anahtar + "risk çarpanı" (yeni hesap, TOR/proxy, yüksek ters ibraz riski).
5) SLO-adaptif kısma
SLO tehlikede olduğunda dinamik kısmayı etkinleştirin:- Tetikleyiciler: 'P95 latency↑', '5xx↑', 'kuyruk len↑', 'CPU/IO doygunluğu'.
- Eylemler: Daha düşük hız/patlama, outlier-ejection etkinleştirin, "pahalı" rotaları kesin, geçici bozulma (ağır alanlar/toplamlar olmadan).
- Geri dönüş: N ardışık aralıkların sinyallerini normalleştirirken adım adım (25 - 50 - %100).
6) Mimari entegrasyon
API Ağ Geçidi (kenar): birincil oran/kotalar, coğrafi/ASN, HMAC/JWT doğrulama, 429/' Retry-After '.
BFF/Service Mesh: ince rota başına/kiracı başına limitler, eşzamanlı limitler, yukarı akış için devre kesiciler.
Hizmetin içinde: Ağır operasyonlar için semaforlar, kuyruklarda bir sırt çantası, bağlı bir boyutta "çalışma havuzları".
Webhooks: sızdıran kova ve retray arabelleği ile ayrı bir giriş uç noktası.
7) Konfigürasyonlar (parçalar)
Kong/NGINX tarzı (hız + patlama):yaml plugins:
- name: rate-limiting config:
policy: local minute: 600 # 10 rps limit_by: consumer fault_tolerant: true
- name: response-ratelimiting config:
limits:
heavy: { minute: 60 }
Elçi (devre + aykırı + oran):
yaml circuit_breakers:
thresholds: { max_connections: 1000, max_requests: 800 }
outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s http_filters:
- name: envoy. filters. http. local_ratelimit typed_config:
token_bucket: { max_tokens: 100, tokens_per_fill: 100, fill_interval: 1s }
filter_enabled: { default_value: 100% }
filter_enforced: { default_value: 100% }
Eşzamanlı sınırlar (sözde):
pseudo sema = Semaphore(MAX_ACTIVE_EXPORTS_PER_TENANT)
if! sema. tryAcquire(timeout=100ms) then return 429 with retry_after=rand(1..5)s process()
sema. release()
GraphQL maliyet koruması (fikir):
pseudo cost = sum(weight(field) cardinality(arg))
if cost > tenant. budget then reject(429,"query too expensive")
8) Farklı kanallar için politikalar
REST
GET - daha yumuşak, POST/PATCH/DELETE - daha sıkı; "idempotent" durumları/çekleri geri çekilebilir.
Ödemeler için: Kullanıcı/kiracı/BIN/ülke başına 'doğrulama/yakalama/geri ödeme' sınırları.
GraphQL
Derinlik/karmaşıklık sınırları, kalıcı/beyaz listeye alınmış sorgular, takma adlarda sınırlamalar.
WebSocket/SSE
Sıklık sınırı 'abone olun/abonelikten çıkın', konu sayısını sınırlayın, olayların boyutunu kontrol edin ve 'polisy _ disconnect' taştığında kuyruk gönderin.
Webhooks
Resepsiyonda sızdıran kova, gönderen başına kotalar, ölü harf kuyruğu, deterministik 2xx/429.
9) Müşteri geri bildirimi
Her zaman açık bir 429'u başlıklarla döndürün:- 'Retry-After:
' - 'X-RateLimit-Limit/Kalan/Yeniden'
- Kotalar için - 403 kodu ile 'kontenjan _ aşıldı've plan yükseltmesine bir bağlantı.
- Dokümantasyon: OpenAPI/SDL + "Adil Kullanım" sayfalarındaki sınırlar.
10) İzleme ve gösterge panoları
Metrikler:- Limitlere ulaşıyor: 'oranı. limit. Tuşlara/yönlendirmelere/kiracılara çarptı.
- 429/503 доля, gecikme p50/p95/p99, hata oranı, kuyruk uzunluğu, açık devreler.
- Adil paylaşım: tüketimdeki en iyi kiracılar, "zorba dedektörü".
- Webhooks: resepsiyon/retrai, bırakma oranı, orta gecikme.
- 429, toplam RPS'nin %1-3'ünden fazla değildir (botlar olmadan).
- P95 sınırlayıcı katkı maddesi ≤ kenar başına 5-10 ms.
- Bozulma kurtarma süresi ≤ 10 dakika.
sql
SELECT ts::date d, tenant, route,
SUM(hits) AS limit_hits,
SUM(total) AS total_calls,
SUM(hits)::decimal/NULLIF(SUM(total),0) AS hit_rate
FROM ratelimit_stats
GROUP BY 1,2,3
ORDER BY d DESC, hit_rate DESC;
11) Olay oyun kitapları
Retray storm (upstream fall): Küresel yavaşlatmayı açın, geri almayı kaldırın, devre kesiciyi açın, zaman aşımları yerine "hızlı hataları" döndürün.
Bot saldırısı/kazıma: IP/ASN/geo tarafından sert kapak, WAF/JS meydan okumasını etkinleştir, dizinleri/aramayı kısıtla.
Turnuva/etkinlik zirvesi: okuma sınırlarını önceden yükseltmek, "pahalı alanları" düşürmek, önbellek/denormalizasyonu sağlamak.
PSP'den webhook'lar eklendi: geçici sızdıran kova, kritik tiplerin önceliklendirilmesi, dead-letter ve retray'i genişletin.
12) Test ve UAT
Yük: RPS merdiveni, boncuklar × normalin 10'u.
Adalet: 1 "açgözlü" kiracının öykünmesi - küresel bütçenin % X'inden fazla değil.
Bozulma: SLO adaptasyonu sınırları azaltır ve koridorda p95 tutar.
Sınır durumları: Pencere değişimi (min - chas), saat sallama (saat eğriltme), Redis ölçeklendirme/anahtar parçalama.
Sözleşme: 429 ve Retry-After başlıkları mevcut, SDK doğru şekilde yedekleniyor.
13) Limitler için depolama
Yerel sınırlar için bellek içi (küçük kümeler).
Redis/Memcached for distributed (Atomicity için Lua betikleri).
Anahtarları hash ile parçalama; Pencereler altında TTL; önbellek kaybı için yedek metrik.
Idempotency: sınırlayıcı, idempotent tekrarlanan çağrıları kırmamalıdır (istek anahtarına göre muhasebe).
14) Yönetişim
Sınırlamalar kataloğu: sahibi kim, hangi anahtarlar/eşik/rasyonlu.
Hızlı anahtarlar için özellik bayrakları (kriz modu).
Sözleşme kotalarındaki değişiklikler için sürüm politikaları ve RFC süreci.
Optimal eşiklerin seçimi üzerine A/B deneyleri.
15) Anti-desenler
"Tüm API'ler için" global bir sınır.
Sadece sabit pencereler - "kenar" atlar.
Geri bildirim olmadan sınırlama ('Retry-After'/başlıkları yok).
Hızlı 429/503 yerine sessiz zaman aşımları.
Kiracı başına adil paylaşım eksikliği - bir müşteri geri kalanını boğar.
GraphQL/karmaşıklık arama koruması yok.
Eşzamanlı korumada sıfırlar - DB/PSP "elektrikli süpürge".
16) Mini hile sayfası seçimi
Varsayılan değer, kiracı + rota başına belirteç kovasıdır (oran + patlama).
Para/raporlara göre kotalar: sürgülü pencere gün/ay.
Ağır işlemler: eşzamanlı sınırlar + kuyruk.
GraphQL/поиск: karmaşıklık bütçeleri + ısrarlı sorgular.
WS/webhooks: sızdıran kova + geri basınç.
Кризис: dinamik kısma + devre kesici + bozunma.
Özet
Yük kontrolü çok seviyeli bir disiplindir: doğru algoritmalar (kova/pencere/rekabet gücü), adil limit anahtarları, SLO adaptasyonu ve şeffaf geri bildirim. Sınırları ağ geçidi/mesh/servislere dikerek, GraphQL/WS/webhook'ları profil politikalarıyla donatarak ve gözlemlenebilirliği playbook'larla birleştirerek, zirve olaylarını ve diğer insanların başarısızlıklarını kontrollü durumlara dönüştürürsünüz - çökmeler, kesintili ödemeler ve dönüşüm düşüşleri olmadan.