WinUpGo
Aramak
CASWINO
SKYSLOTS
BRAMA
TETHERPAY
777 FREE SPINS + 300%
Cryptocurrency casino Crypto Casino Torrent Gear, çok amaçlı torrent aramanızdır! Torrent Dişli

Arka uç yanıt optimizasyonu: kuyruklar, async, geri basınç

1) Neden: Hedefler ve SLO'lar

Amaç, patlamalar altında bile istikrarlı bir hızlı tepkidir. İş bu SLO ifade eder:
  • API (CRUD/dizinler): p95 ≤ 250-400 ms, hata oranı <%1.
  • Ödeme/uzlaştırma (asenkron): 2-5 dakika ≤ onay için dahili SLA ve müşteri - anında 202/Accepted + durum poller/webhook.
  • WS/gerçek zamanlı: RTT p95 ≤ 120 мс, ≤ 0 bağlantısını kesin. 5%.

Anahtar: "yavaş" adımları (sağlayıcılar, veritabanları, harici API'ler) kullanıcı yanıtından kuyruklar ve yetkili yük sınırlaması yoluyla çözmek.


2) Temel resim: gecikmenin alındığı yer

Darboğazlar: veritabanı (havuzlar/indeksler), harici sağlayıcılar (PSP/oyun), engelleme I/O, GC/stop dünyası, JSON serileştirme,'ağır "toplamalar.

Belirtiler: p99 büyüme, DB bağlantı kuyruğu, retray patlamaları, yeniden fırtına.

Panzehir: asenkron boru hatları + geri basınç + zaman aşımı/geri çekilme + idempotency.


3) Asenkron desenler: SEDA ve CQRS

SEDA (staged event-driven architecture): süreci aşamalara ayırır (ingress - validation - write - integration - notification). Her birinin kendi dönüş ve eşzamanlılık sınırları vardır.

CQRS: Ayrı okuma ve yazma. Yazma - günlüğe/veritabanına, okuma - projeksiyonlardan/önbelleklerden.

Giden kutusu: olay kayıtla birlikte atomik olarak yayınlanır ("kayıp" mesajlardan kaçının).

Saga: Küresel işlemler yerine telafi edici işlemlerle uzun iş süreçleri.


4) Kuyruklar ve akışlar: seçim ve ayarlama

RabbitMQ/NATS JetStream - görev komutları (iş kuyrukları), Kafka - tekrarlı olaylar/akışlar.

Yanıtı etkileyen ayarlar:
  • Prefetch/max in-flight: veritabanı/harici API'yi "tıkamamak" için çalışan başına aynı anda işlenen mesaj sayısını sınırlayın (örneğin, 16-64).
  • Acker/tekrarlar: Idempotent kayıttan sonra 'ack'; üstel gecikme ve titreme tekrarlar.
  • DLQ/otopark: sonsuz geri çekilme yoktur - N denemeden sonra, Dead Letter Queue gider.
  • Bölümleme (Kafka): sipariş için öze göre anahtar (userId/txnId); Partilerin sayısı üzerinden paralellik.

5) Geri basınç - nasıl boğulmaz

Fikir: Sadece SLO'nun gecikmesi içinde işleyebildiğiniz kadar alın.

Teknisyenler:
  • Kabul kontrolü: Her dış bağımlılık için rekabeti sınırla (semafor/işçi havuzu): veritabanı, PSP, oyun sağlayıcısı.
  • Trafik şekillendirme: Servis girişinde ve kritik güzergahlarda token-bucket/leaky-bucket.
  • Üst kenarlıklı kuyruklar: dolduğunda, kuyruğu kesin (429/503 + Retry-After) veya asap-batch'e aktarın.
  • Uyarlanabilir eşzamanlılık (AIMD): Başarı üzerindeki paralelliği artırır, zaman aşımlarını azaltır.
  • Devre Kesici: Harici API'nin hataları/zaman aşımları ile 'kapalı, açık, yarı açık'; Açık olduğunda - bozulma (önbellek/saplama).
Pseudocode (Go benzeri):
go sem: = make (chan struct {}, 64 )//rekabetin DB/PSP ile sınırlandırılması

Func kolu (req) {
seçiniz {
case sem <- struct {} {}:
Erteleme func () {<-sem} ()
ctx, cancel: = context. WithTimeout (req. ctx, 300time. Milisaniye)
İptal etmeyi ertele ()
res, err: = db. Yap (ctx, req)
Eğer err = = bağlam. DeadlineExceeded {metrics. Zaman aşımları. Inc (); Çok Yavaş Dön ()}
Geri dön tamam (res)
varsayılan değer:
Metrikler. Geri basınç. Inc ()
Return TooBusy (429 ", Retry-After: 0. 2")
}
}

6) Zaman aşımları, geri çekilmeler ve titreme: "Üç hayatta kalma balinası"

SLO'dan daha kısa zaman aşımları: SLO 400 ms ise, DB/sağlayıcıya 250-300 ms zaman aşımı; Toplam istek zaman aşımı <400-600 ms.

Retrai sınırlı ve akıllı: 1-2 max girişimleri, sadece güvenli işlemler için (idempotent), üs ve jitter ile.

Birleştirme: Tek bir anahtar için toplama tekrarları.

Sözde kod (üstel + jitter):
Aralıkta deneme için python (0, 2):
Deneyin:
Geri dönüş çağrısı (dep, timeout = 0. 3)
Zaman aşımı hariç:
Geri çekilme = (0. 05 (2attempt)) + rastgele. üniforma (0, 0. 05)
uyku (geri kapanma)
UpstreamUnavailable öğesini yükseltin

7) Kimlik ve veri tekilleştirme

HTTP'de Idempotency-Key (depozitolar, ödemeler), veritabanında 'operation _ id' (benzersiz dizin).

Gelen Kutusu/Giden Kutusu: gelen webhook'lar - her zaman 'event _ id'tarafından tekilleştirilen değiştirilemez bir gelen kutusu tablosundan; Giden - işlem yoluyla giden kutusundan.

Tam olarak bir kez "anlam": tekrarlanan teslimat/yürütmeye izin veriyoruz, ancak tek bir etki var.


8) Yavaş işlemler için hızlı API

Eşzamanlı yanıt: 201/202 + durum URL'si ('/status/{ id} '), ETA ve retro ipuçları.

Webhooks/Server-Sent Events/WS - hazır olduğunda durumu itin.

Müşteri disiplini: 'Retry-After', idempotence, yoklama sınırı.

Yanıt örneği:
Json
HTTP/1. 1 202 Kabul edildi
Yer :/ v1/withdrawals/req_9f2/status
Retry-After: 2
{
"request_id":" req_9f2 ",'devlet": "işleme", "next_check_sec": 2
}

9) Sıcak çalışmayı en aza indirin

Arka plana ağır şeyler koyun: dönüşümler, toplamalar, bildirimler, DWH'ye yazma.

Önbellek ve projeksiyonlar: yaygın olarak okunur - kısa TTL ve olay engelliliği ile önbellek kenara.

Toplu desenler: grup harici çağrıları (örn. N ms'de bir kez sağlayıcı sınırları talep edin).

Serileştirme: servis-servis iletişimi için hızlı codec bileşenleri (protobuf/msgpack); JSON sadece kenarda.


10) DB kontrol altında

Bağlantı havuzları: üst sınırlar (çekirdeklere/IO'ya dayalı), havuz sıraları etkin.

İndeksler ve plan: p95, planların + regresyon ototestlerini açıklar.

Zaman aşımı talebi: kısa, 'statement _ timeout' (Postgres).

Sıcak satırlar/kilitler: anahtar parçaları, iyimser kilitler (denge sürümü), "monolitik'bir işlem yerine saga.


11) WebSocket/gerçek zamanlı

Bülten sınırlayıcı: toplu yayın, bağlantı başına maksimum msgs/sn.

Dahili geri basınç: kapaklı giden mesaj kuyruğu; taşma üzerinde - düşük öncelikli bırakın.

Sticky-routing ve PDB sürümleri sırasında - bir yeniden bağlantı fırtına üretmek için değil.


12) Tahmin etmemek için gözlemlenebilirlik

Metrikler (KIRMIZI/KULLANIM + geri basınç):
  • Rotalarda 'request _ rate', 'error _ ratio', 'latency _ p95/p99'.
  • 'eue _ depth', 'lag _ seconds', 'consumer _ inflight', 'retries _ total', 'dlq _ rate'.
  • 'backpressure _ drops', 'admission _ rejects', 'circuit _ open'.
  • Для БД: 'connections _ in _ use/max', 'locks', 'slow _ queries'.
  • Traces: sprans 'queue> worker> db/psp' with tags 'operation _ id', 'partition', 'retry'.
  • Günlükler: yapısal, 'trace _ id'ile, PII olmadan; Bireysel "açık/kapalı devre" olayları.

13) Yük testi

Patlamalar için açık model (geliş/saniye); Oturumlar için kapalı model (VU).

Profiller: kısa patlama 60-120 s ve 1-4 h ıslatın.

Enjeksiyon arızaları: Harici API'yi + 200-500 ms yavaşlatın, p99/retrai/kuyruklara bakın.

Yeşil bölge kriterleri: büyüme yok 'queue _ lag', kararlı p95, 'dlq_rate≈0'.


14) Güvenlik ve güvenilirlik

TLS/mTLS kuyrukları, ileti imzalama, şema izleme (Avro/Protobuf + Şema Kayıt Defteri).

Idempotent yapımcı (Kafka), tam bir kez tx nerede haklı.

Kaos modu: periyodik olarak bağımlılığı "bırakın've bozulmaya bakın (devre, geri dönüş).


15) Konfigürasyonların "parçaları" örnekleri

Nginx/Elçi girdi şekillendirme:
nginx limit_req_zone $ binary _ remote _ addr zone = api: 10m rate = 20r/s;
Sunucu {
Konum/api/{
limit_req bölgesi = api burst = 40 nodelay;
proxy_read_timeout 0. 6s; #, SLO proxy_connect_timeout 0'dan daha kısadır. 2 s;
}
}
RabbitMQ (prefetch):

temel. qos (prefetch_count = 32) # CPU/IO dengesi
Kafka tüketicisi (Java parçası):
Java props. put (ConsumerConfig). MAX_POLL_RECORDS_CONFIG, 200);
sahne. put (ConsumerConfig). FETCH_MAX_BYTES_CONFIG, 5_000_000);
sahne. put (ConsumerConfig). MAX_POLL_INTERVAL_MS_CONFIG, 60_000);

16) Uygulama kontrol listesi (prod-ready)

  • Kritik yollar senkron tepki ve asenkron işleme (SEDA) olarak ikiye ayrılır.
  • Dış bağımlılıklar için kabul kontrolü ve rekabet sınırları.
  • Zaman aşımları SLO'dan daha kısadır; Retrai ≤ 2, üs ve jitter ile; birleşme.
  • Devre kesici + bozulma (önbellek/saplama), yarı açık politika.
  • Kuyruklar/akışlar: prefetch/in-flight, DLQ, anahtar gruplar.
  • Idempotency (operation_id/Idempotency-Key), Giden Kutusu/Gelen Kutusu, veri tekilleştirme.
  • Önbellek: önbellek kenara, kısa TTL + olay sakatlığı.
  • DB: havuz limitleri, statement_timeout, indeksler, anti-kilit stratejileri.
  • WS: mesaj limitleri, butching, yapışkan yönlendirme, PDB.
  • Gözlemlenebilirlik: geri basınç/kuyruklar/metrikleri yeniden dener, uçtan uca yollar, gösterge panoları.
  • Yük ve arıza testleri (açık + kapalı, patlama + ıslatma), yeşil bölge kriterleri.

Özgeçmiş Özeti

Hızlı bir arka uç "başka bir önbellek yapmak'değil, kontrollü bir akıştır: giriş sınırlıdır, ağırdır - arka planda, her aşamada bir sıra ve sınırlar vardır, retrays nadir ve akıllıdır ve zincirler devre kesici ve idempotency ile korunur. Zaman aşımı disiplini, gözlemlenebilirlik ve düzenli stres testleri ekleyin - ve p95/p99'unuz dış sağlayıcıların patlamaları ve kaprisleri altında bile yeşil kalacaktır.

× Oyuna göre ara
Aramaya başlamak için en az 3 karakter girin.