« Tüm yayınlar

Onay Boşluğu: Olay Tabanlı Sistemler Mesajları Hatasızca Nasıl Kaybeder

Olay tabanlı sistemlerde kabul ile tamamlanma arasındaki fark, sessiz mesaj kaybına nasıl yol açar? Mimari kökeni ve çözümü.

Bu yazı, olay tabanlı sistemlerde "kabul edildi" ile "tamamlandı" arasındaki incelikli farkın nasıl sessiz veri kaybına yol açtığını inceliyor. Bir tüketici, aracı bir kontrol düzlemine iş gönderir ve 202/204 gibi bir yanıt alır; ancak bu yanıt işin gerçekten çalışacağını garanti etmez. İş daha sonra arka planda reddedilirse, tüketici bunu asla öğrenemez ve offset'i zaten commit etmiştir.

Sorunun kökü, mesaj kuyruğu tüketicisinin "kabul" sinyalini "tamamlanma" sinyaliyle karıştırmasıdır. Kafka gibi offset tabanlı sistemlerde commit, geçmişe dair bir vaattir: "bu noktaya kadar her şeyi işledim" demektir. Bu vaat yanlışsa, sistem kendi eliyle veri kaybı üretir. Yazı, hata kodu kontrolü, retry ekleme, idempotency veya exactly-once semantiği gibi alışılmış çözümlerin bu mimari sorunu neden çözemediğini de açıklıyor.

Mühendisler için çıkarım açık: asenkron sınırlar üzerinden yapılan her devir teslimde, ack'i işin gerçek tamamlanma anına taşımak gerekir - aksi halde sistem sessizce, istisnasız ve alarmsız iş kaybedebilir.