SAGA

KATEGORİ

SAGA, microservice mimarisinde kullanılan ve birden çok microservice arasındaki dağıtık transactionları yönetmek için kullanılan bir tasarım kalıbıdır. 1987 yılında Princeton Üniversitesi Bilgisayar Bilimleri departmanında yazılan bir makale ile duyurulmuştur.

Transaction’ın her adımı, bir hata oluşması durumunda geri alınabilecek ayrı ayrı eylemler olarak uygulanır.

Bir uygulamada sipariş, envanter takibi, satış ve kargo alanlarının olduğunu düşünelim. Kargo kısmında meydana gelen istenmeyen bir durum karşısında bütün transaction’ın geri alınması saga’nın ana hedefidir. Transaction’ın belli kısımları için roll back yapılabilmesi için gerekli konfigürasyon yapılabilir ancak ana amacın tüm transaction’ın geri alınması olduğu bilinmelidir.

İki yaklaşım var: choreography ve orchestration. Choreography’de bir süreç başladığında her bir mikroservis birbiriyle event-based bir yaklaşımla haberleşir. Bir servis bir event oluşturur, diğer servis bu event’i dinler ve başka bir servis için bir event oluşturur. Döngü bu şekilde devam eder. Orchestration ise event-based yaklaşımdan ziyade request-response modeli kullanır. Merkezi bir controller vardır. Süreç bu controller üzerinden ilerler. Merkezi controller diğer servislere request gönderir ve gelen response’a göre transaction devam eder. Başka servislerle aynı mantıkla iletişim kurulur. Burada orchestration’da event-based yaklaşım kullanılamaz diye bir durum yok. Merkezi controller (bu da servislerden biri) başka bir servisten gelen event’i dinleyebilir ve ona göre transaction’ın bir sonraki adımını işletebilir. Yine merkezi controller diğer servislere transaction’ın son durumu hakkında bilgilendirme eventleri de gönderebilir.