Sayfalar

2 Mart 2025 Pazar

Yazma ve Okuma Ayrımının Mikroservis Düzeyindeki Uygulaması

 

CQRS, mikroservisler bağlamında şu şekilde çalışır:

1. Yazma (Command) İşlemleri:

  • Her mikroservis, yazma işlemleri için kendi command handler (komut işleyici) ve veri modelini kullanır.
  • Yazma işlemleri, genellikle veri tutarlılığını sağlamak için daha karmaşık ve normalleştirilmiş (normalized) veri modellerine dayanır. Bu modeller, işlem tutarlılığı (ACID) için optimize edilmiştir.
  • Örneğin, bir sipariş mikroservisi bir müşteri siparişi alırken, ödeme bilgileri ve ürün bilgilerini aynı tabloda tutabilir, ancak bu sadece yazma işlemleri için geçerlidir.

2. Okuma (Query) İşlemleri:

  • Okuma işlemleri için ise mikroservisler, genellikle sorgu işleyicileri kullanarak denormalize edilmiş (yani daha basit ve verimli okuma için optimize edilmiş) veri modellerine dayalı bir yapı oluşturur.
  • Okuma işlemleri, yazma işlemine göre daha hızlı ve verimli olması adına farklı veri yapıları ve veri tabanları kullanabilir. Bu, okuma verilerinin daha hızlı ulaşılmasını sağlar.
  • Örneğin, aynı sipariş mikroservisi okuma için sadece sipariş durumu, toplam fiyat gibi özet verileri içeren bir veri modelini kullanabilir, tüm sipariş detaylarını burada tutmak gerekmez.

Mikroservis Düzeyinde Ayrım Örneği

Bir e-ticaret uygulamasını düşünün:

  • Sipariş Mikroservisi:

    • Yazma işlemleri (komutlar) için, sipariş oluşturma, ödeme alma, ürünleri güncelleme gibi işlemler yapılır. Bu işlemler, veritabanında normalize edilmiş bir modelle yapılır (örneğin, her bir siparişin müşteri ve ürün bilgileri, ödeme durumu gibi detayları içerir).
    • Okuma işlemleri (sorgular) için, sadece siparişin durumu, tarih ve toplam tutar gibi bilgileri içeren basit bir model kullanılabilir. Bu, okuma işlemlerini hızlandırır.
  • Kullanıcı Mikroservisi:

    • Kullanıcı yazma işlemleri, kullanıcının kaydını güncellemek, yeni kullanıcı eklemek vb. işlemlerle yapılır. Kullanıcı bilgileri normalleştirilmiş bir veri yapısında tutulabilir.
    • Kullanıcı okuma işlemleri ise sadece kullanıcı adı, e-posta gibi bilgilerle ilgili sorgular olabilir, denormalize edilmiş bir yapıya sahip olabilir.

Mikroservisler Arasında Veri Ayrımı:

Yazma ve okuma işlemlerinin ayrılması yalnızca tek bir mikroservis içinde değil, aynı zamanda mikroservisler arasında da olabilir. Örneğin:

  • Sipariş Mikroservisi yazma ve okuma işlemleri için ayrı modeller ve veri tabanları kullanabilir. Sipariş oluşturulurken veritabanına yazılır ve okuma işlemleri için farklı bir denormalize veri modeline sahip bir okuma servisi oluşturulabilir.

  • Kullanıcı Mikroservisi'nde de benzer şekilde kullanıcı verilerini yönetirken yazma ve okuma işlemleri için farklı veri modelleri ve depolama teknikleri kullanılabilir.

Veritabanı Ayrımı (Database Per Service):

CQRS, mikroservislerin her birinin kendi veritabanına sahip olmasına olanak tanır. Bu, mikroservisin sadece kendi yazma ve okuma işlemlerini etkileyecek şekilde veri üzerinde işlem yapmasını sağlar.

  • Yazma Veritabanı: Bu veritabanı yazma işlemleri için optimize edilmiş olabilir. Normalleştirilmiş veri yapıları, transaction yönetimi ve ACID özelliklerine odaklanır.
  • Okuma Veritabanı: Okuma işlemleri için denormalize edilmiş veri yapıları kullanılarak performans artırılabilir. Okuma servisi farklı bir veri tabanı ya da indeksleme sistemi kullanarak okuma hızını artırabilir.

CQRS’in Mikroservislerde Sağladığı Faydalar:

  1. Özelleştirilmiş Veri Modelleri: Her mikroservis, yazma ve okuma işlemleri için farklı veri yapıları kullanabilir. Bu, her bir işlemi optimize etmenizi sağlar.
  2. Yüksek Performans: Okuma işlemleri için denormalize edilmiş veri yapıları kullanılabilir, bu da okuma işlemlerini hızlandırır.
  3. Bağımsız Ölçeklenebilirlik: Yazma ve okuma işlemleri farklı mikroservisler olarak ayrı ayrı ölçeklenebilir. Bu, okuma trafiği arttığında okuma mikroservislerinin ölçeklendirilmesini sağlar.
  4. Transaction Yönetimi: Yazma işlemleri genellikle daha karmaşıktır ve ACID özellikleri sağlamak için özel transaction yönetimi gerektirir. Okuma işlemleri ise daha hızlı ve performans odaklı olabilir.

Sonuç:

CQRS, mikroservislerde yazma ve okuma işlemleri arasındaki ayrımı netleştirir ve her iki işlem için farklı veri yapılarını ve işlevleri kullanmanıza olanak tanır. Bu, veritabanı tasarımında, işlem tutarlılığında ve performans iyileştirmelerinde önemli faydalar sağlar. Ayrıca mikroservisler düzeyinde uygulandığında, her bir mikroservisin yalnızca ilgili işlem için optimize edilmesi, sistemi daha esnek ve ölçeklenebilir hale getirir.

Hiç yorum yok:

Yorum Gönder