ÖZET VE TEKNİK CEVAP
CQRS projeksiyon gecikmesi, yazma komutunun tamamlanmasının ardından asenkron olay yansıtıcılarının okuma modellerini güncellemesi sırasında geçen milisaniyeler veya saniyeler sebebiyle oluşur; kullanıcılar yönlendirildikleri sayfada bayat veri görür.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
CQRS mimarilerinde yazma ve okuma işlemlerinin asenkron projeksiyonlarla ayrılması, okuma verimini ve sorgu esnekliğini en üst düzeye çıkarır. Ancak bu yayılma gecikmesi son kullanıcıların nedensellik beklentisini bozar. Kullanıcı sipariş verip anında sipariş durum paneline yönlendiğinde 404 veya eski durumla karşılaşabilir.
2. Doğru Kullanım Senaryosu
CQRS projeksiyon gecikmesi, yazma agregasyonunun kesinleşen olay günlüğü ile arka plan olay tüketicileri tarafından asenkron güncellenen materyalize okuma veritabanı görünümü arasındaki zamansal farktır.
3. Prodüksiyon Arıza Modları
Olay henüz yayınlanmadan önce yazma komutu işlemi içinde okuma veritabanını sorgulamaya çalışmak. Veriyi yeniden çekmeden önce ön yüze rastgele bekleme süreleri koymak (`setTimeout(..., 1000)`). Yazma ve okuma veritabanları arasına senkron dağıtık kilit koyarak CQRS'in tüm ölçeklenebilirlik avantajını yok etmek.
4. Teşhis ve Telemetri Sinyalleri
kullanıcı profilini günceller ancak yönlendirmeden sonra eski adı görür, bayat stok okuması aşırı satışa yol açar, sırasız olay projeksiyonu veri bozulması
5. Önleme ve Mimari Bariyerler
Yazma komut yanıtlarında agregasyon sürüm/filigran belirteçleri dönerek kendi yazdığını okuma doğrulamasını etkinleştirin. İstemci belirli bir sürüm şart koştuğunda GET uç noktalarında kısa süreli sunucu taraflı bekleme uygulayın. Projeksiyon tüketici gecikmesini Prometheus ile izleyerek okuma gecikmesi SLO sınırlarını aştığında alarm üretin.
6. Mimari Ödünleşimler (Trade-offs)
Projeksiyon gecikmesi yönetilmediğinde, kullanıcı arayüzünde rahatsız edici hatalar (oluşturulan kaydın sayfayı yenileyince kaybolması), veri yarış durumları ve kullanıcıların ilk işlemin başarısız olduğunu sanıp mükerrer istek atması gibi kritik sorunlar yaşanır.
Vaka İncelemesi (TinyCTO Örneği)
Yazma patikasını yavaş iki aşamalı senkron kilitlere mahkum etmeden CQRS projeksiyon gecikmesini çözmek için yetkin ekipler şu mimari desenleri uygular: 1. **Sürümlenmiş Agregasyon Sorguları (Read-Your-Writes):** Yazma API'si yeni kesinleşen agregasyon sürüm numarasını döner (`aggregateVersion=42`). İstemci sonraki GET isteğinde bu başlığı iletir (`X-Required-Version: 42`). Okuma projeksiyonu henüz 40. sürümdeyse, API katmanı projeksiyonu 200 ms bekler veya doğrudan yazma agregasyonunu sorgular. 2. **İyimser İstemci Güncellemeleri (Optimistic UI):** Ön yüz, komut yanıtına göre yerel önbelleğini (React Query/SWR) anında güncelleyerek arka plandaki gecikmeyi kullanıcıya hissettirmez. 3. **Kritik Patika Projeksiyoncuları:** Kimlik doğrulama veya finansal bakiye gibi kritik varlıklar düşük gecikmeli bellek içi projeksiyoncularla işlenirken, analitik tablolar toplu (batch) işlenir.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaCQRS mimarilerinde projeksiyon gecikmesine ne sebep olur?
Sürümlenmiş belirteç sorgulama, CQRS'te 'Kendi Yazdığını Okuma' ikilemini nasıl çözer?
CQRS Projeksiyon Gecikmesi ve Nihai Tutarlılık — Sıkça Sorulan Sorular
Bir kullanıcı profilini güncelleyip hesap sayfasına yönlendirildiğinde eski adresini görüyor. CQRS'i terk etmeden en doğru mimari çözüm nedir?
Komuttan agregasyon sürümünü dönmek ve okuma sorgusunda projeksiyon filigranını kontrol edip gerekirse kısa süre beklemek. Agregasyon sürüm belirtecini dönmek, yazma verimini düşürmeden projeksiyonun yetiştiğini doğrulayarak 'kendi yazdığını okuma' tutarlılığını sağlar.
Neden ön yüzde `setTimeout(refetch, 1000)` kullanmak nihai tutarlılık gecikmesini yönetmek için bir anti-desendir?
Çünkü rastgele zaman aşımları deterministik değildir: yüksek yükte gecikme süreyi aşar, düşük yükte ise gereksiz kullanıcı beklemesine yol açar. Sabit istemci beklemeleri, kuyruk gecikmesi arttığında patlar; normal şartlarda ise 10 ms'de biten işlem için kullanıcıyı boş yere bekletir.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸CQRS projeksiyon gecikmesi, yazma komutunun tamamlanmasının ardından asenkron olay yansıtıcılarının okuma modellerini güncellemesi sırasında geçen milisaniyeler veya saniyeler sebebiyle oluşur; kullanıcılar yönlendirildikleri sayfada bayat veri görür.
- ▸CQRS projeksiyon gecikmesi, yazma agregasyonunun kesinleşen olay günlüğü ile arka plan olay tüketicileri tarafından asenkron güncellenen materyalize okuma veritabanı görünümü arasındaki zamansal farktır.
Yaygın Yanılgılar
- ✗Olay henüz yayınlanmadan önce yazma komutu işlemi içinde okuma veritabanını sorgulamaya çalışmak.
Karar Kılavuzu & Önceliklendirme
Projeksiyon gecikmesi yönetilmediğinde, kullanıcı arayüzünde rahatsız edici hatalar (oluşturulan kaydın sayfayı yenileyince kaybolması), veri yarış durumları ve kullanıcıların ilk işlemin başarısız olduğunu sanıp mükerrer istek atması gibi kritik sorunlar yaşanır.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL-DOC]CQRS Projection Lag & Eventual Consistency Specification— TinyCTO Architectural Standards
