Java'da Olay Güdümlü Mimarinin Gizli Bedeli: Gerçek Zamanlı Sistemler
Yüz binlerce çağrı işleyen bir Java çağrı merkezi platformunda Kafka tabanlı olay güdümlü mimarinin gerçek zamanlı gereksinimlerle çatışmasını ve Redis'e geçişi anlatan üretim deneyimi.
Saatte seksen bin çağrı tamamlama ve on bin eşzamanlı ajan işleten bir bulut çağrı merkezi platformunun mimari deneyimi, olay güdümlü tasarımın vaat ettikleri ile gerçek zamanlı sistemlerin gereksinimleri arasındaki temel gerilimi ortaya koyuyor. Kafka üzerine kurulu asenkron mimari, çağrı yönlendirme ve ajan durum geçişleri gibi kritik yollarda saniyelerce gecikmeye yol açmış; bu da arayüzlerin gerçek durumu yansıtmasını geciktirmiş ve zaman zaman zaman aşımlarına neden olmuştur. Ekip, çağrı sinyalleşmesi gibi yollarda nihai tutarlılığın pratikte başarısızlıkla eşdeğer olduğunu deneyimlemiştir.
Daha kritik bir sorun ise servisler arası bellek içi önbelleklerin sessizce birbirinden sapmasıydı. Ağ bölünmeleri, tüketici gecikmesi ve kısmi yeniden başlatmalar sonucunda pod'lar arasında tutarsız durumlar oluşmuş, bu durum standart izleme araçlarına yansımadığı için iş kartlarının yirmi dört saate kadar hatalı görünmesine yol açmıştır. Ekip, durum yönetimini üç nesil boyunca evrimleştirmiştir: önce Kafka global state store'ları (senkronizasyon gecikmesi sorunlu), sonra Kafka olay tekrarıyla oluşturulan yerel önbellekler (beş dakikalık pod başlatma süresi Kubernetes HPA'yı devre dışı bırakıyordu), son olarak da Redis tabanlı paylaşılan durum deposu.
Redis'e geçiş hem pod'lar arası tutarsızlığı hem de başlatma tekrarı sorununu ortadan kaldırmış, başlatma gecikmesini yüzde altmış azaltmıştır. Bu deneyim, mühendislere olay güdümlü mimarinin her senaryoya uygun olmadığını, gerçek zamanlı iletişim sistemlerinde bazı kritik yolların senkron veya yarı senkron iletişim gerektirdiğini göstermektedir.