Türkçe

Mikroservis mimarilerinde dağıtık işlemleri yönetmek için Saga deseninin derinlemesine incelenmesi; faydaları, zorlukları, uygulama stratejileri ve gerçek dünya örnekleri.

Saga Deseni: Mikroservisler için Dağıtık İşlemlerin Uygulanması

Mikroservisler dünyasında, birden fazla servis arasında veri tutarlılığını sürdürmek önemli bir zorluk olabilir. Monolitik uygulamalarda yaygın olarak kullanılan geleneksel ACID (Atomisite, Tutarlılık, İzolasyon, Dayanıklılık) işlemleri, dağıtık ortamlar için genellikle uygun değildir. İşte bu noktada Saga deseni devreye girerek, dağıtık işlemleri yönetmek ve mikroservisler arasında veri bütünlüğünü sağlamak için sağlam bir çözüm sunar.

Saga Deseni Nedir?

Saga deseni, birden fazla mikroservis arasında bir dizi yerel işlemi yönetmek için kullanılan bir tasarım desenidir. Verinin geçici olarak tutarsız olabileceği ancak sonunda tutarlı bir duruma geleceği anlamına gelen nihai tutarlılığı (eventual consistency) sağlamanın bir yolunu sunar. Saga deseni, birden fazla servise yayılan tek bir atomik işleme güvenmek yerine, işlemi her biri tek bir servis tarafından gerçekleştirilen daha küçük, bağımsız işlemlere ayırır.

Bir Saga içindeki her yerel işlem, tek bir mikroservisin veritabanını günceller. Eğer işlemlerden biri başarısız olursa, Saga, önceki işlemlerin yaptığı değişiklikleri geri almak için bir dizi telafi edici işlem yürüterek genel operasyonu etkili bir şekilde geri alır.

Neden Saga Deseni Kullanılmalı?

Birkaç faktör, Saga desenini mikroservis mimarilerinde işlemleri yönetmek için değerli bir araç haline getirir:

ACID ve BASE Karşılaştırması

Saga desenini kullanıp kullanmamaya karar verirken ACID ve BASE (Temelde Mevcut, Esnek Durum, Nihai Tutarlılık) arasındaki farkı anlamak çok önemlidir.

İki Ana Saga Uygulama Stratejisi

Saga desenini uygulamanın iki temel yolu vardır: Koreografi ve Orkestrasyon.

1. Koreografi Tabanlı Saga

Koreografi tabanlı bir Saga'da, her mikroservis, diğer mikroservisler tarafından yayınlanan olayları dinleyerek ve buna göre tepki vererek Saga'ya katılır. Merkezi bir orkestratör yoktur; her servis kendi sorumluluklarını ve eylemlerini ne zaman gerçekleştireceğini bilir.

Nasıl Çalışır:

  1. Saga, bir mikroservisin işlemin başlangıcını belirten bir olay yayınlamasıyla başlar.
  2. Diğer mikroservisler bu olaya abone olur ve olayı aldıklarında yerel işlemlerini gerçekleştirirler.
  3. İşlemlerini tamamladıktan sonra, her mikroservis operasyonunun başarısını veya başarısızlığını belirten başka bir olay yayınlar.
  4. Diğer mikroservisler bu olayları dinler ve Saga'nın bir sonraki adımına geçmek veya bir hata meydana gelirse telafi edici işlemleri başlatmak gibi uygun eylemleri gerçekleştirir.

Örnek: E-ticaret Sipariş Verme (Koreografi)

  1. Sipariş Servisi: Yeni bir sipariş talebi alır ve bir `OrderCreated` olayı yayınlar.
  2. Envanter Servisi: `OrderCreated` olayına abone olur. Olayı aldığında envanteri kontrol eder. Yeterliyse, ürünleri rezerve eder ve `InventoryReserved` olayını yayınlar. Yetersizse, `InventoryReservationFailed` olayını yayınlar.
  3. Ödeme Servisi: `InventoryReserved` olayına abone olur. Olayı aldığında ödemeyi işler. Başarılı olursa, `PaymentProcessed` olayını yayınlar. Başarısız olursa, `PaymentFailed` olayını yayınlar.
  4. Kargo Servisi: `PaymentProcessed` olayına abone olur. Olayı aldığında gönderiyi hazırlar ve `ShipmentPrepared` olayını yayınlar.
  5. Sipariş Servisi: `ShipmentPrepared` olayına abone olur. Olayı aldığında siparişi tamamlandı olarak işaretler.
  6. Telafi: `PaymentFailed` veya `InventoryReservationFailed` olayı yayınlanırsa, diğer servisler dinler ve telafi edici işlemleri gerçekleştirir (örneğin, rezerve edilen envanteri serbest bırakma).

Koreografinin Avantajları:

Koreografinin Dezavantajları:

2. Orkestrasyon Tabanlı Saga

Orkestrasyon tabanlı bir Saga'da, merkezi bir orkestratör (genellikle adanmış bir servis veya bir durum makinesi olarak uygulanır) Saga'yı yönetir ve katılımcı mikroservisler tarafından yerel işlemlerin yürütülmesini koordine eder. Orkestratör, her servise ne yapacağını ve ne zaman yapacağını söyler.

Nasıl Çalışır:

  1. Saga, bir istemcinin orkestratörden işlemi başlatmasını istemesiyle başlar.
  2. Orkestratör, katılımcı mikroservislere yerel işlemlerini gerçekleştirmeleri için komutlar gönderir.
  3. Her mikroservis işlemini gerçekleştirir ve orkestratöre başarıyı veya başarısızlığı bildirir.
  4. Sonuca bağlı olarak, orkestratör bir sonraki adıma geçip geçmeyeceğine veya telafi edici işlemleri başlatıp başlatmayacağına karar verir.

Örnek: E-ticaret Sipariş Verme (Orkestrasyon)

  1. Sipariş Orkestratörü: Yeni bir sipariş talebi alır.
  2. Sipariş Orkestratörü: Envanter Servisi'ne ürünleri rezerve etmesi için bir komut gönderir.
  3. Envanter Servisi: Ürünleri rezerve eder ve Sipariş Orkestratörü'ne bildirir.
  4. Sipariş Orkestratörü: Ödeme Servisi'ne ödemeyi işlemesi için bir komut gönderir.
  5. Ödeme Servisi: Ödemeyi işler ve Sipariş Orkestratörü'ne bildirir.
  6. Sipariş Orkestratörü: Kargo Servisi'ne gönderiyi hazırlaması için bir komut gönderir.
  7. Kargo Servisi: Gönderiyi hazırlar ve Sipariş Orkestratörü'ne bildirir.
  8. Sipariş Orkestratörü: Siparişi tamamlandı olarak işaretler.
  9. Telafi: Herhangi bir adım başarısız olursa, Sipariş Orkestratörü ilgili servislere telafi edici komutlar gönderir (örneğin, rezerve edilen envanteri serbest bırakma).

Orkestrasyonun Avantajları:

Orkestrasyonun Dezavantajları:

Telafi Edici İşlemlerin Uygulanması

Saga deseninin çok önemli bir yönü, telafi edici işlemlerin uygulanmasıdır. Bu işlemler, başarısızlık durumunda önceden tamamlanmış işlemlerin etkilerini geri almak için yürütülür. Amaç, genel Saga tamamlanamasa bile sistemi tutarlı bir duruma geri getirmektir.

Telafi Edici İşlemler İçin Temel Hususlar:

Telafi Edici İşlem Örnekleri:

Zorluklar ve Dikkat Edilmesi Gerekenler

Saga deseni önemli avantajlar sunarken, bazı zorluklar ve dikkat edilmesi gereken hususlar da ortaya çıkarır:

Kullanım Alanları ve Örnekler

Saga deseni, özellikle dağıtık sistemlerde ve mikroservis mimarilerinde çeşitli kullanım durumları için çok uygundur. İşte bazı yaygın örnekler:

Örnek: Küresel Bankacılık İşlemi

Farklı ülkelerde bulunan, çeşitli düzenlemelere ve uyumluluk kontrollerine tabi iki farklı banka arasında küresel bir bankacılık işlemi içeren bir senaryo düşünün. Saga deseni, işlemin tanımlanmış adımları takip etmesini sağlayabilir:

  1. İşlemi Başlatma: Müşteri, ABD'de bulunan Banka A'daki hesabından, Almanya'da bulunan Banka B'deki bir alıcının hesabına para transferi başlatır.
  2. Banka A - Hesap Doğrulama: Banka A, müşterinin hesabını doğrular, yeterli bakiye olup olmadığını kontrol eder ve herhangi bir bloke veya kısıtlama olmadığını teyit eder.
  3. Uyumluluk Kontrolü (Banka A): Banka A, işlemin kara para aklamayı önleme (AML) düzenlemelerini veya herhangi bir uluslararası yaptırımı ihlal etmediğinden emin olmak için bir uyumluluk kontrolü yapar.
  4. Para Transferi (Banka A): Banka A, müşterinin hesabından borç kaydeder ve parayı bir takas odasına veya aracı bankaya gönderir.
  5. Takas Odası İşlemi: Takas odası işlemi işler, para birimi dönüşümünü (USD'den EUR'ya) gerçekleştirir ve parayı Banka B'ye yönlendirir.
  6. Banka B - Hesap Doğrulama: Banka B, alıcının hesabını doğrular ve aktif olduğundan ve para almaya uygun olduğundan emin olur.
  7. Uyumluluk Kontrolü (Banka B): Banka B, Alman ve AB düzenlemelerine uygun olarak kendi uyumluluk kontrolünü yapar.
  8. Hesaba Alacak Kaydetme (Banka B): Banka B, alıcının hesabına alacak kaydeder.
  9. Onay: Banka B, Banka A'ya bir onay mesajı gönderir, bu da daha sonra müşteriye işlemin tamamlandığını bildirir.

Telafi Edici İşlemler:

Araçlar ve Teknolojiler

Saga desenini uygulamada yardımcı olabilecek birkaç araç ve teknoloji bulunmaktadır:

Saga Desenini Uygulamak için En İyi Pratikler

Saga desenini etkili bir şekilde uygulamak için aşağıdaki en iyi pratikleri göz önünde bulundurun:

Sonuç

Saga deseni, mikroservis mimarilerinde dağıtık işlemleri yönetmek için güçlü bir araçtır. İşlemleri daha küçük, bağımsız işlemlere ayırarak ve başarısızlıkları telafi etmek için bir mekanizma sağlayarak, Saga deseni veri tutarlılığını korumanıza ve dayanıklı, ölçeklenebilir ve gevşek bağlı sistemler kurmanıza olanak tanır. Saga desenini uygulamak karmaşık olabilse de, esneklik, ölçeklenebilirlik ve dayanıklılık açısından sunduğu faydalar, onu herhangi bir mikroservis mimarisi için değerli bir varlık haline getirir.

Saga deseninin inceliklerini, koreografi ve orkestrasyon arasındaki değiş tokuşları ve telafi edici işlemlerin önemini anlamak, günümüzün karmaşık iş ortamlarının taleplerini karşılayan sağlam dağıtık sistemler tasarlamanız ve uygulamanız için sizi güçlendirecektir. Saga desenini benimsemek, en karmaşık dağıtık işlemleri bile güvenle yürütebilen, gerçekten dayanıklı ve ölçeklenebilir mikroservis mimarileri oluşturmaya yönelik bir adımdır. Bu deseni uygularken özel ihtiyaçlarınızı ve bağlamınızı göz önünde bulundurmayı ve uygulamanızı gerçek dünya deneyimine ve geri bildirimlere dayanarak sürekli olarak iyileştirmeyi unutmayın.