Uygulamaları Service Bus kesintilerine ve olağanüstü durumlarına karşı dayanıklı hale getirmek için en iyi yöntemler

Görev açısından kritik uygulamalar, planlanmamış kesintiler veya olağanüstü durumların varlığında bile sürekli çalışmalıdır. Bu makalede, Service Bus uygulamalarını olası bir hizmet kesintisine veya olağanüstü durumlara karşı korumak için kullanabileceğiniz teknikler açıklanmaktadır.

Kesinti, Azure Service Bus'ın geçici olarak kullanılamaması olarak tanımlanır. Kesinti, Service Bus'ın mesajlaşma deposu ve hatta veri merkezinin tamamı gibi bazı bileşenlerini etkileyebilir. Sorun düzeltildikten sonra Service Bus yeniden kullanılabilir duruma gelir. Genellikle bir kesinti iletilerin veya diğer verilerin kaybına neden olmaz. Belirli bir mesajlaşma deposunun kullanılamaması bileşen hatasına örnek olarak gösterilir. Veri merkezi genelinde kesintiye örnek olarak veri merkezinin güç kesintisi veya hatalı bir veri merkezi ağ anahtarı yer alır. Kesinti birkaç dakika ile birkaç gün sürebilir.

Olağanüstü durum, Service Bus ölçek biriminin veya veri merkezinin kalıcı olarak kaybedilmesi olarak tanımlanır. Veri merkezi yeniden kullanılabilir duruma gelebilir veya olmayabilir. Genellikle olağanüstü durum iletilerin veya diğer verilerin bir kısmının veya tümünün kaybolmasına neden olur. Felaketlere örnek olarak yangın, sel veya deprem verilebilir.

Kesintilere ve olağanüstü durumlara karşı koruma - premium katman

Yüksek kullanılabilirlik ve olağanüstü durum kurtarma kavramları, hem aynı bölgede (kullanılabilirlik alanları aracılığıyla) hem de farklı bölgelerde (coğrafi olağanüstü durum Kurtarma yoluyla) Doğrudan Azure Service Bus premium katmanında yerleşik olarak bulunur.

Coğrafi Olağanüstü Durum kurtarma

Service Bus premium katmanı, ad alanı düzeyinde coğrafi olağanüstü durum kurtarmayı destekler. Daha fazla bilgi için bkz . Azure Service Bus coğrafi olağanüstü durum kurtarma. Yalnızca Premium SKU için kullanılabilen olağanüstü durum kurtarma özelliği meta veri olağanüstü durum kurtarma uygular ve birincil ve ikincil ad alanlarına dayanır. Coğrafi olağanüstü durum kurtarma ile yalnızca varlıklara ait meta veriler birincil ve ikincil ad alanları arasında çoğaltılır.

Kullanılabilirlik alanları

Service Bus premium katmanı kullanılabilirlik Alanlarını destekler ve aynı Azure bölgesinde hatadan yalıtılmış konumlar sağlar. Service Bus, mesajlaşma deposunun üç kopyasını yönetir (1 birincil ve 2 ikincil). Service Bus, veri ve yönetim işlemleri için üç kopyanın da eşitlenmiş durumda kalmasını sağlar. Birincil kopya başarısız olursa, ikincil kopyalardan biri algılanan kapalı kalma süresi olmadan birincil kopyaya yükseltilir. Uygulamalar Service Bus ile geçici bağlantı kesiliyorsa, SDK'daki yeniden deneme mantığı otomatik olarak Service Bus'a yeniden bağlanır.

Kullanılabilirlik alanlarını kullandığınızda, hem meta veriler hem de veriler (iletiler) kullanılabilirlik alanındaki veri merkezleri arasında çoğaltılır.

Not

Premium katman için kullanılabilirlik alanları desteği yalnızca kullanılabilirlik alanlarının bulunduğu Azure bölgelerinde kullanılabilir.

Portal aracılığıyla bir premium katman ad alanı oluşturduğunuzda, kullanılabilirlik alanları desteği (seçili bölgede varsa) ad alanı için otomatik olarak etkinleştirilir. Azure Resource Manager / Bicep şablonları, CLI veya PowerShell gibi diğer mekanizmalar aracılığıyla premium katman ad alanı oluşturduğunuzda, özelliğin zoneRedundant kullanılabilirlik alanlarını etkinleştirmek için (seçili bölgede varsa) açıkça olarak olarak ayarlanması true gerekir. Bu özelliği kullanmanın ek bir maliyeti yoktur ve ad alanı oluşturulduktan sonra bu özelliği devre dışı bırakamaz veya etkinleştiremezsiniz.

Kesintilere ve olağanüstü durumlara karşı koruma - standart katman

Standart mesajlaşma fiyatlandırma katmanıyla veri merkezi kesintilerine karşı dayanıklılık elde etmek için etkin veya pasif çoğaltma kullanabilirsiniz. Her yaklaşım için, veri merkezi kesintisi durumunda belirli bir kuyruk veya konu başlığının erişilebilir kalması gerekiyorsa, bunu her iki ad alanında da oluşturabilirsiniz. Her iki varlık da aynı ada sahip olabilir. Örneğin, birincil kuyruğa contosoPrimary.servicebus.windows.net/myQueue altında, ikincil kuyruğuna ise contosoSecondary.servicebus.windows.net/myQueue altında ulaşılabilir.

Not

Etkin çoğaltma ve pasif çoğaltma kurulumu, Service Bus'ın belirli özellikleri değil genel amaçlı çözümlerdir. Çoğaltma mantığı (2 farklı ad alanına gönderiliyor) gönderen uygulamalardadır ve alıcının yinelenen algılama için özel mantığı olması gerekir.

Uygulama kalıcı gönderenden alıcıya iletişim gerektirmiyorsa, ileti kaybını önlemek ve göndereni geçici Service Bus hatalarından korumak için dayanıklı bir istemci tarafı kuyruğu uygulayabilir.

Etkin çoğaltma

Etkin çoğaltma, her işlem için her iki ad alanında da varlıklar kullanır. İleti gönderen tüm istemciler aynı iletinin iki kopyasını gönderir. İlk kopya birincil varlığa (örneğin, contosoPrimary.servicebus.windows.net/sales) gönderilir ve iletinin ikinci kopyası ikincil varlığa gönderilir (örneğin, contosoSecondary.servicebus.windows.net/sales).

İstemci her iki kuyruktan da ileti alır. Alıcı iletinin ilk kopyasını işler ve ikinci kopya gizlenir. Yinelenen iletileri engellemek için, gönderenin her iletiyi benzersiz bir tanımlayıcıyla etiketlemesi gerekir. İletinin her iki kopyası da aynı tanımlayıcıyla etiketlenmelidir. İletiyi etiketlemek için ServiceBusMessage.MessageId veya ServiceBusMessage.Subject özelliklerini ya da özel bir özelliği kullanabilirsiniz. Alıcı, zaten almış olduğu iletilerin listesini tutmalıdır.

[Service Bus standart katmanıyla coğrafi çoğaltma][Service Bus Standart Katmanı ile coğrafi çoğaltma] örneği, mesajlaşma varlıklarının etkin çoğaltmasını gösterir.

Not

Etkin çoğaltma yaklaşımı işlem sayısını ikiye katlar, bu nedenle bu yaklaşım daha yüksek maliyete yol açabilir.

Pasif çoğaltma

Hatasız durumda pasif çoğaltma, iki mesajlaşma varlığından yalnızca birini kullanır. İstemci, iletiyi etkin varlığa gönderir. Etkin varlık üzerindeki işlem, etkin varlığı barındıran veri merkezinin kullanılamayabileceğini belirten bir hata koduyla başarısız olursa, istemci yedekleme varlığına iletinin bir kopyasını gönderir. Bu noktada etkin ve yedekleme varlıkları rolleri değiştirir. Gönderen istemci, eski etkin varlığı yeni yedekleme varlığı olarak kabul eder ve eski yedekleme varlığı yeni etkin varlıktır. Her iki gönderme işlemi de başarısız olursa, iki varlığın rolleri değişmeden kalır ve bir hata döndürülür.

İstemci her iki kuyruktan da ileti alır. Alıcının aynı iletinin iki kopyasını alma olasılığı olduğundan, alıcının yinelenen iletileri gizlemesi gerekir. Yinelenenleri etkin çoğaltma için açıklandığı şekilde gizleyebilirsiniz.

Genel olarak pasif çoğaltma, etkin çoğaltmadan daha ekonomiktir çünkü çoğu durumda yalnızca bir işlem gerçekleştirilir. Gecikme süresi, aktarım hızı ve parasal maliyet, çoğaltılmayan senaryoyla aynıdır.

Pasif çoğaltma kullandığınızda, aşağıdaki senaryolarda iletiler iki kez kaybolabilir veya alınabilir:

  • İleti gecikmesi veya kaybı: Gönderenin birincil kuyruğa başarıyla m1 iletisi gönderdiğini ve alıcı m1 almadan önce kuyruğun kullanılamaz duruma geldiğini varsayalım. Gönderen, ikincil kuyruğa sonraki bir m2 iletisi gönderir. Birincil kuyruk geçici olarak kullanılamıyorsa, kuyruk yeniden kullanılabilir duruma geldikten sonra alıcı m1 alır. Bir olağanüstü durum oluştuğunda alıcı hiçbir zaman m1 almayabilir.
  • Yinelenen alma: Gönderenin birincil kuyruğa m iletisi gönderdiğini varsayalım. Service Bus, m'yi başarıyla işler ancak yanıt gönderemiyor. Gönderme işlemi zaman aşımına uğradıktan sonra, gönderen ikincil kuyruğa aynı m kopyasını gönderir. Alıcı birincil kuyruk kullanılamaz duruma gelmeden önce m'nin ilk kopyasını alabilirse, alıcı m'nin her iki kopyasını da yaklaşık olarak aynı anda alır. Alıcı, birincil kuyruk kullanılamaz duruma gelmeden önce m'nin ilk kopyasını alamıyorsa, alıcı başlangıçta yalnızca ikinci m kopyasını alır, ancak birincil kuyruk kullanılabilir duruma geldiğinde ikinci bir m kopyasını alır.

.NET Core ile Azure Mesajlaşma Çoğaltma Görevleri örneği, iletilerin ad alanları arasında çoğaltmasını gösterir.

Sonraki adımlar

Olağanüstü durum kurtarma hakkında daha fazla bilgi edinmek için şu makalelere bakın: