Koreografi düzeni

Koreografi düzeni, iş akışı mantığını merkezi olmayan hale getirir ve sorumlulukları sistemdeki diğer bileşenlere dağıtır. Merkezi bir düzenleyiciye bağlı olmak yerine, hizmetler bir iş işleminin ne zaman ve nasıl işlendiğine karar verir.

Bağlam ve sorun

Bulut tabanlı bir uygulamayı genellikle uçtan uca iş işlemlerini işlemek için birlikte çalışan birkaç küçük hizmete bölersiniz. Bir işlem içindeki tek bir işlem, tüm hizmetler arasında birden çok noktadan noktaya çağrıya neden olabilir. İdeal olarak, bu hizmetler gevşek bir şekilde birleştirilir. Karmaşık hizmetler arası iletişim içerdiği için dağıtılmış, verimli ve ölçeklenebilir bir iş akışı tasarlamak zordur.

İletişim için yaygın bir desen, merkezi bir hizmet veya düzenleyici kullanmaktır. Gelen istekler, işlemleri ilgili hizmetlere devredecek şekilde orkestratörden geçer. Her hizmet kendi sorumluluğunu tamamlar ve genel iş akışının farkında değildir.

İstekleri işlemek için merkezi düzenleyici kullanan bir iş akışının diyagramı.

Orkestratör desenini genellikle sistem içindeki hizmetlerin sorumlulukları hakkında alan bilgisi olan özelleştirilmiş yazılım olarak uygularsınız. Bu yaklaşımın avantajlarından biri, düzenleyicinin aşağı akış hizmetlerinin yürüttüğü tek tek işlemlerin sonuçlarına göre bir işlemin durumunu birleştirebiliyor olmasıdır.

Bu yaklaşım bazı engeller de oluşturur. İletişim yolunun bölümlerini yeniden bağlamanız gerektiğinden, hizmetlerin eklenmesi veya kaldırılması mevcut mantığı bozabilir. Bu bağımlılık orchestrator uygulamasını karmaşık ve bakımı zor hale getirir. Orkestratör, yükün güvenilirliğini olumsuz etkileyebilir. Yük altında performans darboğazlarına yol açabilir ve tek hata noktası (SPoF) olabilir. Ayrıca aşağı akış hizmetlerinde basamaklı hatalara neden olabilir.

Çözüm

Hizmetler arasında işlem işleme mantığını dağıtın. Her hizmetin bir iş operasyonu için iletişim iş akışına katılmasına ve ne zaman ve nasıl işlendiğine karar vermesine izin verin.

Koreografi düzeni, iletişim iş akışını merkezileştiren özel yazılım bağımlılığını en aza indirir. Bileşenler, birbirleriyle doğrudan iletişim kurmadan iş akışını düzenlerken ortak bir mantık uygular.

Koreografiyi uygulamanın yaygın yollarından biri, istekleri alt akış bileşenleri talep edene ve işleyene kadar arabelleğe alan bir mesaj aracısı kullanmaktır. Aşağıdaki görüntüde , yayımcı-abone modeli aracılığıyla istek işleme gösterilmektedir.

İleti aracılarının isteği nasıl işlediğini gösteren diyagram.

  1. İstemci, bir ileti aracısı içinde ileti olarak kuyruk isteğinde bulunur.

  2. Hizmetler veya abone, aracıyı yoklar ve bu iletiyi uygulanan iş mantığına göre işleyip işleyemeyeceğini belirler. Aracı, bu mesajla ilgilenen abonelere de mesaj iletebilir.

  3. Abone olunan her hizmet, iletinin belirttiği gibi işlemini yapar ve aracıya bir işlem başarılı veya hata iletisiyle yanıt verir.

  4. İşlem başarılı olursa, hizmet bir iletiyi aynı kuyruğa veya farklı bir ileti kuyruğuna göndererek başka bir hizmetin gerekirse iş akışına devam edebilmesini sağlayabilir. İşlem başarısız olursa, ileti aracısı bu işlemi veya işlemin tamamını telafi etmek için diğer hizmetlerle birlikte çalışır.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulaneceğine karar velarken aşağıdaki noktaları göz önünde bulundurun:

Bu desen ne zaman kullanılır?

Bu düzeni aşağıdaki durumlarda kullanın:

  • Aşağı akış bileşenleri atomik işlemleri bağımsız olarak işler. Bu düzeni, bir bileşenin etkin yönetim gerektirmeyen bir görev yaptığı bir ateşle ve unut mekanizması olarak düşünün. Görev tamamlandığında, bileşen diğer bileşenlere bir bildirim gönderir.

  • Bileşenleri sık sık güncelleştirmeyi ve değiştirmeyi beklersiniz. Bu düzen, mevcut hizmetlerde daha az çaba ve en az kesintiyle uygulamayı değiştirmenize olanak tanır.

  • Basit iş akışları için sunucusuz mimariler kullanırsınız. Bileşenler kısa süreli ve olay odaklı olabilir. Bir olay oluştuğunda, hizmet bir görevi yerine getiren bileşenler oluşturur ve hizmet bu görevi tamamladıktan sonra bileşenleri kaldırır.

  • Sınırlanmış bağlamlar arasındaki iletişim, etki alanı sınırları arasında gevşek bağlantı gerektirir. Tek bir sınırlanmış bağlam içindeki iletişim için bunun yerine bir düzenleyici deseni uygulayın.

  • Merkezi düzenleyici bir performans darboğazına yol açar.

Bu düzen aşağıdaki durumlarda uygun olmayabilir:

  • Uygulama karmaşıktır ve aşağı akış bileşenlerini hafif tutmak için paylaşılan mantığı işlemek için merkezi bir bileşen gerektirir.

  • Bileşenler arasında noktadan noktaya iletişim kaçınılmazdır.

  • Aşağı akış bileşenlerinin işlediği tüm işlemleri birleştirmek için iş mantığını kullanmanız gerekir.

İş yükü tasarımı

Azure Well-Architected Framework yapılarında ele alınan hedefleri ve ilkeleri ele almak için bir iş yükünün tasarımında Koreografi deseninin nasıl kullanılacağını değerlendirin. Aşağıdaki tabloda, bu desenin her bir sütunun hedeflerini nasıl desteklediği hakkında rehberlik sağlanmaktadır.

Ana Direk Bu desen sütun hedeflerini nasıl destekler?
Operasyonel Mükemmellik, standartlaştırılmış süreçler ve ekip uyumu aracılığıyla iş yükü kalitesinin sunulmasına yardımcı olur. Bu düzendeki dağıtılmış bileşenler otonom ve değiştirilebilir olacak şekilde tasarlanmıştır, böylece sistemde daha az genel değişiklikle iş yükünü değiştirebilirsiniz.

- OE:04 Araçlar ve işlemler
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Bu düzen, merkezi bir düzenleme topolojisinde performans sorunları oluştuğunda bir alternatif sağlar.

- PE:02 Kapasite planlaması
- PE:05 Ölçeklendirme ve bölümleme

Bu model bir sütun içinde dengeleri ortaya çıkartıyorsa, bunları diğer sütunların hedeflerine karşı değerlendirin.

Example

Bu örnekte, mikro hizmetlerle birlikte işlevler çalıştıran olay odaklı, buluta özel bir iş yükü oluşturarak Koreografi deseni gösterilmektedir. Bir İstemci bir paketi göndermeyi istediğinde, iş yükleme sistemi bir insansız hava aracı atar. Paket planlanan insansız hava aracı tarafından teslim alım için hazır olduktan sonra teslimat işlemi başlar. Paket aktarımdayken, iş yükü gönderi durumu alınana kadar teslimat sürecini yönetir.

Koreografi desenini uygulayan olay odaklı, buluta özel örnek iş yükünün diyagramı.

Alma hizmeti istemci isteklerini alır ve bunları teslim ayrıntılarını içeren iletilere dönüştürür. hizmetler bu yeni iletileri tükettiğinde iş işlemleri başlar.

Tek bir istemci iş işlemi için üç ayrı iş işlemi gerekir:

  • Paket oluşturma veya güncelleştirme.

  • Paketi teslim etmek için bir insansız hava aracı atayın.

  • Teslimatı, paketin gönderildiğinde kontrol edilmesi ve bir bildirim gönderilmesi de dahil olmak üzere, işleyin.

Paket, drone zamanlayıcı ve teslimat mikro hizmetleri iş işlemeyi gerçekleştirir. Hizmetler, birbirleriyle iletişim kurmak için merkezi bir düzenleyici yerine mesajlaşmayı kullanır. Her hizmetin iş akışını merkezi olmayan bir şekilde koordine eden bir protokolü önceden uygulaması gerekir.

Design

Hizmetler, iş işlemlerini birden çok atlama aracılığıyla sırayla işler. Her atlama, tüm iş hizmetleri arasında tek bir ileti veri yolunu paylaşır.

İstemci bir HTTP uç noktası üzerinden bir teslim isteği gönderdiğinde, alma hizmeti bunu alır, bir iletiye dönüştürür ve sonra iletiyi paylaşılan ileti veri yolu için yayımlar. Abone olunan iş hizmetleri, veri yoluna eklenen yeni iletileri kullanır. Bir iş hizmeti iletiyi aldığında, işlemi başarıyla tamamlar veya istek başarısız olur ya da zaman aşımına uğrar. İstek başarılı olursa, hizmet durum koduyla Ok veri yoluna yanıt verir, yeni bir işlem iletisi oluşturur ve iletiyi mesaj veri yoluna gönderir. İstek başarısız olursa veya zaman aşımına uğrarsa, hizmet hata kodunu ileti veriyoluna göndererek başarısız olduğunu bildirir ve ardından iletiyi ölü harf kuyruğuna (DLQ) ekler. Servis ayrıca belirli bir süre içinde alınıp işlenemeyen iletileri DLQ'ya taşır.

Bu tasarım, iş işleminin tamamını işlemek için birden çok ileti veri yolları kullanır. Azure Service Bus ve Azure Event Grid , bu tasarım için mesajlaşma hizmeti platformunu sağlar. İş yükü, alma için Azure İşlevleri'ni barındıran AzureContainer Apps üzerinde çalışır. Container Apps, iş mantığını çalıştıran olay temelli işlemeyi işler.

Bu tasarım, koreografinin bir sırayla gerçekleşmesini de sağlar. Tek bir Service Bus ad alanı, iki aboneliği ve oturum duyarlı bir kuyruğu olan bir konu içerir. İçerik alma servisi başlığa mesajlar yayımlar. Paket hizmeti ve drone zamanlayıcı hizmeti, konuya abone olarak başarılı istekleri kuyruğa bildiren mesajlar yayınlar. Hizmetlerin ilişkili iletilerin ilişkisiz dizilerini sırayla işleyebilmesi için bir GUID'yi teslim tanımlayıcısıyla ilişkilendiren ortak bir oturum tanımlayıcısı ekleyin. Teslim hizmeti her işlem için iki ilgili ileti bekler. İlk ileti paketin gönderilmeye hazır olduğunu, ikinci ileti ise bir insansız hava aracının zamanlandığını belirtir.

Bu tasarımda Service Bus, tüm teslim işlemi sırasında kaybolmaması veya çoğaltılmaması gereken yüksek değerli iletileri işler. Paket geldiğinde, durum değişikliği Event Grid'de yayımlar. Olay gönderenin durum değişikliğinin nasıl işlendiğinden hiçbir beklentisi yoktur. Bu tasarımın içermediği aşağı akış kuruluş hizmetleri bu olay türünü dinleyebilir ve kullanıcıya sipariş durumu e-postası gönderme gibi belirli iş mantığını çalıştırabilir.

Bu düzeni AKS gibi başka bir işlem hizmetine dağıtırsanız, aynı poddaki iki kapsayıcıyla Publisher-Subscriber desen uygulama şablonunu uygulayabilirsiniz. Kapsayıcılardan biri seçtiğiniz ileti veri yolu ile etkileşim kuran büyükelçiyi çalıştırırken diğer kapsayıcı iş mantığını çalıştırır. Bu yaklaşım performansı ve ölçeklenebilirliği artırır. Büyükelçi ve iş hizmeti aynı ağı paylaşarak gecikme süresini azaltır ve aktarım hızını artırır.

Birden çok girişime yol açabilecek art arda yeniden deneme işlemlerini önlemek için, iş hizmetlerinin kabul edilemez iletileri hemen işaretlemesi gerekir. Hizmetlerin bunları bir DLQ'ye taşıyabilmesi için ortak neden kodları veya tanımlı bir uygulama kodu kullanarak bu iletileri zenginleştirin. Aşağı akış hizmetlerinden tutarlılık sorunlarını yönetmek için Saga desenini uygulamayı göz önünde bulundurun. Örneğin, başka bir hizmet yalnızca bir telafi, yeniden deneme veya pivot işlem çalıştırarak düzeltme amacıyla ölü harf mesajlarını işler.

Yeniden deneme işlemlerinin yinelenen kaynaklar oluşturmasını önlemek amacıyla iş hizmetleri idem-potent tasarlanmıştır. Örneğin, paket hizmeti veri deposuna veri eklemek için upsert işlemlerini kullanır.

Sonraki Adımlar

Koreografi tasarımınızda şu desenleri göz önünde bulundurun: