Sayfalar

2 Mart 2025 Pazar

Microservice Mimaride Veri Senkronizasyonu

 Veri senkronizasyonu, özellikle CQRS (Command Query Responsibility Segregation) ve microservices mimarilerinde, yazma ve okuma veri tabanları arasındaki tutarlılığı sağlamak için kritik bir konudur. Yazma ve okuma veri tabanlarının ayrılması, sistemin verimliliğini artırırken, verilerin tutarlılığının yönetilmesi ve güncellenmesi önemli bir zorluk oluşturabilir.

Veri Senkronizasyonu Nedir?

Veri senkronizasyonu, bir veri kaynağındaki (yazma veri tabanı) verilerin, başka bir veri kaynağına (okuma veri tabanı) doğru ve tutarlı bir şekilde aktarılmasını ifade eder. Bu süreç, genellikle veritabanları arasındaki veri farklılıklarını ortadan kaldırmayı hedefler.

CQRS deseni uygulandığında, okuma ve yazma işlemleri farklı veri tabanlarında yapılır. Yazma veritabanındaki değişiklikler (yeni veriler, güncellenmiş veriler, silinen veriler) okuma veritabanına aktarılmalıdır. Ancak bu süreç, anında gerçekleşmeyebilir ve zamanla gerçekleşebilir. Eventual Consistency (sonunda tutarlılık) ve Asenkron Senkronizasyon gibi yöntemler kullanılır.

Veri Senkronizasyonu Yöntemleri

  1. Eventual Consistency (Sonunda Tutarlılık)

Eventual consistency, yazma ve okuma veri tabanları arasında anında tutarlılık sağlamaz. Bunun yerine, veri güncellemeleri bir süre sonra her iki veri tabanında da tutarlı hale gelir.

  • Yazma işlemi gerçekleştiğinde, bu işlemle ilgili bir olay (event) tetiklenir. Bu olay, yazma veri tabanına kaydedilir ve okuma veri tabanını güncellemek için kullanılır.
  • Bu olay, asenkron bir şekilde okuma veri tabanına aktarılır. Yani, okuma veri tabanındaki güncelleme işlemine hemen başlamaz, ancak belirli bir süre sonra okuma veritabanı bu veriyi alır ve günceller.

Örnek:

  • Sipariş oluşturma: Bir kullanıcı sipariş verir ve sipariş yazma veritabanına kaydedilir. Bunun ardından bir "sipariş oluşturulma" olayı tetiklenir. Okuma mikroservisi bu olayı dinler ve sipariş verisini okuma veri tabanına aktarır. Ancak bu süreç hemen gerçekleşmez; yazma ve okuma veri tabanları arasındaki tutarlılık zamanla sağlanır.

Veri Senkronizasyonu için Kullanılabilecek Yöntemler ve Teknolojiler

  1. Event-Driven Architecture (Olay Tabanlı Mimari)

Event-driven mimaride, yazma işlemi bir olay (event) oluşturur ve bu olay okuma veri tabanını güncelleyen mikroservislere iletilir. Bu mikroservisler, olayları dinler ve okuma veri tabanını asenkron bir şekilde günceller.

  • Event Publisher: Yazma veri tabanına veri ekleyen sistem, bir olay tetikler. Bu olay, genellikle bir message broker (mesaj aracısı) kullanılarak yayılır.
  • Event Consumer: Okuma veri tabanı, bu olayı dinleyen bir mikroservis aracılığıyla güncellenir.

Teknolojiler:

  • Kafka: Yazma mikroservisi, Kafka üzerinden "sipariş oluşturuldu" gibi bir olay gönderir. Okuma mikroservisi bu olayı alır ve okuma veri tabanını günceller.
  • RabbitMQ: Kafka'ya benzer olarak, RabbitMQ da mesaj kuyruğu kullanarak olayları asenkron olarak iletir.

Örnek Akış:

  1. Sipariş yazma veri tabanına kaydedilir.

  2. "Sipariş oluşturuldu" olayı, RabbitMQ veya Kafka gibi bir message broker'a gönderilir.

  3. Okuma veri tabanı, bu olayı dinler ve veritabanına yeni sipariş bilgisini ekler.

  4. CQRS ve Event Sourcing

Event Sourcing, her değişikliği bir olay (event) olarak kaydeder. Yazma veritabanına yapılan her işlem bir olaydır ve bu olay, okuma veri tabanına iletilerek veri senkronizasyonu sağlanır.

  • Yazma Veri Tabanı: Veriler bir olay olarak kaydedilir.
  • Okuma Veri Tabanı: Bu olaylar dinlenir ve okuma veri tabanı buna göre güncellenir.

Event Sourcing Özelliği:

  • Her işlem bir event olarak kaydedilir ve okuma veritabanı bu olayları işleyerek güncel verilere ulaşır.

Örnek:

  1. Sipariş yazma veritabanına kaydedildiğinde, "sipariş oluşturulma" olayı tetiklenir.

  2. Event sourcing kullanarak, bu olay hem yazma veritabanında hem de okuma veri tabanında biriken olaylar sayesinde işlenir.

  3. Polling (Periyodik Sorgulama)

Polling yöntemi, okuma mikroservisinin belirli aralıklarla yazma veri tabanını sorgulamasıdır. Yazma veritabanında herhangi bir değişiklik olup olmadığını kontrol eder ve eğer değişiklik varsa okuma veri tabanını günceller.

  • Adımlar:
    1. Okuma servisi belirli aralıklarla yazma veri tabanını sorgular.
    2. Yazma veri tabanındaki değişiklikleri (yeni siparişler veya güncellenmiş siparişler) tespit eder.
    3. Değişiklikler, okuma veri tabanına aktarılır.

Not: Bu yaklaşım, daha fazla kaynak tüketebilir ve gecikmelere neden olabilir çünkü sürekli sorgulama yapılır.

  1. Database Replication (Veritabanı Replikasyonu)

Bazı durumlarda, yazma veri tabanındaki verilerin okuma veri tabanına replikasyonu yapılır. Bu, genellikle aynı veri kaynağının iki farklı versiyonunun kullanılmasına dayanır, ancak senkronizasyonun manuel ya da asenkron yapılmasını gerektirir.

Veritabanı Replikasyonu:

  • Master-Slave Replication: Yazma veri tabanı (master) değişiklik yapar ve bu değişiklikler okuma veri tabanına (slave) yansır.
  • Asenkron Replikasyon: Replikasyon işlemi hemen gerçekleşmez ve yazma veri tabanındaki değişiklikler belirli bir süre sonra okuma veri tabanına aktarılır.

Veri Senkronizasyonu Zorlukları ve Çözümleri

  1. Veri Tutarlılığı (Consistency):

    • Zorluk: Yazma ve okuma veri tabanları arasında anlık tutarlılığı sağlamak zordur, çünkü veri asenkron bir şekilde güncellenir.
    • Çözüm: Eventual consistency modelini kullanarak, veri zamanla tutarlı hale gelir. Bununla birlikte, tutarlılıkla ilgili riskleri azaltmak için, işlem sırasını takip edebilecek event ordering (olay sıralaması) sağlanabilir.
  2. Veri Kaybı:

    • Zorluk: Event-driven mimarilerde, bir olay kaybolursa okuma veritabanı güncellenmeyebilir.
    • Çözüm: Olay kayıplarını önlemek için message broker sistemlerinin sağlamlığı sağlanmalı ve olaylar yeniden oynatılabilir olmalıdır. Ayrıca, her olayın kaydedilmesi için Event Store kullanılabilir.
  3. Performans:

    • Zorluk: Veri senkronizasyonu zaman alabilir ve sistemdeki yükü artırabilir.
    • Çözüm: Eventual consistency ve asenkron veri aktarımı kullanarak, bu süreci daha verimli hale getirebiliriz. Veritabanı sorgulama sıklığı azaltılabilir ve sadece değişiklikler iletilir.

Sonuç:

Veri senkronizasyonu, özellikle CQRS deseniyle çalışan mikroservislerde, yazma ve okuma veri tabanları arasındaki tutarlılığı sağlamak için kritik bir bileşendir. Yazma veri tabanındaki değişikliklerin okuma veri tabanına aktarılması, event-driven, event sourcing gibi yöntemlerle sağlanır. Polling ve Database Replication gibi alternatifler de kullanılabilir. Bu süreç, genellikle eventual consistency ilkesine dayanır, yani veri tutarlılığı zamanla sağlanır.

Hiç yorum yok:

Yorum Gönder