Saga deseni: dağıtık işlemleri telafi adımlarıyla yönetmek
Saga deseni nedir, mikroservislerde dağıtık işlemler telafi adımlarıyla nasıl tutarlı kalır? Koreografi ve orkestrasyon yaklaşımları ile örnek akış.
Saga deseni nedir?
Saga deseni, birden fazla servisi ya da veritabanını kapsayan bir iş sürecini, her biri kendi içinde yerel işlem olan bir adımlar dizisi olarak yönetme yöntemidir. Bir adım başarısız olursa daha önce tamamlanan adımlar, her biri için tanımlı bir telafi (compensating) işlemiyle geri alınır.
Geleneksel tek veritabanı işleminde (transaction) hepsi ya da hiçbiri ilkesi veritabanı tarafından sağlanır. Servisler ayrı veritabanları kullandığında bu garanti bir arada yok olur; saga, bu boşluğu uygulama düzeyinde doldurur ve nihai tutarlılığı hedefler.
Neden gerekir?
Mikroservis mimarisinde her servis genellikle kendi verisine sahiptir. Sipariş, stok ve ödeme ayrı servislerdeyse tek bir iş akışı bu servisleri sırayla dolaşır. Bu akışı aşamalı onay protokolü (two-phase commit) gibi katı dağıtık işlemle yönetmek mümkündür, ancak kilitleri uzun tutar, servisleri birbirine sıkı bağlar ve bir servisin yavaşlığı hepsini etkiler.
Saga, kilidi tutmak yerine her adımı hemen tamamlar ve hata halinde telafi eder. Karşılığında, süreç boyunca verinin geçici olarak tutarsız görünebileceğini kabul eder.
Nasıl çalışır?
Her adımın bir de tersi vardır: asıl işlem ve onu etkisiz kılan telafi işlemi. Örneğin stok ayırmanın telafisi stok serbest bırakmaktır. Akış sırayla ilerler; bir adım hata verirse tamamlanmış adımların telafileri ters sırayla çalıştırılır.
Saganın yaygın yürütme biçimleri şunlardır:
- Koreografi: Merkezi bir yönetici yoktur. Her servis işini bitirince bir olay yayımlar, sıradaki servis bu olayı dinleyerek harekete geçer. Basit akışlar için hafiftir, ancak akış büyüdükçe kimin neyi tetiklediğini izlemek zorlaşır.
- Orkestrasyon: Bir koordinatör (orkestratör) adımları sırayla çağırır, sonucu izler ve hata halinde telafileri tetikler. Akış tek yerde okunur, ancak koordinatör önemli bir bağımlılık haline gelir.
Küçük bir örnek
Örneğin bir seyahat rezervasyonunda uçuş, otel ve araç kiralama ayrı servislerdir. Akış uçuşu ayırır, ardından oteli ayırır, sonra aracı ayırır. Araç servisi yer bulamazsa saga çalışmaya başlar: otel rezervasyonu iptal edilir, uçuş rezervasyonu iptal edilir ve müşteriye işlemin tamamlanamadığı bildirilir.
Burada iptal işlemlerinin kendisi de başarısız olabilir, bu yüzden telafi adımları tekrar denenebilir olmalıdır. Aynı iptal komutu tekrar gelirse sonuç değişmemelidir; yani adımlar idempotent tasarlanır.
Zorluklar ve dikkat noktaları
Saga, ACID işlemlerin izolasyon garantisini vermez. Süreç ortasındayken diğer işlemler yarım kalmış veriyi görebilir. Bu etki, anlamsal kilit (kaydı süreçte işaretleme) ya da iyimser yaklaşım gibi yöntemlerle azaltılır.
Telafi her zaman mümkün olmayabilir: gönderilmiş e-posta ya da fiziksel olarak yola çıkmış kargo geri alınamaz. Bu tür adımlar sürecin sonuna konur ya da "geri alma" yerine "düzeltme" işlemi tanımlanır. Olay kaybını önlemek için veri değişikliği ile olay yayımının aynı atomik adımda yapılmasını sağlayan outbox deseni de sıkça birlikte kullanılır.
Takip için her sürece ayrı bir kimlik verilmesi ve durum geçişlerinin kaydedilmesi, hata ayıklamayı büyük ölçüde kolaylaştırır.
Yakın kavramlarla farkı
Aşamalı onay (two-phase commit), tüm katılımcıları kilitleyip birlikte onaylatan senkron bir protokoldür; saga ise yerel işlemleri sırayla çalıştırıp hatada telafi eden asenkron bir yaklaşımdır. Aşamalı onay güçlü tutarlılık, saga ise nihai tutarlılık sağlar.
Olay güdümlü mimari, saga koreografisinin altyapısıdır ama aynı şey değildir: her olay güdümlü sistem saga içermez. İş akışı motorları ise orkestrasyon tarzı sagaları yönetmek için kullanılabilen araçlardır.
Mindset programlarında nerede karşınıza çıkar?
Idempotency ve Dağıtık Tutarlılık Desenleri eğitimi, tekrar problemi, idempotency anahtarı tasarımı, veritabanı seviyesinde tutarlılık, mesajlaşmada tekilleştirme, outbox ve değişiklik verisi yakalama ile mutabakat, test ve operasyon modüllerini içerir. Dağıtık Sistem Tasarım Desenleri eğitiminde ise dağıtık sistem temelleri, tutarlılık modelleri, replikasyon ve konsensüs, dayanıklılık desenleri ile mesajlaşma ve koordinasyon modülleri bulunur.
İlgili Mindset programı
Idempotency ve Dağıtık Tutarlılık Desenleri
Sık sorulan sorular
Saga ile veritabanı transaction'ı arasındaki temel fark nedir?
Veritabanı transaction'ı tek bir sistemde hepsi ya da hiçbiri garantisi verir ve izolasyon sağlar. Saga birden çok servise yayılır, her adım hemen kalıcı olur ve hata halinde telafi işlemleriyle geri dönülür. Bu nedenle süreç sırasında ara durumlar dışarıdan görülebilir.
Koreografi mi orkestrasyon mu seçilmeli?
Az sayıda servisin katıldığı, basit akışlarda koreografi hafif ve esnektir. Akış karmaşıklaştıkça, adımlar arasında koşullar ve zaman aşımları arttıkça orkestrasyon izlenebilirlik ve yönetim kolaylığı sağlar. Birçok ekip küçük başlayıp ihtiyaç doğdukça orkestrasyona geçer.
Telafi işlemi başarısız olursa ne olur?
Telafi adımı tekrar denenebilir ve idempotent tasarlanmalıdır. Tekrar denemeler tükenirse süreç manuel müdahale için bir hata kuyruğuna alınır ve operasyon ekibi uyarılır. Bu yüzden saga durumlarının kalıcı kaydı ve izlenmesi, tasarımın zorunlu parçasıdır.
Her mikroservis projesinde saga gerekli mi?
Hayır. Yalnızca birden fazla servisin verisini tutarlı biçimde değiştirmesi gereken iş akışlarında gereklidir. Servis sınırları iyi çizilmişse çoğu işlem tek serviste kalır. Gereksiz saga, sistemin karmaşıklığını artırır; önce sınırları gözden geçirmek çoğu zaman daha sağlıklıdır.
İlgili rehberler
İlgili eğitimler
Kategori: Yazılım Geliştirme