Düzenle

Aracılığıyla paylaş


Öncelikli Kuyruk düzeni

Azure Service Bus

Öncelik sırası düzeni, bir iş yükünün yüksek öncelikli görevleri düşük öncelikli görevlerden daha hızlı işlemesini sağlar. Bu düzen, bir veya daha fazla kuyruğa gönderilen iletileri kullanır ve tek tek istemcilere farklı hizmet düzeyi garantileri sunan uygulamalarda kullanışlıdır.

Bağlam ve sorun

İş yüklerinin genellikle farklı önem düzeylerinde ve aciliyet düzeylerinde görevleri yönetmesi ve işlemesi gerekir. Bazı görevlere hemen dikkat edilmesi gerekirken, diğerleri bekleyebilir. Yüksek öncelikli görevlerin ele alınamaması, kullanıcı deneyimini etkileyebilir ve hizmet düzeyi sözleşmelerini (SLA' lar) ihlal edebilir.

Görevleri önceliklerine göre verimli bir şekilde işlemek için iş yüklerinin görevleri buna göre önceliklendirmek ve yürütmek için bir mekanizmaya ihtiyacı vardır. İş yükleri genellikle ilk giriş, ilk çıkış (FIFO) kuyruk yapısını kullanarak görevleri geldikleri sırayla işler. Bu yaklaşım, görevlerin değişen önem derecesini hesaba eklemez.

Çözüm

Öncelik kuyrukları, iş yüklerinin görevleri varış sırası yerine önceliklerine göre işlemesine olanak sağlar. Kuyruğa ileti gönderen uygulama iletiye bir öncelik atar ve tüketiciler iletileri önceliğe göre işler. Aşağıdaki gereksinimlere sahip olduğunuzda öncelik sırası desenini kullanın:

  • Değişen aciliyet ve önem derecesine göre görevleri yerine getirin. Farklı aciliyet ve önem düzeylerine sahip görevleriniz vardır ve daha az kritik görevlerden önce daha kritik görevleri işlemenizi sağlamanız gerekir.

  • Farklı hizmet düzeyi sözleşmelerini işleme. İstemcilere gereken farklı hizmet düzeyi garantileri sunarsınız ve yüksek öncelikli istemcilerin daha iyi performans ve kullanılabilirlik elde etmesini sağlamanız gerekir.

  • Farklı iş yükü yönetimi gereksinimlerini karşılar. Belirli görevleri hemen ele alması gereken ve daha az acil görevlerin bekleyebileceği bir iş yükünüz var.

Öncelik Sırası düzenini uygulamak için iki ana yaklaşım vardır:

  • Tek kuyruk: Tüm iletiler bir kuyruğa gönderilir ve her iletiye bir öncelik atanır.

  • Birden çok kuyruk: Her ileti önceliği için ayrı kuyruklar kullanılır.

Tek kuyruk

Tek bir kuyrukta uygulama (üretici) her iletiye bir öncelik atar ve iletiyi kuyruğa gönderir. Kuyruk iletileri önceliğe göre sipariş eder ve tüketicilerin düşük öncelikli iletilerden önce daha yüksek öncelikli iletileri işlemesini sağlar.

İleti önceliklendirmeyi destekleyen bir kuyruğa alma mekanizmasını gösteren diyagram.
Şekil 1. Tek bir kuyruğun ve tek bir tüketici havuzunun mimarisi

Birden çok kuyruk

Birden çok kuyruk, iletiyi önceliğe göre ayırmanıza olanak sağlar. Uygulama her iletiye bir öncelik atar ve iletiyi önceliğine karşılık gelen kuyruğa yönlendirir. Tüketiciler iletileri işler. Birden çok kuyruk çözümü tek bir tüketici havuzu veya birden çok tüketici havuzu kullanır.

Birden çok tüketici havuzu

Birden çok tüketici havuzuyla her kuyrukta buna ayrılmış tüketici kaynakları vardır. Yüksek öncelikli kuyruklar, iletileri düşük öncelikli kuyruklardan daha hızlı işlemek için daha fazla tüketici veya daha yüksek performans katmanı kullanmalıdır.

Aşağıdaki durumlarda birden çok tüketici havuzu kullanın:

  • Katı performans gereksinimleri: Farklı görev önceliklerinin bağımsız olarak karşılanması gereken katı performans gereksinimleri olduğunda birden çok tüketici havuzu gerekir.
  • Yüksek güvenilirlik gereksinimleri: Güvenilirlik ve hata yalıtımının kritik öneme sahip olduğu uygulamalar için birden çok tüketici havuzu gerekir. Bir kuyruktaki sorunlar diğer kuyrukları etkilememelidir.
  • Karmaşık uygulamalar: Farklı işlem özellikleri ve farklı görevler için performans garantileri gerektiren görevlere sahip karmaşık uygulamalar için faydalıdır.

Her öncelik için ayrı ileti kuyruklarının kullanımını gösteren diyagram.
Şekil 2. Birden çok kuyruğun ve birden çok tüketici havuzunun mimarisi.

Tek tüketici havuzu

Tek bir tüketici havuzuyla tüm kuyruklar tek bir tüketici havuzunu paylaşır. Tüketiciler en yüksek öncelikli kuyruktan gelen iletileri önce işler ve yalnızca yüksek öncelikli iletiler olmadığında düşük öncelikli kuyruklardan gelen iletileri işler. Sonuç olarak, tek bir tüketici havuzu her zaman düşük öncelikli iletilerden önce yüksek öncelikli iletileri işler. Bu kurulum, düşük öncelikli iletilerin sürekli gecikmesine ve hiçbir zaman işlenmemesine neden olabilir.

Aşağıdakiler için tek bir tüketici havuzu kullanın:

  • Basit yönetim: Tek bir tüketici havuzu, kurulum ve bakım kolaylığının öncelikli olduğu uygulama için uygundur. Yapılandırma ve izlemenin karmaşıklığını azaltır.
  • Birleşik işleme gereksinimleri: Tek bir tüketici havuzu, gelen görevlerin doğası tam olarak benzer olduğunda kullanışlıdır.

Her öncelik için ayrı ileti kuyruklarının kullanımını gösteren diyagram.
Şekil 3. Birden çok kuyruğun ve tek bir tüketici havuzunun mimarisi.

Öncelik Sırası düzeni için öneriler

Öncelik sırası düzeninin nasıl uygulaneceğine karar vermeniz durumunda aşağıdaki önerileri göz önünde bulundurun:

Genel öneriler

  • Öncelikleri net bir şekilde tanımlayın. Çözümünüzle ilgili ayrı ve net öncelik düzeyleri oluşturun. Örneğin, yüksek öncelikli bir ileti 10 saniye içinde işlenmesini gerektirebilir. Yüksek öncelikli öğeleri işleme gereksinimlerini belirleyin ve gerekli kaynakları uygun şekilde ayırın.

  • Tüketici havuzlarını dinamik olarak ayarlayın. Hizmet verdikleri kuyruk uzunluğuna göre tüketici havuzlarının boyutunu ölçeklendirin.

  • Hizmet düzeylerinin önceliklerini belirleyin. Önceliklendirilmiş kullanılabilirlik veya performans gerektiren iş gereksinimlerini karşılamak için öncelik kuyrukları uygulayın. Örneğin, yüksek öncelikli müşterilerin daha iyi performans ve kullanılabilirlik elde edebilmesi için farklı müşteri grupları farklı düzeylerde hizmet alabilir.

  • Düşük öncelikli işlemeyi güvence altına alma. İleti önceliklendirmeyi destekleyen kuyruklarda, sistem düşük öncelikli iletilerin sonunda işlenmesini sağlamak için izin veriyorsa eski iletilerin önceliğini dinamik olarak artırın.

  • Kuyruk maliyetlerini göz önünde bulundurun. Kuyrukları denetlemeyle ilişkili finansal ve işleme maliyetlerine dikkat edin. Bazı kuyruk hizmetleri iletileri göndermek, almak ve sorgulamak için ücret alır ve bu da kuyruk sayısıyla artabilir.

Birden çok kuyruk önerisi

  • İşlem hızlarını izleyin. İletilerin beklenen hızlarda işlenmesini sağlamak için, yüksek ve düşük öncelikli kuyrukların işleme hızını sürekli olarak izleyin.

  • Maliyetleri en aza indirin. Kritik görevleri kullanılabilir tüketicilerle hemen işleyin. Daha az meşgul zamanlarda daha az kritik arka plan görevleri zamanlayın.

Tek tüketici havuzu önerileri

  • Önalım ve askıya alma uygulama. Düşük öncelikli öğelerden önce tüm yüksek öncelikli öğelerin işlenmesi gerekip gerekmediğini belirleyin. Birden çok kuyruk için tek bir tüketici havuzu kullanılırken yüksek öncelikli kuyruklara her zaman düşük öncelikli kuyruklardan önce hizmet sağlanmasını sağlayan bir algoritma kullanın.

  • Maliyetleri iyileştirin. Tek kuyruklu yaklaşımı kullanırken tüketici sayısını geri ölçeklendirerek operasyonel maliyetleri iyileştirin. Yüksek öncelikli iletiler önce işlenir, ancak büyük olasılıkla daha yavaştır, ancak düşük öncelikli iletiler daha uzun gecikmelerle karşılaşabilir.

İş yükü tasarımı

Bir mimar, Öncelik Sırası düzeninin Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri nasıl ele alınabileceğini değerlendirmelidir. Örneğin:

Yapı Taşı Bu desen sütun hedeflerini nasıl destekler?
Güvenilirlik tasarımı kararları, iş yükünüzün arızaya karşı dayanıklı olmasına ve bir hata oluştuktan sonra tamamen çalışır duruma gelmesini sağlamaya yardımcı olur. Öğeleri iş önceliğine göre ayırmak, güvenilirlik çalışmalarını en kritik çalışmalara odaklamanıza olanak tanır.

- RE:02 Kritik akışlar
- RE:07 Arka plan işleri
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. Öğeleri iş önceliğine göre ayırmak, performans çalışmalarını zamana en duyarlı çalışmalara odaklamanıza olanak tanır.

- PE:09 Kritik akışlar

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.

Öncelik Sırası düzeni örneği

GitHub'daki aşağıdaki örnekte Azure Service Bus kullanılarak Öncelik Kuyrukları deseninin bir uygulaması gösterilmektedir.

Service Bus kullanarak öncelik kuyruğu uygulama adımlarını gösteren diyagram.
Şekil 4. GitHub'da PriorityQueue örneğinin mimarisi

Mimariye genel bir bakış aşağıdadır:

  • Uygulama (üretici): Örnekte, iletileri oluşturan ve her iletide adlı Priority özel bir özellik atayan bir uygulama (PriorityQueueSender) vardır. Priorityveya Lowdeğerine High sahiptir.

  • İleti aracısı ve kuyruklar: Örnek, ileti aracısı olarak Azure Service Bus'ı kullanır. Her ileti önceliği (High ve Low) için bir tane olan iki Azure Service Bus kuyruğu kullanır. Uygulama (üretici) iletisini temel alarak Priorityiletileri doğru kuyruğa gönderir.

  • Birden çok tüketici havuzu: Örnek, kuyrukların her birinden gelen iletileri okumak için ayrılmış birden çok tüketici havuzu (PriorityQueueConsumerHigh ve PriorityQueueConsumerLow) kullanır.

Örnek mimarideki rol ÖrnekteKi Azure hizmeti Örnekteki ad
Uygulama Azure İşlevleri uygulaması PriorityQueueSender
İleti kuyruğu aracısı Azure Service Bus <service bus ad alanınız>
İleti kuyrukları Azure Service Bus kuyrukları <kuyruk adlarınız>
Tüketiciler Azure İşlevleri uygulaması PriorityQueueConsumerHigh
PriorityQueueConsumerLow

Bu deseni uygularken aşağıdaki desenler size yardımcı olabilir:

  • Rakip Tüketiciler düzeni: Bu desen, aktarım hızını artırmak için aynı kuyruğu dinleyen ve görevleri paralel olarak işleyen birden çok tüketicinin uygulanmasını içerir. Her iletiyi yalnızca bir tüketici işler. Makale, bu yaklaşımın avantajları ve dezavantajları hakkında ayrıntılı bilgi sağlar.

  • Azaltma düzeni: Bu desen, istek oranlarını yönetmek için kuyruklar kullanılarak uygulanabilir. Öncelikli mesajlaşma kullanılarak kritik uygulamalardan veya yüksek değerli müşterilerden gelen istekler daha az önemli olanlara göre önceliklendirilebilir.