Okuma yükü için read replica eklediniz; kullanıcılar az önce kaydettikleri veriyi göremediklerini söylüyor. Neden olur ve nasıl çözersiniz?

Cevap

Bu, replication lag kaynaklı bir read-your-writes tutarlılık sorunudur. Yazma primary veritabanına gider, replikasyon asenkron olduğu için replica'ya birkaç milisaniye ile birkaç saniye arası geç ulaşır. Kullanıcı kaydettikten hemen sonra sayfa yenilenip okuma replica'dan yapılırsa eski veri görünür.

t=0   POST /profile -> primary: UPDATE users SET name='Ayşe'
t=5ms GET /profile  -> replica: name='Ali' (henüz replike olmadı)

Çözümler

  1. Yazandan sonra primary'den oku: kullanıcı yazma yaptıktan sonra belirli bir süre (ör. 5-10 sn) o kullanıcının okumaları primary'ye yönlendirilir. Son yazma zamanı session'da veya cookie'de tutulur.
  2. Kritik okumaları her zaman primary'den yap: kullanıcının kendi profili, sepeti, ödeme durumu. Replica'lar raporlar, listeler, herkese açık sayfalar için kullanılır.
  3. LSN/GTID takibi: yazmadan sonra primary'nin log pozisyonu (PostgreSQL'de LSN) alınır; okuma yapılacak replica bu pozisyona ulaşmamışsa primary'ye düşülür. Daha karmaşık ama kesin çözümdür.
  4. Yazma yanıtını kullan: API güncellenmiş kaydı yanıtta döner; frontend bunu cache'e yazar (TanStack Query setQueryData) ve hemen yeniden fetch etmez.
  5. Senkron replikasyon: tutarlılık sağlar ama yazma latency'sini artırır ve replica çökerse yazmaları durdurabilir; genelde sadece kritik verilerde tercih edilir.
// Basit yönlendirme: yazma yapan kullanıcı 10 sn boyunca primary'den okur
function dbFor(req) {
  const lastWrite = Number(req.cookies.lw ?? 0);
  return Date.now() - lastWrite < 10_000 ? primary : replica;
}

İzleme

Replica gecikmesini metrik olarak izleyin (PostgreSQL'de pg_stat_replication, replay_lag) ve eşik aşılırsa replica'yı havuzdan geçici olarak çıkarın.

Aynı sorun cache katmanında da görülür (yazdıktan sonra eski cache'ten okumak); çözüm mantığı aynıdır.

  1. Dikey ve yatay ölçekleme arasındaki fark nedir?KolaySistem TasarımıFull Stack
  2. Hangi cache stratejilerini biliyorsunuz?OrtaSistem TasarımıFull Stack
  3. REST ile GraphQL arasındaki farklar nelerdir?OrtaSistem TasarımıFull Stack
  4. Bit.ly benzeri bir URL kısaltma servisi tasarlayın.ZorSistem TasarımıFull Stack
  5. Google Docs benzeri gerçek zamanlı ortak düzenleme yüksek seviyede nasıl tasarlanır?ZorSistem TasarımıFull Stack
  6. CDN nedir, nasıl çalışır ve hangi durumlarda kullanılır?KolaySistem TasarımıFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle