Microservice Mimarilerde Saga Pattern

Emeltemakcay
riseconsulting
Published in
16 min readAug 28, 2023

By Onur Dikmen, İlker Işık

Merhabalar

Bu makalemizde mikroservis (microservice) mimarisinden bahsedeceğiz, mikroservis mimarisinden önce daha önceki mimariler hakkında bilgi sahibi olmayanlar için linkteki yazıyı okumanızı öneririz. Mimarilerin yıllara göre değişimimi alttaki görselde görebilirsiniz.

Neden mikroservis gibi bir mimariye ihtiyaç duyuldu diğer mimariler neyi karşılamıyordu gibi bir sürü soru aklınıza gelebilir. Bu makalede mikroservis ne zaman kullanmamız gerekiyor maliyeti avantajları gibi konulara değineceğiz.

Aşağıda önceden kabul görmüş hala belki bu mimari ile kod geliştiriyoruz. Mikroservis e-ticaretin yaygınlaşması ile zaten hayatımıza girdi.

Monolit Mimari:

Monolit mimari, bir yazılım uygulamasının tüm bileşenlerinin tek bir yapı içinde düzenlendiği bir yaklaşımdır. Bu yapı içerisinde veritabanı işlemleri, sunucu taraflı kod, kullanıcı arayüzü gibi farklı görevleri yerine getiren bileşenler bir arada bulunur. Genellikle tüm kod tabanı tek bir programlama dilinde yazılır ve tek bir sunucu üzerinde çalıştırılır. Monolit mimaride, uygulamanın ölçeklendirilmesi veya bakımı genellikle zor olabilir.

Mikroservis (Microservice) Mimari:

Mikroservis mimarisi ise, bir uygulamanın farklı işlevlerini bağımsız hizmetlere (servislere) böldüğü bir yaklaşımdır. Her bir hizmet, belirli bir işlevi yerine getirir ve kendi veritabanına sahip olabilir. Bu hizmetler, genellikle farklı programlama dilleri veya teknolojiler kullanılarak geliştirilir ve ayrı sunucularda veya konteynerlerde çalıştırılabilir. Bu sayede her hizmet, bağımsız olarak ölçeklendirilebilir ve güncellenebilir. Mikroservis mimarisi, büyük ve karmaşık uygulamaların daha modüler ve esnek bir şekilde geliştirilmesine olanak tanır.

Özetlemek gerekirse, monolit mimaride tüm bileşenler tek bir yapı içinde bulunurken, mikroservis mimaride farklı işlevleri yerine getiren bağımsız hizmetler kullanılır. Mikroservis yaklaşımı, ölçeklenebilirlik, bakım kolaylığı ve teknoloji çeşitliliği gibi avantajlar sunarken, monolit yaklaşımı daha basit bir yapıya sahip olabilir. Hangi mimarinin tercih edileceği, projenin gereksinimlerine ve ölçeğine bağlı olarak değişebilir.

1. Saga Pattern Nedir?

Saga pattern kısaca, farklı ve bağımsız servisler üzerinde birden fazla transaction’ın sistematik bir şekilde işlenerek veri tutarlılığının sağlanmasını ifade eden ve ilk olarak 1987 yılında akademik bir makalede (bknz: SAGAS) yer edinen bir design pattern’dır. Saga, bir işlemin birden fazla adım veya aşamadan oluştuğu senaryolarda iş akışını daha düzenli ve yönetilebilir hale getirir. İş akışını birden çok adımda bölerek her adımda farklı servis çağrıları ve işlemler gerçekleştirmenizi sağlar. Her adımın bir sonraki adımı tetiklemesi ve başarısızlık durumlarında geri alma veya telafi adımlarını yönetmesi amaçlanır. Saga pattern genelde e-ticaret için kullanılır, oluşan Transaction takibini en iyi yapan pattern’dır. Başka pattern mevcuttur ama Transaction takibi için önerilen bir mikroservis mimarisidir. Saga, microservice’ler arasında doğru transaction yönetimi ve veri tutarlılığı sağlayan bir design pattern’dır.

1.1. Saga pattern’in kullanım durumları şunlar olabilir:

Sipariş Yönetimi:

Örneğin, bir e-ticaret platformunda kullanıcı bir ürün siparişi verdiğinde, siparişi işleme alma, envanter kontrolü, ödeme işlemi ve teslimat gibi adımlar farklı mikro hizmetlerde gerçekleştirilir. Her adım başarılı bir şekilde tamamlanmalıdır. Eğer bir adımda hata oluşursa, siparişin tamamının geri alınması veya düzeltilmesi gerekebilir.

Bilet Rezervasyonu:

Seyahat veya etkinlik rezervasyonlarında, farklı bileşenlerin (uçuş, otel, etkinlik vb.) koordinasyonu gerekebilir. Her bir bileşenin rezervasyonu doğru şekilde gerçekleştirmesi ve herhangi bir hata durumunda düzeltilmesi gerekebilir.

Finansal İşlemler:

Birden çok hesap arasında para transferleri gibi karmaşık finansal işlemler, adımların koordinasyonunu ve hataların yönetimini gerektirir.

Ürün Yayını:

Bir ürünün veya içeriğin farklı platformlarda (web sitesi, mobil uygulama, sosyal medya) yayınlanması için gereken adımlar, saga pattern ile koordine edilebilir.

1.1. İş süreçlerinin yönetimindeki önemi nedir?

Saga deseni, dağıtık sistemlerde ve mikro hizmet mimarilerinde iş süreçlerinin yönetimi için kullanılan bir tasarım desenidir. Bu desen, özellikle birbiriyle ilişkili ve ardışık adımlardan oluşan iş süreçlerini yönetmek için kullanılır. Saga deseninin iş süreçlerinin yönetimindeki önemi şunlardır:

1.2.1. Bölünmüş ve Bağımsız İşlemler:

Saga deseni, iş süreçlerini bağımsız adımlara böler. Bu adımlar, farklı mikro hizmetler veya bileşenler tarafından gerçekleştirilir. Bu sayede her adımın işlevsel olarak bağımsız olması sağlanır, böylece hata durumlarında veya kesintilerde diğer adımlar etkilenmez.

1.2.2. Hata Toleransı:

İş süreçlerinin herhangi bir aşamasında hata oluşabilir. Saga deseni, bu hata durumlarına karşı dirençlidir. Eğer bir adımda hata meydana gelirse, geri alma veya düzeltme adımları devreye girerek sistem sağlıklı bir duruma getirilir.

1.2.3. İşlem Tamamlama Garantisi:

Saga deseni, iş süreçlerinin tamamlanmasını garanti eder. Adımların her biri, işlem tamamlandığında onaylamayı alır ve işlem zinciri başarılı bir şekilde sonuçlanana kadar ilerler.

1.2.4 Durum Yönetimi:

Saga deseni, iş süreçlerinin ilerlemesini ve durumunu izlemenizi sağlar. Her adımın durumu saklanır ve gerektiğinde işlemi geri almak veya devam ettirmek için kullanılır.

1.2.5 Uzlaşma ve Uyum Sağlama:

İş süreçlerinde birden fazla adım olduğunda, bu adımların birbirleriyle uyumlu ve tutarlı bir şekilde çalışması gerekebilir. Saga deseni, uzlaşma ve uyum sağlama mekanizmaları sunarak, adımlar arasında koordinasyonu ve tutarlılığı sağlar.

1.2.6 Paralel İşlemler:

Saga deseni, bazı adımların eşzamanlı olarak gerçekleştirilmesini destekler. Bu sayede iş süreçleri daha verimli hale gelir.

1.2.7 Gerçek Zamanlı Geri Bildirim:

Her adımın tamamlanmasıyla birlikte geri bildirim sağlanır. Bu, iş süreçlerinin gerçek zamanlı olarak izlenmesini ve yönetilmesini sağlar.

2. Saga Deseninin Temel Öğeleri:

2.1. İşlem Adımları (Steps):

İş sürecini oluşturan adımlardır. Her adım, genellikle bir mikro hizmet veya bileşen tarafından gerçekleştirilir. Adımlar, iş sürecinin mantıksal bölümlerini temsil eder.

2.1.1. Compensating Actions (Geriyükleme İşlemleri):

Her işlem adımının bir geri yükleme işlemi vardır. Eğer bir adımda hata oluşursa veya işlem başarısız olursa, geri yükleme işlemi devreye girer ve önceki adımları geri alır veya düzeltir. Bu, sistemde tutarlılığı sağlamak için önemlidir.

2.1.2. SAGA Coordinator (Saga Koordinatörü):

İşlem adımlarını koordine eden ve izleyen bir bileşendir. Bu bileşen, iş sürecinin ilerlemesini takip eder, hata durumlarına müdahale eder ve geri yükleme işlemlerini başlatır.

2.1.3. DURUM Saklama (State Storage):

İşlem adımlarının durumunun saklandığı bir veri deposudur. Bu depo, işlem ilerlemesini takip etmek ve gerektiğinde geri yükleme işlemlerini tetiklemek için kullanılır.

2.2. İletişim Mekanizmaları:

Mikro hizmetler veya bileşenler arasında iletişim kurmak için kullanılan mekanizmalardır. Bu iletişim, adımlar arasındaki koordinasyonu ve veri paylaşımını sağlar.

Saga deseninin çalışma mantığı genellikle şu şekildedir:

İşlem başlatıldığında, Saga Koordinatörü ilgili adımları sırayla başlatır.

Her adım, başarılı bir şekilde tamamlandığında, durum depolama mekanizması tarafından durum güncellenir.

Eğer bir adımda hata oluşursa, Saga Koordinatörü geriyükleme işlemini başlatır. Bu geriyükleme işlemi, önceki adımları geri alarak sistem durumunu düzeltebilir.

İşlem tamamlandığında veya bir hata durumu ele alındığında, durum depolama güncellenir ve süreç sona erer.

2.2.1. Compensating Transaction (Telafi İşlem) nedir?

Compensating Transaction, yaygın olarak “telafi işlemi” olarak adlandırılır ve Saga deseni içinde önemli bir rol oynar. Bu işlem, bir işlem adımında meydana gelen bir hatanın veya başarısızlığın ardından, sistemdeki tutarlılığı sağlamak için gerçekleştirilen bir düzeltme veya geri alma işlemidir.

Compensating Transaction, aslında işlemi geriye doğru adımlarla geri almak yerine, hata durumuna özgü olarak tasarlanmış olan ve önceki adımlardan kaynaklanan etkileri düzelten bir işlemi ifade eder. Yani bir hata durumu meydana geldiğinde, sistemin eski haline dönmek yerine, hatanın etkilerini düzelten adımlar gerçekleştirilir.

Örnek olarak, bir e-ticaret uygulamasını düşünelim.

Bir kullanıcı bir ürünü sepete eklediğinde, ödeme yapma adımına geçer. Eğer ödeme adımında bir hata oluşursa (örneğin, kredi kartı reddedildi), bu durumda bir telafi işlemi başlatılır. Telafi işlemi, önceki adımlarda yapılan envanter güncellemesini geri alabilir veya sepeti düzeltebilir.

Saga deseninde telafi işlemi, iş süreçlerinin tutarlı bir şekilde yönetilmesini sağlayarak hata durumlarının etkilerini en aza indirir. Bu sayede iş süreçlerinin hata toleransı artar ve sistemin daha güvenilir çalışması sağlanır. Telafi işlemleri, her adımın geri dönüşümlü ve sistemdeki verilerin bütünlüğünü koruyacak şekilde tasarlanmasıyla uyumlu bir şekilde çalışır.

2.3. Saga Orchestrator (Saga Orkestratör) nasıl çalışır?

Saga Orkestratörü, Saga deseni içindeki işlem adımlarını koordine eden ve izleyen bir bileşendir. İş sürecinin ilerlemesini takip eder, adımların sırasını belirler, hata durumlarına müdahale eder ve gerektiğinde geri yükleme işlemlerini başlatır. İşte Saga Orkestratörünün genel çalışma mantığı:

2.3.1. İşlem Başlatma:

İşlem, genellikle kullanıcının talebi veya otomatik bir olay tetiklemesiyle başlar. Orkestratör, işlemi başlatan taraf olabilir veya başlatıcı tarafından tetiklenebilir.

2.3.2. Adım Başlatma:

Orkestratör, işlem adımlarını sırayla başlatır. Her adım bir mikro hizmet veya bileşen tarafından gerçekleştirilir. Orkestratör, adımlar arasındaki sırayı ve ilişkileri belirler.

2.3.3. Adım İlerlemesini Takip Etme:

Her adım, tamamlandığında Orkestratör’e geri bildirim sağlar. Bu sayede Orkestratör, işlem ilerlemesini izleyebilir ve her adımın durumunu güncelleyebilir.

2.3.4. Hata Durumlarını İzleme:

Eğer bir adımda hata meydana gelirse, Orkestratör bu hatayı tespit eder. Hata durumlarına müdahale etmek ve sistemdeki tutarlılığı sağlamak için özel bir işlem başlatır.

2.3.5. Telafi İşlemlerini Başlatma:

Hata durumlarıyla başa çıkmak için Orkestratör, telafi işlemlerini başlatır. Telafi işlemleri, önceki adımlardan kaynaklanan hataları düzeltmek veya geri almak amacıyla tasarlanmıştır.

2.3.6. Adımları İleri veya Geri Alma:

Eğer hata durumu ele alınamazsa veya telafi işlemi başarılı olmazsa, Orkestratör işlem adımlarını geri alabilir. Bu, sistemi başlangıç durumuna getirir ve işlemi tekrar başlatabilir.

2.3.7. İşlem Tamamlama:

İşlem başarıyla tamamlandığında, Orkestratör bu durumu kaydedebilir ve gerektiğinde işlem geçmişini inceleyebilir.

Saga Orkestratörü, iş süreçlerinin yönetimini merkezi bir noktadan sağlar ve iş sürecinin durumunu izlemek ve gerektiğinde müdahale etmek için kullanılır. Orkestratör, hata toleransı, işlem güvenilirliği ve sistemdeki tutarlılığın sağlanması gibi avantajlar sunar.

2.4. İş Akışlarını Yönetmek İçin Durum Saklama (State Persistence) nasıl kullanılır?

İş akışlarını yönetmek için durum saklama (state persistence), işlem adımlarının ilerlemesini ve durumunu izlemek, gerektiğinde geri yükleme işlemlerini tetiklemek ve iş akışlarını yönetmek için kullanılan bir mekanizmadır. Bu mekanizma, dağıtık sistemlerde veya mikro hizmet mimarilerinde iş akışlarının tutarlı bir şekilde yönetilmesini sağlar. İşte durum saklamanın kullanımı ve önemi hakkında daha fazla bilgi:

2.4.1. Durum Takibi:

Her işlem adımı, ilerlemesini takip etmek ve durumunu saklamak için durum saklama mekanizmasını kullanır. Bu sayede iş akışının nerede olduğu, hangi adımın tamamlandığı ve hangi adımın beklediği gibi bilgiler sürekli olarak güncellenir.

2.4.2. Hata Yönetimi:

Eğer bir adımda hata oluşursa veya işlem başarısız olursa, durum saklama mekanizması bu durumu kaydeder. Bu, hata durumuna müdahale etmek ve gerektiğinde telafi işlemlerini veya geri alma işlemlerini başlatmak için kullanılır.

2.4.3. Geriyükleme İşlemleri:

Durum saklama, geriyükleme işlemlerini yönetmek için gereklidir. Eğer bir adımda hata oluşursa, durum saklama mekanizması telafi işleminin ne yapılması gerektiğini belirler. Bu, iş akışının tutarlılığını ve sistemdeki veri bütünlüğünü korumaya yardımcı olur.

2.4.4. Paralel İşlemler:

Durum saklama, paralel işlemleri yönetmek için kullanılabilir. Birden fazla işlem aynı anda yürütülüyorsa, her bir işlem adımının durumu bağımsız olarak saklanır ve yönetilir.

2.4.5. İşlem Geçmişi:

Durum saklama mekanizması, iş akışının geçmişini kaydetme yeteneği sunar. Bu sayede işlem tamamlandığında veya bir hata durumu ele alındığında, işlem geçmişi incelenebilir ve analiz edilebilir.

2.4.6. Esneklik ve Tutarlılık:

Durum saklama, iş akışlarını daha esnek ve hata toleranslı hale getirir. Adımlar arasındaki iletişimi ve koordinasyonu sağlamak için kullanılırken, aynı zamanda sistemde tutarlılığın korunmasını sağlar.

Durum saklama genellikle veritabanları, hafıza tabanlı çözümler veya dış kaynaklar gibi farklı mekanizmalarla sağlanabilir. İş akışlarını yönetirken durum saklamayı kullanmak, dağıtık sistemlerde güvenilir iş akışlarının yönetimi için önemlidir.

3. Azure Microservices’de Saga Pattern

Azure Microservices’de Saga Pattern kullanımı, işlemlerin tutarlılığını korumak ve hata durumlarında geri dönüş yapabilmek için önemlidir. Azure Functions, Azure Service Bus veya Durable Functions gibi Azure bileşenleri, Saga Pattern’ın uygulanmasında yardımcı olabilir. Ayrıca, Azure Kubernetes Service (AKS) gibi yönetilen Kubernetes hizmetleri de mikro hizmetlerin dağıtılmasını ve yönetimini kolaylaştırabilir.

Azure Microservices mimarisinde Saga Pattern, dağıtılmış bir sistemde işlemleri yönetmek için kullanılan bir tasarım modelidir. Genellikle bir işlem, birden fazla adımdan oluşur ve bu adımların her biri kendi bağımsız servislerde gerçekleştirilir. Bu durumda, tüm adımların başarıyla tamamlanması gereken işlemler söz konusu olduğunda, herhangi bir adımda bir hata oluşması durumunda işlemin tutarlılığını sağlamak önemlidir. İşte burada Saga Pattern devreye girer.

Saga Pattern, bir işlemi küçük adımlara böler ve her adımı bir “Saga” olarak adlandırılan bir dizi ilişkili adımda gerçekleştirir. Her bir Saga adımı, bir servis tarafından gerçekleştirilir ve her adım sonucu bir durum güncellemesi yapar. Eğer bir adımda hata oluşursa, Saga Pattern, hatanın düzeltilmesi veya geri alınması için uygun bir mekanizma sağlar. Bu sayede işlem hatasız bir şekilde tamamlanana kadar adımlar geri alınabilir veya yeniden çalıştırılabilir.

Azure Microservices’de Saga Pattern kullanımı, işlemlerin tutarlılığını korumak ve hata durumlarında geri dönüş yapabilmek için önemlidir. Azure Functions, Azure Service Bus veya Durable Functions gibi Azure bileşenleri, Saga Pattern’ın uygulanmasında yardımcı olabilir. Ayrıca, Azure Kubernetes Service (AKS) gibi yönetilen Kubernetes hizmetleri de mikro hizmetlerin dağıtılmasını ve yönetimini kolaylaştırabilir.

3.1. Azure Functions nedir ve nasıl çalışır?

Azure Functions, Microsoft’un Azure bulut platformunda sunulan bir “serverless” (sunucusuz) hesaplama hizmetidir. Bu hizmet, geliştiricilere uygulama mantığını yazmalarını ve dağıtmalarını sağlayan, olay tetiklemeli ve ölçeklendirilebilir bir yapı sunar. Azure Functions, Saga deseni gibi iş akışlarını yönetmek için de kullanılabilecek bir servistir.

Peki Azure Functions nasıl çalışır?

3.1.1. Olay Tetikleme:

Azure Functions, belirli olaylar gerçekleştiğinde tetiklenebilir. Örneğin, bir HTTP isteği, bir veritabanı güncellemesi, bir dosya depolama hesabına yükleme gibi olaylar tetikleyici olarak kullanılabilir.

3.1.2. Kod Yazma:

Geliştirici, Azure Functions’a tetikleyici olayı gerçekleştiğinde çalıştırılacak kodu yazar. Bu kod, belirli bir işlemi gerçekleştiren iş mantığını içerebilir. Saga desenini uygulamak istediğinizde, bu kod adımları ve bu adımları koordine eden orkestrasyon mantığını içerebilir.

3.1.3. Ölçeklendirme:

Azure Functions, olay tetiklendiğinde gerektiğinde otomatik olarak ölçeklenir. Bu, yüksek trafik veya yoğun iş yükü durumlarında uygulamanın hızlı ve güvenilir bir şekilde yanıt vermesini sağlar.

3.1.4. State Management (Durum Yönetimi):

Azure Functions, geçici durumu tutmaktan ziyade “stateless” (durumsuz) olarak çalışır. Yani iş akışının durumunu doğrudan kendisi saklamaz. Bu nedenle, iş akışını yönetmek için dışarıdan bir veri deposu veya durum saklama mekanizması kullanmanız gerekebilir.

3.1.5. Birleştirilmiş Servisler:

Azure Functions, diğer Azure hizmetleri ve üçüncü taraf servislerle kolayca entegre edilebilir. Bu, iş akışlarını daha geniş bir ekosistem içinde yönetmenize olanak tanır.

Saga desenini Azure Functions kullanarak uygulamak istediğinizde, her bir adımı bir Azure Function olarak uygulayabilirsiniz. Bu adımların ilerlemesini izlemek, durumu saklamak ve gerektiğinde telafi işlemlerini veya geri alma işlemlerini başlatmak için Azure Functions’ın dışında bir veri deposu veya durum saklama mekanizması kullanmanız gerekecektir. Bu sayede dağıtık iş akışlarınızı koordine edebilir ve hata durumlarını ele alabilirsiniz.

3.2 Azure Durable Functions ile Saga deseni nasıl uygulanır?

Azure Durable Functions, iş akışlarını yönetmek, durum izlemek ve koordine etmek için kullanılan bir Azure Functions uzantısıdır. Durable Functions, özellikle Saga deseni gibi karmaşık iş akışlarını uygulamak için çok kullanışlı bir araçtır. İşte Azure Durable Functions kullanarak Saga desenini uygulamanın temel adımları:

3.2.1. Durable Orchestrator Function Oluşturma:

İlk adım, iş akışını koordine edecek bir Durable Orchestrator Function oluşturmaktır. Bu fonksiyon, iş akışının ana mantığını içerir ve adımları sırayla başlatır, durumu izler ve gerektiğinde telafi işlemlerini veya geri alma işlemlerini başlatır.

3.2.2. İşlem Adımlarını Uygulama:

Her bir işlem adımını bir Durable Activity Function olarak uygulayın. Her adım, iş akışını ilerletmek veya geri almak için kullanılan bir activity (işlem) olarak kabul edilir. Bu activity fonksiyonlarının her biri, belirli bir görevi gerçekleştirir (örneğin, envanter güncellemesi, ödeme işlemi, e-posta gönderme vb.).

3.2.3. Durum Saklama ve İletişim:

Durable Orchestrator Function, iş akışının durumunu saklamak ve adımlar arasındaki iletişimi sağlamak için kullanılır. Adımların durumu ve ilerlemesi saklanır ve gerektiğinde telafi işlemleri başlatmak için kullanılır.

3.2.4. Hata Yönetimi ve Telafi İşlemleri:

Eğer bir adımda hata oluşursa, Durable Orchestrator Function bu hatayı tespit eder. Hata durumuna müdahale etmek ve gerektiğinde telafi işlemlerini başlatmak için özel bir işlem başlatır.

3.2.5. Geri Alma İşlemleri:

Eğer işlem akışında bir hata durumu ele alınamazsa, Durable Orchestrator Function işlem adımlarını geri alabilir. Bu, sistemi başlangıç durumuna getirir ve işlemi tekrar başlatır.

3.2.6. İşlem Tamamlama:

İşlem başarıyla tamamlandığında, Durable Orchestrator Function bu durumu kaydedebilir ve gerektiğinde işlem geçmişini inceleyebilir.

Azure Durable Functions, iş akışlarını yönetmek ve Saga deseni gibi karmaşık iş akışlarını uygulamak için birçok özellik sunar. Bu özellikler arasında süreç izleme, otomatik ölçeklendirme, hata yönetimi ve durum yönetimi yer alır. Bu sayede daha güvenilir, esnek ve hata toleranslı iş akışları oluşturabilirsiniz.

3.3 Event Grid veya Service Bus gibi Azure servisleri, Saga deseni için nasıl entegre edilir?

Azure Event Grid ve Azure Service Bus gibi servisler, Saga deseni için olay tabanlı iletişimi ve mesajlaşmayı sağlayan araçlardır. Bu servislerin kullanımı, iş akışlarını koordine etmek ve Saga desenini uygulamak için oldukça önemlidir.

İşte bu servislerin Saga deseni ile nasıl entegre edilebileceğine dair genel bir bakış:

3.3.1. Event Grid Entegrasyonu:

Azure Event Grid, olay tabanlı iletişimi sağlar. Bu, sistemde meydana gelen olayları algılayıp işleyerek iş akışlarını koordine etmek için kullanılabilir.

3.3.2. Olay Tanımlama:

İlk adım, iş akışını tetikleyen veya izleyen olayları tanımlamaktır. Örneğin, “Sipariş Alındı”, “Ödeme Onaylandı”, “Envanter Güncellendi” gibi olaylar tanımlanabilir.

3.3.3. Olay Üretimi:

Her bir adımda gerçekleşen olayları uygun bir şekilde üretin. Örneğin, sipariş alındığında “Sipariş Alındı” olayını üretebilirsiniz.

3.3.4. Olay Abonelikleri:

Durable Functions veya Orchestrator Function gibi bir bileşen, bu olayları dinlemek üzere Event Grid’e abone olabilir. Olaylar bu bileşenin çalışmasını tetikleyecektir.

3.3.5. Service Bus Entegrasyonu:

Azure Service Bus, güvenilir mesajlaşma sağlar ve iş akışlarını daha karmaşık senaryolarda koordine etmek için kullanılabilir.

3.3.6. Kuyruk ve Konular:

Service Bus, kuyruklar ve konular aracılığıyla mesaj iletişimini destekler. Kuyruklar, mesajların tek bir alıcı tarafından işlenmesi için kullanılırken, konular birden çok alıcının dinlemesini sağlar.

3.3.7. İşlem Adımları ve Mesajlaşma:

Her bir işlem adımını bir mesajla ilişkilendirebilirsiniz. Örneğin, “Sipariş Alındı” adımı için bir kuyruk oluşturabilirsiniz. Ardından, bu adım başarılı bir şekilde tamamlandığında bir sonraki adım olan “Ödeme Onaylandı” için bir mesaj üretebilirsiniz.

3.3.8. Mesaj Tüketimi:

Orchestrator Function veya Durable Function, Service Bus kuyruklarını veya konularını dinleyerek mesajları alabilir. Bu mesajlar, işlem adımlarını ilerletmek veya gerektiğinde geri almak için kullanılabilir.

Bu servislerin kullanımı, iş akışlarını olaylar ve mesajlar aracılığıyla koordine etmek için önemlidir. Event Grid veya Service Bus gibi araçları kullanarak, Saga deseninin gerektirdiği koordinasyonu ve iletişimi sağlayabilir, hata durumlarını ele alabilir ve iş akışlarınızı daha esnek ve hata toleranslı hale getirebilirsiniz.

4. Bir e-ticaret uygulamasında sipariş işleme işlemi nasıl saga deseniyle yönetilebilir?

Bir e-ticaret uygulamasında sipariş işleme sürecini Saga deseniyle yönetmek için aşağıdaki adımları takip edebilirsiniz:

4.1. Sipariş Oluşturma ve Envanter Kontrolü:

- Sipariş oluşturulduğunda, Durable Orchestrator Function tetiklenir.

- Orchestrator, ilk adım olarak envanter kontrolü yapar. Eğer ürün stokta yoksa, telafi işlemi başlatır veya müşteriyi bilgilendirir.

4.2 Ödeme İşlemi:

- Eğer envanter kontrolü başarılıysa, Orchestrator ödeme işlemine geçer.

- Ödeme yapıldığında, “Ödeme Onaylandı” adımı gerçekleşir ve durumu güncellenir.

4.3 Sipariş İşleme ve Kargolama:

- Ödeme onaylandığında, Orchestrator siparişi işlemeye alır ve kargolama adımına geçer.

- Eğer kargolama başarısız olursa, geriyükleme işlemi başlatılır ve önceki adımlar geri alınır.

4.4 Teslimat ve Onaylama:

- Kargolama başarılıysa, ürün müşteriye teslim edilir.

- Müşteri ürünü aldığında, teslimat onayı alınır ve işlem tamamlanır.

4.5 Hata Durumları Ele Alma:

- Herhangi bir adımda hata meydana gelirse, Orchestrator bu hatayı tespit eder.

- Hata durumlarına müdahale etmek ve gerektiğinde telafi işlemlerini başlatmak için özel bir işlem başlatır.

4.6 Geri Alma İşlemleri:

- Eğer işlem akışında bir hata durumu ele alınamazsa, Orchestrator işlem adımlarını geri alabilir.

- Bu, sipariş işlemini başlangıç durumuna getirir ve işlemi tekrar başlatabilir.

- Bu adımlar, bir e-ticaret uygulamasındaki sipariş işleme sürecini Saga deseniyle yönetmek için kullanılabilecek bir örnek sunmaktadır. Azure Durable Functions, Event Grid veya Service Bus gibi Azure servisleri kullanarak bu işlem akışını daha iyi koordine edebilirsiniz. Bu şekilde, hata durumlarını ele alabilir, iş sürecini izleyebilir ve iş akışlarınızı daha esnek ve güvenilir hale getirebilirsiniz.

4. Faydalar ve Dikkat Edilmesi Gereken Noktalar:

Saga desenini kullanmanın faydaları ve dikkat edilmesi gereken noktalar aşağıda özetlenmiştir:

5.1. Faydalar:

5.1.1. Esneklik:

Saga deseni, dağıtık sistemlerde ve mikro hizmet mimarilerinde iş akışlarını esnek bir şekilde yönetmenizi sağlar. Adımların bağımsız olması, her adımın ayrı ayrı ölçeklenebilir olmasını sağlar.

5.1.2. Hata Toleransı:

Her adımın geri alınabilir ve telafi edilebilir olması, hata durumlarına karşı dirençli bir sistem sağlar. Bir adımda hata meydana geldiğinde, sadece etkilenen adım geri alınır ve diğer adımlar etkilenmez.

5.1.3. Tutarlılık:

Saga deseni, iş akışlarının tutarlı bir şekilde yönetilmesini sağlar. Adımlar arasındaki koordinasyonu ve veri tutarlılığını koruyarak sistemin bütünlüğünü sağlar.

5.1.4. İzlenebilirlik:

Her adımın durumu ve ilerlemesi izlenebilir. Bu sayede iş akışlarınızı izlemek ve gerektiğinde müdahale etmek daha kolay olur.

5.1.5 İleri ve Geri Alma:

Saga deseni, iş akışlarını ileri ve geri almayı destekler. Bu sayede hata durumları ele alındığında veya işlem iptal edildiğinde sistem geçmiş bir duruma getirilebilir.

5.2 Dikkat Edilmesi Gereken Noktalar:

5.2.1 Koordinasyon Karmaşıklığı:

Saga deseni karmaşık iş akışları için tasarlandığından, koordinasyonun yönetimi bazen zor olabilir. Doğru orkestrasyon mantığını tasarlamak ve test etmek önemlidir.

5.2.2 Durum Yönetimi:

İş akışlarının durumu saklanmalıdır. Bu durum saklama mekanizmasının güvenilir ve ölçeklenebilir olması gerekmektedir.

5.2.3 Hata Durumları:

Hata durumlarına karşı nasıl tepki vereceğiniz ve telafi işlemlerini nasıl yöneteceğiniz önemlidir. Her adımda olası hataları dikkate alarak planlama yapmalısınız.

5.2.4 Performans ve Ölçeklenebilirlik:

İş akışları büyüdükçe, ölçeklenebilirlik ve performans konularına dikkat etmelisiniz. Adımların gereksiz yere yavaşlamadan veya yığılmadan ölçeklenebilir olması önemlidir.

5.2.5 İletişim ve Senkronizasyon:

Adımlar arasındaki iletişim ve senkronizasyon yönetimi önemlidir. Farklı mikro hizmetler veya bileşenler arasındaki iletişimin hatasız ve güvenli olmasını sağlamalısınız.

5.2.6 Karmaşıklık Yönetimi:

Saga deseni, bazı senaryolarda gereğinden fazla karmaşıklık yaratabilir. İş akışınızın gereksinimlerine uygun düzeyde kullanmanız ve gereksiz karmaşıklıktan kaçınmanız önemlidir.

Sonuç olarak, Saga deseni karmaşık iş akışlarını yönetmek ve hata durumlarını ele almak için güçlü bir araçtır. Ancak doğru tasarım, iyi orkestrasyon ve iyi durum yönetimi gerektirir. Bu deseni kullanırken avantajlarından yararlanmak ve dikkat edilmesi gereken noktaları göz önünde bulundurmak önemlidir.

5. Saga deseninin avantajları nelerdir?

Saga deseninin birçok avantajı bulunmaktadır:

5.1. Esneklik (Flexibility):

Saga deseni, dağıtık sistemlerde iş süreçlerini esnek bir şekilde yönetmenizi sağlar. Her adımın ayrı bir bileşen veya mikro hizmet tarafından gerçekleştirilmesi, iş süreçlerinin daha modüler ve ölçeklenebilir olmasını sağlar.

5.2. Hata Toleransı (Fault Tolerance):

Her adımın geri alınabilir ve telafi edilebilir olması, hata durumlarına karşı dirençli bir sistem sağlar. Bir adımda hata meydana geldiğinde, sadece etkilenen adım geri alınır ve diğer adımlar etkilenmez

5.3. Tutarlılık (Consistency):

Saga deseni, iş akışlarının tutarlı bir şekilde yönetilmesini sağlar. Adımlar arasındaki koordinasyonu ve veri tutarlılığını koruyarak sistemin bütünlüğünü sağlar.

5.4. İzlenebilirlik (Traceability):

Her adımın durumu ve ilerlemesi izlenebilir. Bu sayede iş akışlarınızı izlemek ve gerektiğinde müdahale etmek daha kolay olur.

İleri ve Geri Alma (Forward and Backward Recovery):

Saga deseni, iş akışlarını ileri ve geri almayı destekler. Bu sayede hata durumları ele alındığında veya işlem iptal edildiğinde sistem geçmiş bir duruma getirilebilir.

5.5. Paralel İşlemler (Parallel Processing):

Saga deseni, iş akışınızı paralel işlemlere ayırmanıza olanak tanır. Bu, iş süreçlerinin daha hızlı tamamlanmasını sağlar.

5.6. Karmaşıklık Azaltma (Reduced Complexity):

Dağıtık sistemlerde iş akışlarını yönetmek karmaşık olabilir. Saga deseni, bu karmaşıklığı adımlara bölerek daha yönetilebilir hale getirir.

5.7. İyi Uygulama Tasarımı (Good Application Design):

Saga deseni, iş süreçlerinin daha iyi bir şekilde tasarlanmasını teşvik eder. Her adımın kendi sorumluluğu olduğu için, kodunuz daha düzenli ve modüler olabilir.

5.8. Hizmet Bağımsızlığı (Service Independence):

Her bir adım kendi hizmetinde gerçekleştirildiğinden, bu adımlar farklı hizmetler veya bileşenler tarafından sunulabilir. Bu, ekiple çalışırken veya hizmetleri yükseltirken avantaj sağlar.

5.9. Güvenilirlik ve İyileştirme (Reliability and Improvement):

Her adımın geri alınabilir ve telafi edilebilir olması, sistemin güvenilirliğini artırır. Ayrıca, iş süreçlerini zamanla iyileştirmek için geri alma ve düzeltme adımları eklemek daha kolaydır.

Bu avantajlar, Saga desenini dağıtık sistemlerde iş akışlarını yönetmek ve hata durumlarına karşı etkili bir şekilde ele almak için güçlü bir araç haline getirir.

6. Uygulama geliştirirken nelere dikkat etmek gerekir?

Uygulama geliştirirken Saga deseni kullanırken dikkat edilmesi gereken bazı önemli noktalar şunlardır:

6.1. İş Süreçlerinin Analizi:

İlk adım, iş süreçlerinizi ayrıntılı bir şekilde analiz etmektir. Hangi adımların olduğunu, adımlar arasındaki ilişkileri ve olası hata senaryolarını belirlemek önemlidir.

6.2. Doğru Orkestrasyon Mantığı:

Saga desenini uygularken orkestrasyon mantığını doğru şekilde tasarlamak kritiktir. Adımların sırasını, koordinasyonu ve iletişimi dikkatlice planlayarak kodun karmaşıklığını azaltmalısınız.

6.3. Durum Saklama Mekanizması:

İş akışlarının durumunu tutacak güvenilir bir mekanizma kullanmalısınız. Bu, iş akışınızın ilerlemesini izlemek, hata durumlarına müdahale etmek ve geri alma işlemleri yapmak için önemlidir.

6.4. Hata Durumlarını İşleme:

İş akışlarında hata durumlarını ele almak önemlidir. Her adımda olası hataları ve bu hatalara nasıl tepki vereceğinizi düşünmeli, telafi işlemlerini ve geri alma işlemlerini planlamalısınız.

6.5. Uygulama Güvenliği:

Saga deseni kullanırken güvenliği ihmal etmemelisiniz. Özellikle ödeme işlemleri gibi hassas verileri doğru şekilde korumalısınız.

6.6. İletişim ve Senkronizasyon:

Farklı adımlar arasındaki iletişimi ve senkronizasyonu dikkatlice yönetmelisiniz. Mesajlaşma servisleri veya olay tabanlı sistemler kullanarak adımlar arasındaki iletişimi sağlamalısınız.

6.7. Performans ve Ölçeklenebilirlik:

İş akışlarının performansını ve ölçeklenebilirliğini göz önünde bulundurmalısınız. İş akışlarınız büyüdükçe nasıl ölçekleyeceğinizi ve performansı nasıl optimize edeceğinizi planlamalısınız.

6.8. Test ve Doğrulama:

Her bir adımın ve işlem akışının doğru çalıştığından emin olmak için kapsamlı bir test süreci uygulamalısınız. Farklı senaryoları test ederek hata durumlarını ve başarı durumlarını kontrol etmelisiniz.

6.9. Dokümantasyon:

Saga deseni kullanırken iş akışlarınızın tasarımını, adımlarını, iletişim şemalarını ve hata senaryolarını iyi bir şekilde belgelemelisiniz. Bu, geliştirici ekibinizin ve gelecekteki bakım ekiplerinin iş akışını anlamasını kolaylaştırır.

6.10. İyileştirme ve Bakım:

İş akışlarınızı zaman içinde iyileştirmek ve güncellemek için sürekli bir bakım süreci uygulamalısınız. Gerektiğinde yeni adımlar eklemeli, hata durumlarına daha etkili çözümler üretmelisiniz.

Saga deseni kullanırken bu dikkat edilmesi gereken noktaları göz önünde bulundurarak, güvenilir, esnek ve hata toleranslı iş akışları oluşturabilirsiniz.

Bu yazı Rise Technology The Smurfs Teams tarafından hazırlanmıştır.

--

--