Kuyruk Tabanlı Yük Dengeleme düzeni

Azure Functions
Azure Service Bus

Hizmetin başarısız olmasına veya görevin zaman aşımına girmesine neden olabilecek aralıklı ağır yükleri düzeltmek için görevle çağıran hizmet arasında arabellek görevi gören bir kuyruk kullanın. Bu, hem görev hem de hizmet için kullanılabilirlik ve yanıt hızı üzerindeki talep artışlarının etkisini en aza indirmeye yardımcı olabilir.

Bağlam ve sorun

Buluttaki birçok çözüm, hizmetleri çağıran görevler çalıştırmayı içerir. Bu ortamda, bir hizmet aralıklı olarak ağır yükler ile karşılaşıyorsa, bu performans veya güvenilirlik sorunlarına neden olabilir.

Bir hizmet hizmeti kullanan görevler ile aynı çözümün parçası veya bir önbellek ya da depolama hizmeti gibi sık kullanılan kaynaklara erişin sağlayan üçüncü taraf bir hizmet olabilir. Aynı hizmet eşzamanlı olarak çalışan çok sayıda görev tarafından kullanılıyorsa, herhangi bir zamanda hizmetteki istek sayısını tahmin etmek zor olabilir.

Hizmet istek sayısındaki artış nedeniyle aşırı yüklenebilir ve isteklere zamanında yanıt veremeyebilir. Bir hizmete çok fazla sayıda istek göndermek de hizmet bu isteklerin neden olduğu çekişmeyi işleyemezse hizmetin başarısız olmasına neden olabilir.

Çözüm

Çözümü yeniden düzenleyin ve görev ile hizmet arasında bir kuyruk ekleyin. Görev ve hizmet zaman uyumsuz olarak çalışır. Görev, hizmet için gereken verileri içeren bir iletiyi bir kuyruğa gönderir. Kuyruk bir arabellek görevi görerek ileti hizmet tarafından alınana kadar iletiyi depolar. Hizmet iletileri kuyruktan alır ve işler. Yüksek oranda değişken bir hızla birden çok sayıda görev tarafından oluşturulan istekler aynı ileti kuyruğu üzerinden hizmete geçirilebilir. Bu şekilde bir hizmet üzerindeki yükü dengelemek için bir kuyruk kullanma gösterilmektedir.

Şekil 1 - Bir hizmet üzerindeki yükü dengelemek için bir kuyruk kullanma

Kuyruk görevleri hizmetten ayırır ve hizmet eş zamanlı görevlerden gelen istek hacminden bağımsız olarak iletileri kendi hızında işleyebilir. Ayrıca, bir hizmet kuyruğa bir ileti gönderdiğinde hizmet kullanılamıyorsa görevde gecikme yaşanmaz.

Bu düzen aşağıdaki faydaları sağlar:

  • Uygulama hizmet kullanılabilir olmadığında veya iletileri işlemiyor olduğunda bile kuyruğa ileti göndermeye devam edebileceğinden, hizmetlerde oluşan gecikmeler uygulama üzerinde doğrudan bir etkiye sahip olmadığından kullanılabilirliği en üst düzeye çıkarmaya yardımcı olur.

  • Hem kuyruk sayısı hem de hizmet sayısı isteği karşılamak için değiştirilebileceğinden, ölçeklenebilirliği en üst düzeye çıkarmaya yardımcı olur.

  • Dağıtılan hizmet örneklerinin en fazla yükü değil ortalama yükü karşılaması gerektiğinden maliyetleri denetlemeye yardımcı olabilir.

    Bazı hizmetler, istek sistemin başarısız olmasına neden olabilecek bir eşiğe ulaştığında azaltma uygular. Azaltma mevcut işlevsellik düzeyini düşürebilir. Bu eşiğin aşılmadığından emin olmak için bu hizmetlerde yük dengeleme uygulayabilirsiniz.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:

  • Kaynak hedefin aşırı yüklenmesini önlemek için, hizmetin iletileri işleme hızını denetleyen bir uygulama mantığı kullanmak gereklidir. İstek artışlarını sistemin sonraki aşamasına geçirmekten kaçının. Sistemin gereken dengelemeyi sağladığından emin olmak için sistemi yük altında test edin ve bunu gerçekleştirmek için gereken kuyruk sayısını ve iletileri işleyen hizmet örneği sayısını ayarlayın.
  • İleti kuyrukları tek yönlü bir iletişim mekanizmasıdır. Bir görev bir hizmetten yanıt bekliyorsa, hizmetin yanıt göndermek için kullanabileceği bir mekanizma uygulamak gerekli olabilir. Daha fazla bilgi için bkz. Zaman Uyumsuz Mesajlaşma Temel Bilgileri.
  • Kuyrukta istekleri dinleyen hizmetlere otomatik ölçeklendirme uygularsanız dikkatli olun. Bu, bu hizmetlerin paylaştığı kaynaklar için çekişmenin artması ve yük dengeleme için kuyruğu kullanma verimliliğinin azalmasıyla sonuçlanabilir.
  • Hizmetin yüküne bağlı olarak, sistemin her zaman işlediğiniz istekten daha fazla istek kuyruğa aldığı, her zaman arkanızda etkili bir şekilde izleyebileceğiniz bir durumla karşılaşabilirsiniz. Uygulamanıza gelen trafiğin değişkenliği dikkate alınmalıdır
  • Desen, Kuyruğun kalıcılığına bağlı olarak bilgileri kaybedebilir. Kuyruğunuz kilitleniyorsa veya bilgileri bırakıyorsa (sistem sınırları nedeniyle) garantili bir teslime sahip olma olasılığınız vardır. Çözümünüzün gereksinimlerine göre kuyruğunuzun ve sistem sınırlarınızın davranışı dikkate alınmalıdır.

Bu düzenin kullanılacağı durumlar

Bu düzen aşırı yüklenen hizmetleri kullanan uygulamalar için yararlıdır.

Bu düzen uygulama hizmetten en düşük gecikme süresiyle yanıt bekliyorsa yararlı değildir.

İş yükü tasarımı

Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için iş yükünün tasarımında Kuyruk Tabanlı Yük Dengeleme düzeninin nasıl kullanılabileceğ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. Bu düzende açıklanan yaklaşım, görevlerin gelişini işlenmelerinden ayrıştırarak talepteki ani ani artışlara karşı dayanıklılık sağlayabilir. Ayrıca kuyruk işlemedeki arızaları yalıtarak alımı etkilemelerini de sağlayabilir.

- RE:06 Ölçeklendirme
- RE:07 Arka plan işleri
Maliyet İyileştirme, iş yükünüzün yatırım getirisini sürdürmeye ve geliştirmeye odaklanır. Yük işleme istekten veya görev alımından ayrılmış olduğundan, en yüksek yükü işlemek için fazla kaynak sağlama gereksinimini azaltmak için bu yaklaşımı kullanabilirsiniz.

- CO:12 Ölçeklendirme maliyetleri
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 yaklaşım, isteklerin alımının işlenme hızıyla bağıntılı olması gerekmediğinden aktarım hızı performansı üzerinde kasıtlı tasarıma olanak tanır.

- PE:05 Ölçeklendirme ve bölümleme

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.

Örnek

Web uygulaması bir dış veri deposuna veri yazar. Web uygulamasının çok sayıda örneği eşzamanlı olarak çalıştırılırsa, veri deposu isteklere yeterince hızlı yanıt veremeyebilir ve bu da isteklerin zaman aşımına neden olmasına, kısıtlanmasına veya başka bir şekilde başarısız olmasına neden olabilir. Aşağıdaki diyagramda, bir veri deposunun bir uygulamanın örneklerinden gelen çok sayıda eşzamanlı istekten bunaldığı gösterilmektedir.

Şekil 2 - Bir web uygulamasının örneklerinden gelen çok sayıda eşzamanlı istekten bunalan bir hizmet

Bu sorunu çözmek için, uygulama örnekleriyle veri deposu arasındaki yükü dengelemek için bir kuyruk kullanabilirsiniz. bir Azure İşlevleri uygulaması kuyruktan iletileri okur ve veri deposuna okuma/yazma isteklerini gerçekleştirir. İşlev uygulamasındaki uygulama mantığı, deponun aşırı yüklenmesini önlemek için istekleri veri deposuna geçirme hızını denetleyebilir. (Aksi takdirde işlev uygulaması arka uçta aynı sorunu yeniden tanıtır.)

Şekil 3 - Yükü dengelemek için kuyruk ve işlev uygulaması kullanma

Sonraki adımlar

Bu düzeni uygularken aşağıdaki yönergeler de yararlı olabilir:

  • Zaman Uyumsuz Mesajlaşma Temel Bilgileri. İleti kuyrukları kendiliğinden zaman uyumsuzdur. Bir görevdeki uygulama mantığı bir hizmetle doğrudan iletişim kurmaktan bir ileti kuyruğu kullanmaya uyarlandıysa, mantığın yeniden tasarlanması gerekebilir. Benzer şekilde, bir hizmetin bir ileti kuyruğundan istekleri kabul etmek için yeniden düzenlenmesi gerekebilir. Alternatif olarak, örnekte açıklandığı gibi bir proxy hizmeti uygulamak mümkün olabilir.

  • Azure mesajlaşma hizmetleri arasında seçim yapın. Azure uygulamalarında bir mesajlaşma ve kuyruğa alma mekanizması seçme hakkında bilgiler.

  • Zaman uyumsuz ileti tabanlı iletişim.

  • Web-Queue-Worker mimari stili. Web ve çalışan bileşenleri durum bilgisine sahip değildir. Oturum durumu dağıtılmış bir önbellekte depolanabilir. Uzun süre çalışan işler çalışan tarafından zaman uyumsuz olarak gerçekleştirilir. Çalışan, kuyruğa gönderilen mesajlarla tetiklenebilir veya toplu işlem için bir zamanlamaya göre çalıştırılabilir.

Bu desen uygulanırken aşağıdaki desenler de uygun olabilir:

  • Rakip Tüketiciler düzeni. Bir hizmetin her biri yük dengeleme kuyruğundan bir ileti tüketicisi olarak davranan birden çok örneğini çalıştırmak mümkün olabilir. İletilen alınma ve bir hizmete geçirilme hızını ayarlamak için bu yaklaşımı kullanabilirsiniz.

  • Azaltma düzeni. Bir hizmet ile azaltma kullanmanın basit bir yolu, kuyruk tabanlı yük dengeleme kullanmak ve bir hizmete tüm istekleri bir ileti kuyruğu üzerinden yönlendirmektir. Hizmet istekleri hizmet tarafından gerektirilen kaynakların bitmemesini sağlayan ve oluşabilecek çekişme miktarını azaltan bir hızda işleyebilir.