Lab 06 / 09Mesaj kuyruğu ve autoscaling laboratuvarı

Baskı Altında Kuyruk

Sınırlı bir kuyruğu producer’larla doldur, consumer’larını aç bırak ya da ölçekle; lag’in, backpressure’ın, retry’ların, zehirli mesajların ve dead-letter queue’nun nasıl işlediğini izle.

  • Backpressure
  • Dead-letter queue
  • Autoscaling
Retry
Otomatik oynatma · kontrolü almak için herhangi bir şeye dokun
Derinlik
0
Lag
0.0s
Giren
0/s
Çıkan
0/s
DLQ
0
Düşen
0
Kuyruk derinliği · consumer · son 60 snderinlikconsumerhigh water

    Simülasyon · kapasite 300 · high-water mark %70 · bir consumer ~6 msg/s işler · retry’lar 0.25 sn × 2ⁿ geri çekilir · zehirli mesajlar 1.2 sn sonra timeout olur · zaman sıkıştırılmıştır

    Melih Kızmaz yaptı · tamamen tarayıcında çalışır

    Burada ne görüyorsunuz

    Dört producer en fazla 300 mesaj tutan bir kuyruğa yayın yapıyor; en fazla on iki consumer kuyruğun başından mesaj çekiyor ve her biri saniyede yaklaşık altı mesaj işliyor. Consumer’lar yetiştiği sürece kuyruk neredeyse boş kalıyor ve lag — bekleyen en eski mesajın yaşı — sıfıra yakın duruyor. Üretim hızını consumer’ların boşaltabileceğinin üstüne çıkar; derinlik ve lag birlikte tırmanıyor. Kuyruk kaynaklı olayların çoğunun bütün hikâyesi bu.

    Backpressure ya da düşürmek

    Sınırlı bir kuyruk dolduğunda bir şey yapmak zorunda. Backpressure açıkken derinlik %70’lik high-water mark’ı geçtiği anda producer’lar kalan boşlukla orantılı olarak yavaşlatılıyor — baskı yukarı akıyor; orada çağıran taraf bekleyebilir, yük atabilir ya da 429 dönebilir. Kapatırsan hiçbir şey yavaşlamıyor: kuyruk kapasitesine kadar doluyor ve yeni mesajlar yere düşüyor. İkisi de bedava değil ama sadece biri senin verdiğin bir karar.

    Kuyruk uzunluğuna göre ölçekleme

    KEDA açıkken consumer sayısı doğrudan kuyruğu takip ediyor: istenen replica = ⌈(bekleyen + işlenen) / 15⌉, belirlediğin maksimuma kadar. Scale-up anında oluyor ama yeni consumer’ların başlaması biraz sürüyor, bu yüzden lag toparlanmadan önce sıçrıyor; scale-down ise kısa bir sakinliğin salınıma yol açmaması için 5 saniyelik cooldown bekliyor. KEDA’yı kapat, iki consumer bırak ve Spike’a bas: çoğunlukla I/O bekleyen bir worker için CPU’ya göre ölçeklemenin neden yanlış sinyal olduğunu göreceksin.

    Retry, zehirli mesaj ve dead-letter queue

    Başarısız mesajlar üstel backoff ile (0.25 sn, 0.5 sn, 1 sn…) kuyruğun sonuna geri konuyor. Geçici hatalar — kararsız downstream — genelde ikinci denemede başarılı oluyor. Zehirli bir mesaj asla olmayacak: burada 1.2 sn asılı kalıp her seferinde başarısız oluyor. Üç retry ile dört denemeden sonra dead-letter’a gidiyor ve bir insan onu sonra inceleyebiliyor; sonsuz retry ile sonsuza kadar dönüyor ve altı tanesi consumer’ların yarısını hiçbir şey yapmadan meşgul tutmaya yetiyor. Sayılar simülasyon, zaman sıkıştırılmış.