ÖZET VE TEKNİK CEVAP
Komut ve Sorgu Sorumluluğunun Ayrılması (CQRS) sistemlerinde, Yazma Modeli (Postgres OLTP) ile Okuma Modeli (Elasticsearch / Redis projeksiyonları) asenkron olay kuyrukları (Kafka, CDC) ile birbirinden ayrılmıştır. Kullanıcı bir işlem yaptığında (ör. 'Profilimi Güncelle'), komut ana veritabanına yazılır ve bir olay fırlatılır. Okuma modeli bu olayı 50 ms ila 2 saniye gecikmeyle işler. Kullanıcı formu kaydeder kaydetmez profil sayfasına yönlendirilirse, okuma sorgusu henüz güncellenmemiş projeksiyona düşer ve kullanıcı eski profilini görür. Bu durum **'Hayalet Durum (Ghost State)'** kullanıcı deneyimi krizine yol açar: Kullanıcı 'Kaydolmadı' sanıp butona 5 kez üst üste basar ve yarış durumları (race condition) yaratır. Canlı CQRS sistemleri bunu **'Kendi Yazdığını Okuma (Read-Your-Own-Writes)' Garantisi** ile çözer: (1) İstemci tarafında iyimser güncelleme, (2) Komut yanıtında artan versiyon numarası (`X-Entity-Version: 42`) dönmek ve (3) Okuma katmanında projeksiyon bu versiyona ulaşana kadar sorguyu doğrudan ana veritabanına yönlendirmek.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
CQRS'te 'Kendi Yazdığını Okuma' garantisi Monotonik Versiyon Eşikleriyle (Watermarks) çalışır: (1) Komut Çalıştırma: Yazma veritabanı `version = 42` kaydını atar ve onaylar. API `{ success: true, version: 42 }` yanıtı döner. (2) İstemci Durum Saklama: İstemci oturumunda `bilinen_son_versiyon = 42` değerini saklar. (3) Versiyon Eşik Kontrolü: İstemci okuma yaparken `If-Version-At-Least: 42` başlığını gönderir. Okuma kopyası henüz 41. versiyondaysa, ağ geçidi projeksiyonun yetişmesi için 100 ms bekler veya sorguyu anında ana yazma veritabanına yönlendirir.
2. Doğru Kullanım Senaryosu
Banka hesap bakiyesi görüntüleme, kullanıcı profil güncellemeleri, e-ticaret sipariş onay ekranları ve ortak döküman düzenleme sistemleri.
3. Prodüksiyon Arıza Modları
Versiyon kontrolü yapmadan kullanıcıyı asenkron okuma modeline yönlendirip 'işlemim kaydedilmedi' paniği yaratmak; projeksiyon geciktiğinde tüm kullanıcıları ana veritabanına yönlendirip ana sunucunun CPU'sunu kilitlemek.
4. Teşhis ve Telemetri Sinyalleri
Destek ekiplerine 'Bilgilerimi güncelledim ama eski bilgilerim görünüyor' şikayetlerinin yağması; yoğun saatlerde projeksiyon gecikmesinin 500 ms'yi aşması; 1 saniye içinde yapılan mükerrer form kayıtları.
5. Önleme ve Mimari Bariyerler
Önyüzde İyimser Arayüz (Optimistic UI) güncellemeleri yapın; tüm değişiklik yanıtlarına artan varlık versiyon jetonu ekleyin; okuma ağ geçitlerine projeksiyon yetişene kadar kısa süreli akıllı bekleme ($<150 ext{ms}$) kuralı koyun.
6. Mimari Ödünleşimler (Trade-offs)
Kendi Yazdığını Okuma garantisi CQRS sistemlerindeki kafa karıştırıcı arayüz hatalarını yok eder; ancak istemci ve ağ geçidinin versiyon başlıklarını yönetmesini gerektirir.
Vaka İncelemesi (TinyCTO Örneği)
Bir finans uygulaması para transferleri için PostgreSQL, geçmiş listeleme için Elasticsearch kullanan CQRS mimarisine sahipti. $500 gönderen kullanıcı transfer geçmişine yönlendiriliyordu. Kafka CDC transferi Elasticsearch'e 800 ms'de yazdığı için kullanıcı eski bakiyesini görüp transferi tekrar gönderiyor ve çift para çekiliyordu. Ekip versiyon eşiği sistemini kurdu: Transfer API'si `version: 104` döndü. Geçmiş sayfası Elasticsearch'teki son versiyonu denetledi; eğer 104'ten küçükse ilk 5 kaydı doğrudan PostgreSQL'den çekti. Çift transfer şikayetleri anında sıfıra indi.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaNihai tutarlı (eventually consistent) sistemlerde 'Kendi Yazdığını Okuma' (Read-Your-Own-Writes) tutarlılığı nedir?
Önlem alınmamış standart CQRS mimarisi Kendi Yazdığını Okuma tutarlılığını neden bozar?
CQRS Nihai Tutarlılık (Eventual Consistency): 'Kendi Yazdığını Okuma' (Read-Your-Writes) Garantileri — Sıkça Sorulan Sorular
CQRS web uygulamalarında İyimser Arayüz (Optimistic UI) güncellemesi nedir?
Sunucu komutunun başarılı olacağını varsayarak butona basıldığı anda arayüzü güncelleyen, yalnızca sunucudan hata dönerse eski duruma geri dönen önyüz tekniğidir.
Monotonik Versiyon Başlıkları projeksiyon gecikmesini nasıl çözer?
İstemcinin beklediği minimum versiyonu okuma ağ geçidine bildirerek; okuma kopyası geride kalmışsa ağ geçidi kısa süre bekler veya ana veritabanına sorar.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸CQRS yazma ve okuma modellerini asenkron boru hatlarıyla ayırarak replikasyon gecikmesi yaratır.
- ▸Okuma ekranına hemen yönlendirilen kullanıcılar değişikliklerin kaybolduğu 'Hayalet Durum' yaşar.
- ▸Monotonik Versiyon Eşikleri ağ geçitlerinin okuma kopyasının güncelliğini denetlemesini sağlar.
- ▸İyimser arayüz güncellemeleri arka plan projeksiyonları eşitlenirken anında görsel geri bildirim sunar.
Yaygın Yanılgılar
- ✗Yanılgı: Nihai tutarlılık sistemin herkes için sürekli eski kalacağı anlamına gelir (Gerçek: Özel protokollerle işlemi yapan kullanıcının anlık güncel görmesi garanti edilir).
- ✗Yanılgı: Eski veri görmemek için her okuma sorgusu ana yazma veritabanına atılmalıdır (Gerçek: Her okumayı ana veritabanına yönlendirmek CQRS'in tüm ölçeklenme avantajını yok eder).
Karar Kılavuzu & Önceliklendirme
Okuma ölçeklenebilirliğinden ödün vermeden kullanıcı güvenini korumak için CQRS mimarilerinde versiyon eşik başlıkları ve iyimser arayüz uygulayın.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]CQRS Architecture & Eventual Consistency Boundaries— Martin Fowler / martinfowler.com
