Fintech

Dağıtık Veri Akışlarında Dayanıklı Sistem Tasarımı: SymbolService Case

Dış veri sağlayıcılarına bağımlı çalışan bir kripto veri sisteminde, veri tutarlılığını korumak için dayanıklı bir mimari tasarlandı. Sistem, hata anlarında bile doğru kalacak şekilde yeniden kurgulandı ve yanlış veri yayılımı engellendi.

Bağlam

Kripto para piyasası, 7/24 çalışan ve hata toleransının neredeyse sıfır olduğu bir ortamdır. Bu ortamda sembol verisinin doğruluğu, sistemin en kritik bileşenlerinden biridir.

HemenBasvur platformunda geliştirilen SymbolService, CoinGecko ve CoinAPI gibi dış sağlayıcılardan veri toplarken temel bir problemle karşı karşıyaydı:

Kesinti yaşamadan veri tutarlılığını nasıl garanti edebiliriz?

Problem

  • Dış veri sağlayıcılarında yaşanan kesinti veya gecikmeler veri akışını bozabiliyordu
  • Kısmi veya hatalı veri sistemde yayınlanma riski taşıyordu
  • Yanlış veri finansal kayıplara neden olabilirdi
  • Sistem hata anlarında güvenli davranacak şekilde tasarlanmamıştı

Kısıtlar

  • Sistem dış API’lere bağımlıydı (CoinGecko, CoinAPI)
  • Veri akışı kesintisiz olmalıydı
  • Yanlış veri yayınlamak, hiç veri yayınlamamaktan daha büyük riskti
  • Redis potansiyel bir single point of failure’dı

Kök Nedenler

  • Veri güncelleme işlemleri atomik değildi
  • Sistem dış bağımlılık kesintilerine karşı toleranslı değildi
  • Cache katmanı (Redis) tekil hata noktasıydı
  • Veri bütünlüğü yerine güncellik önceliklendiriliyordu
  • Boş veri senaryoları için koruma yoktu

Temel Tasarım Kararları

  • A/B koleksiyon swap ile atomik veri geçişi sağlandı

    • Yeni veri aktif koleksiyon yerine ayrı bir koleksiyonda hazırlanıp tek adımda devreye alındı

    • Kirli okuma ve kısmi veri riski ortadan kaldırıldı

  • Empty Snapshot Guard uygulandı

    • Dış kaynaklardan boş veri gelirse sistem güncelleme yapmadı

    • Tüm veri setinin yanlışlıkla silinmesi engellendi

  • Dual Event (Fallback) stratejisi tasarlandı

    • Redis çalışıyorsa referans, çalışmıyorsa full payload gönderildi

    • Cache bağımlılığı nedeniyle veri akışının durması engellendi

  • Startup Health Check eklendi

    • Sistem başlarken aktif veri bütünlüğü doğrulandı

Tavizler

  • Veri güncelliği bazı durumlarda bilinçli olarak geciktirildi
  • Performans yerine doğruluk önceliklendirildi
  • Redis fallback durumunda latency artışı kabul edildi

Hata Senaryoları

  • Dış API boş veri dönerse sistem güncelleme yapmaz
  • Redis çökmesi durumunda fallback event devreye girer
  • Sistem fail fast yerine fail safe davranır
  • Yanlış veri yaymak yerine eski veri korunur

Sonuçlar

  • Kirli okuma ve kısmi veri riski ortadan kaldırıldı
  • Sistem dış bağımlılık kesintilerinde çalışmaya devam etti
  • Redis çökmesi durumunda veri akışı kesilmedi
  • Yanlış veri yayınlama riski minimize edildi
  • Sistem hata anlarında kontrollü çalışır hale geldi

Temel Çıkarım

  • Dağıtık sistemlerde asıl problem performans değil, doğruluktur.
  • Sistemler genellikle her şey yolundayken çalışacak şekilde tasarlanır. Oysa gerçek dayanıklılık, sistemin hata anında nasıl davrandığıyla belirlenir.
  • Bu sistemde alınan en kritik karar, veriyi ne zaman güncellemek değil; gerektiğinde güncellememeyi seçmekti.
Paylaş