Orchestration vs Choreography: Asenkron İşlerde Hangi Yolu Seçmeliyiz
Microservisler mimarisinde asenkron iş akışlarını koordine etmenin iki temel yolu var: orchestration ve choreography. Hangisini seçeceğin, sistemin karmaşıklığı, hata toleransı ve bakım maliyetini doğrudan etkiliyor.
Orchestration'da merkezi bir servis (orchestrator) tüm adımları yönetir. Bir sipariş işleminde orchestrator, ödeme servisini çağırır, onun yanıtını bekler, sonra envanter servisine gider, ardından kargo servisine. Her adım açık, kontrol merkezde. Hata yönetimi basit: orchestrator bilir hangi adımda başarısız oldu, hangi kompenzasyon işlemi (undo) yapacak. Ama orchestrator tek bir başarısızlık noktası olur. Eğer çökmezse tüm akış durur.
Choreography'de servisler birbirlerine olay (event) yayınlar ve bu olaylara tepki verir. Ödeme servisi işlem tamamlandığında "ödeme_başarılı" olayı yayınlar. Envanter servisi bu olayı dinler ve stok azaltır, sonra "stok_azaltıldı" olayı yayınlar. Kargo servisi bunu dinler ve gönderiye başlar. Hiç merkezi kontrol yok. Servisler bağımsız, esnek.
Ancak choreography'nin karanlık tarafı vardır. Bir servis olayı dinlemeyi unutmuşsa? Veya olay sırasında başarısız olmuşsa? Hata akışı izlemek çok zor. Kompensasyon mantığı tüm servislere dağılır; "eğer stok azaltılamadıysa ödeme iptal et" kuralı nerede yazıyor? Birden fazla yerde. Sistem büyüdükçe spaghetti hale gelir.
Praktik tavsiye: başlangıçta orchestration seç. Akış basit, merkezi, test edilebilir. Orchestrator'u stateless tut ve event sourcing ile adımları kaydet; böylece arızadan sonra kaldığı yerden devam edebilir. Sistem gerçekten büyüyüp orchestrator'un bottleneck haline gelirse, o zaman belirli alt akışlara choreography uygulamayı düşün, tüm sistemi bir anda değiştirme.
Choreography "daha modern" veya "daha ölçeklenebilir" değildir; sadece farklıdır. Orchestration daha tahmin edilebilir, choreography daha esnek ama karmaşık. Çoğu başarılı sistem ikisini birlikte kullanır: kritik akışlarda orchestration, tamamlayıcı işlerde choreography. Mimari kararı iş gereksiniminin karmaşıklığına göre ver, trend değil.
1 yorum
orchestratorı merkezi denetim noktası yapınca sistem ona çok bağımlı hale geliyor bir ödeme servisi 3 saniye gecikirirse orchestrator bekler bütün flow bloklanır