DBAtlas · Veritabanı operasyon atlası

Karar: Sharding mi Replikasyon mu (ölçekleme)?

Veritabanı ölçekleme kararı, darboğazın okuma mı yazma mı olduğuna ve verinin tek düğüme sığıp sığmadığına göre değişir. Yanlış strateji, gereksiz karmaşıklık veya çözülmeyen darboğaz demektir. Bu ağaç, önce en ucuz ve basit yolları (dikey ölçek, önbellek) hatırlatarak read replica ile sharding arasında doğru seçimi yapmanı sağlar.

Önce en basit yolu denedin mi: dikey ölçek ve sorgu iyileştirme?

Dağıtık mimariye geçmeden önce en ucuz kazanımı ele: donanımı büyütmek (CPU/RAM/IOPS), eksik index'leri eklemek ve pahalı sorguları düzeltmek çoğu darboğazı çözer. Karmaşıklığı ancak bunlar tükendiğinde artır.

  • Hayır / henüz sınıra gelmedim
  • Evet, dikey ölçek ve tuning yetmiyor

Darboğaz okuma mı yoksa yazma/veri hacmi mi?

Ölçek sorununun kaynağını ayır: çok sayıda okuma sorgusu tek düğümü mü boğuyor (okuma ağırlıklı), yoksa yazma hızı veya toplam veri boyutu tek düğümün kapasitesini mi aşıyor (yazma/hacim ağırlıklı)? Bu ayrım, replika ile sharding arasındaki temel farktır.

  • Okuma trafiği baskın, yazma tek düğüme sığıyor
  • Yazma hızı veya veri hacmi tek düğümü aşıyor

Okumalar tekrarlı/önbelleklenebilir mi, yoksa taze ve çeşitli mi?

Okuma darboğazında bir adım daha ayır: aynı sonuçlar tekrar tekrar mı okunuyor (önbellek çok etkili olur), yoksa okumalar çeşitli, geniş ve güncel veri mi istiyor (ek okuma kapasitesi gerekir)? Bu, önbellek katmanı ile read replica arasında seçim yaptırır.

  • Aynı veriler tekrar okunuyor, hafif eskime kabul
  • Çeşitli/taze okuma, ham okuma kapasitesi gerek

Öneri: Önce dikey ölçek + sorgu iyileştirme

Dağıtık mimariye geçmeden önce başvurulacak ilk ve en ucuz yol. Donanımı büyütmek ve sorguları/index'leri düzeltmek, çoğu ölçek sorununu operasyonel karmaşıklık eklemeden çözer.

Öneri: Read replica (okuma ölçekleme)

Yazma tek düğümde kalırken (primary), okuma trafiğini bir veya daha çok replikaya dağıtırsın. Okuma ağırlıklı yüklerde ham okuma kapasitesini ve dayanıklılığı artırmanın standart yoludur.

Öneri: Önbellek katmanı (cache)

Sık ve tekrar okunan sonuçları hızlı bir bellek içi katmanda tutarak veritabanı yükünü kökten azaltır. Doğru desende, veritabanına gitmeden yanıt vererek hem gecikmeyi hem yükü düşürür.

Öneri: Sharding (yazma/veri ölçekleme)

Veriyi bir shard anahtarına göre bölerek birden çok bağımsız düğüme dağıtırsın; her düğüm verinin bir dilimini ve onun yazmalarını üstlenir. Yazma hızını ve toplam veri hacmini ölçeklemenin yoludur, ama önemli karmaşıklık getirir.

DBAtlas'ta aç →