Kuyruk Tabanlı Yük Dengeleme düzeni
Hizmetin başarısız olmasına veya görevin zaman aşımına başlamasına neden olabilecek aralıklı ağır yükleri düzgünleştirmek için, bir görev ve bir 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 verme açısından en üst düzeyde etkiyi en aza indirmenize 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.

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.
- Kuyruktaki istekler için dinleyen hizmetlere otomatik ölçeklendirme uyguluyorsanı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.
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.
Örnek
Bir Web uygulaması, verileri dış veri deposuna yazar. Web uygulamasının çok sayıda örneği aynı anda çalışıyorsa, veri deposu isteklere yeterince hızlı yanıt veremeyebilir ve isteklerin zaman aşımına uğrar, 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 çok sayıda eşzamanlı istek tarafından yoğun bir şekilde gösterildiği gösterilmektedir.

Bu sorunu çözmek için, uygulama örnekleri ve veri deposu arasındaki yükü seviyeden bir kuyruk kullanabilirsiniz. Azure Işlevleri uygulaması kuyruktaki iletileri okur ve veri deposuna okuma/yazma istekleri gerçekleştirir. İşlev uygulamasındaki uygulama mantığı, deponun aşırı yüklenmesini engellemek için istekleri veri deposuna geçirmekte olan hızı denetleyebilir. (Aksi halde, işlev uygulaması arka uçta aynı sorunu yeniden tanıtacaktır.)

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.
Bir Azure Web uygulamasında ölçeklenebilirliği geliştirme. Bu başvuru mimarisi, mimarinin bir parçası olarak Kuyruk tabanlı yük dengeleme içerir.
İlgili yönergeler
Bu düzeni uygularken aşağıdaki desenler de ilgili olabilir:
Rekabet tüketicilere yönelik desenler. 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.
Daraltma kriteri. 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.