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. Veri işleme kaynaklarının felaketlere karşı dayanıklılık, birçok kuruluş için ve hatta bazı durumlarda sektör düzenlemeleri için gerekli olan bir gereksinimdir. 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.
Azure Service Bus zaten tek tek makinelerin ve hatta tam rafların yıkıcı hata riskini bir veri merkezindeki birden çok hata etki alanına yayılan kümeler arasında yayar ve hizmetin garanti edilen hizmet düzeylerinde çalışmaya devam etmesi ve bu tür hatalar oluştuğunda genellikle fark edilebilir kesintiler olmadan şeffaf hata algılama ve yük devretme mekanizmaları uygular.
Ayrıca, kesinti riski fiziksel olarak ayrılmış üç tesise (kullanılabilirlik alanları) daha da yayılır ve hizmet, bir veri merkezinin tam ve yıkıcı kaybıyla anında başa çıkmak için yeterli kapasite rezervine sahiptir. Kullanılabilirlik alanı desteğiyle birlikte bir hata etki alanındaki tüm etkin Azure Service Bus küme modeli, ciddi donanım hatalarına karşı dayanıklılık ve hatta tüm veri merkezi tesislerinin yıkıcı kaybı açısından şirket içi ileti aracısı ürünlerinden daha üstündür. Yine de, bu önlemlerin bile yeterince savunamayabileceği yaygın fiziksel yıkımla ilgili ciddi durumlar olabilir.
Service Bus Coğrafi Olağanüstü Durum Kurtarma ve Coğrafi Çoğaltma özellikleri, bu büyüklükteki bir olağanüstü durumdan kurtarmayı ve başarısız bir Azure bölgesini temelli olarak ve uygulama yapılandırmalarınızı değiştirmek zorunda kalmadan bırakmanızı kolaylaştıracak şekilde tasarlanmıştır.
Kesintiler ve olağanüstü durumlar
"Kesintiler" ile "olağanüstü durumlar" arasındaki ayrımı not etmek önemlidir.
Kesinti, Azure Service Bus'ın geçici olarak kullanılamamasıdır ve mesajlaşma deposu ve hatta veri merkezinin tamamı gibi hizmetin bazı bileşenlerini etkileyebilir. Ancak 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. Bazı kesintiler geçici veya ağ sorunları nedeniyle yalnızca kısa bağlantı kayıplarıdır.
Olağanüstü durum , Service Bus kümesinin, Azure bölgesinin veya veri merkezinin kalıcı veya uzun süreli kaybı olarak tanımlanır. Bölge veya veri merkezi yeniden kullanılabilir duruma gelebilir veya kullanılamayabilir ya da saatler ya da günler boyunca çalışmayabilir. Bu tür afetlere örnek olarak yangın, sel veya deprem verilebilir. Kalıcı hale gelen olağanüstü durum bazı iletilerin, olayların veya diğer verilerin kaybolmasına neden olabilir. Ancak çoğu durumda veri kaybı olmaması gerekir ve veri merkezi yeniden açıldığında iletiler kurtarılabilir.
Kesintilere ve olağanüstü durumlara karşı koruma
Premium katmanı için Azure Service Bus'ta Coğrafi Olağanüstü Durum Kurtarma sağlayan iki özellik vardır. İlk olarak, meta verilerin (varlıklar, yapılandırma, özellikler) çoğaltılmasını sağlayan Coğrafi Olağanüstü Durum Kurtarma (Meta Veri DR) vardır. İkincisi, şu anda genel önizleme aşamasında olan Ve hem meta verilerin hem de verilerin (ileti verileri ve ileti özelliği/ durum değişiklikleri) çoğaltılması sağlayan Coğrafi Çoğaltma vardır. Coğrafi Olağanüstü Durum Kurtarma özelliğinin hiçbiri Kullanılabilirlik Alanları ile karıştırılmamalıdır. Meta Veri DR veya Coğrafi çoğaltma olmasına bakılmaksızın, her iki coğrafi grafik kurtarma özelliği de Doğu ABD ve Batı ABD gibi Azure bölgeleri arasında dayanıklılık sağlar.
Kullanılabilirlik Alanları tüm Service Bus katmanlarında kullanılabilir ve destek, Doğu ABD gibi belirli bir coğrafi bölgede dayanıklılık sağlar. Microsoft Azure'da olağanüstü durum kurtarma hakkında ayrıntılı bilgi için bu makaleye bakın.
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 ve Coğrafi Çoğaltma aracılığıyla) doğrudan Azure Service Bus premium katmanında yerleşik olarak bulunur.
Coğrafi Olağanüstü Durum Kurtarma seçenekleri
Coğrafi Olağanüstü Durum Kurtarma
Service Bus premium katmanı, ad alanı düzeyinde Coğrafi Olağanüstü Durum Kurtarma'yı destekler. Daha fazla bilgi için bkz . Azure Service Bus Coğrafi Olağanüstü Durum Kurtarma. Yalnızca Premium katman için kullanılabilen Coğrafi 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.
Coğrafi Çoğaltma
Service Bus premium katmanı, ad alanı düzeyinde Coğrafi Çoğaltmayı da destekler. Daha fazla bilgi için bkz . Azure Service Bus Coğrafi Çoğaltma (Genel Önizleme). Yalnızca Premium katmanı için kullanılabilen ve şu anda genel önizleme aşamasında olan Coğrafi Çoğaltma özelliği meta veri ve veri olağanüstü durum kurtarma uygular ve birincil ve ikincil bölgelere dayanır. Coğrafi Çoğaltma ile varlıklar için hem meta veriler hem de veriler birincil ve ikincil bölgeler arasında çoğaltılır.
Üst düzey özellik farklılıkları
Coğrafi Olağanüstü Durum Kurtarma (Meta Veri DR) özelliği, bir ad alanının meta verilerini birincil ad alanından ikincil ad alanına çoğaltır. Yalnızca ikincil bölgeye tek seferlik yük devretmeyi destekler. Müşteri tarafından başlatılan yük devretme sırasında ad alanının diğer adı ikincil ad alanına yeniden yönlendirilir ve eşleştirme bozulur. Meta veriler dışında hiçbir veri çoğaltılır veya RBAC atamaları çoğaltılır.
Coğrafi Çoğaltma özelliği, meta verileri ve tüm verileri birincil bölgeden bir veya daha fazla ikincil bölgeye çoğaltır. Müşteri tarafından yük devretme gerçekleştirildiğinde, seçilen ikincil birincil, önceki birincil ise ikincil olur. Kullanıcılar, istendiğinde özgün birincil birincile yeniden yük devretme gerçekleştirebilir.
Kullanılabilirlik alanları
Tüm Service Bus katmanları 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
Kullanılabilirlik alanları desteği yalnızca kullanılabilirlik alanlarının bulunduğu Azure bölgelerinde kullanılabilir.
Bir ad alanı oluşturduğunuzda, kullanılabilirlik alanları (seçili bölgede varsa) desteği ad alanı için otomatik olarak etkinleştirilir. 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.
Not
Daha önce kullanılabilirlik alanlarını etkinleştirmek için özelliğinin zoneRedundant
true
olarak ayarlanması gerekiyordu, ancak bu davranış varsayılan olarak kullanılabilirlik alanlarını etkinleştirmek için değişti. Mevcut ad alanları mümkün olduğunda kullanılabilirlik alanlarına geçiriliyor ve özellik zoneRedundant
kullanım dışı bırakılıyor. Kullanılabilirlik alanları etkinleştirildiğinde bile özelliği zoneRedundant
olarak false
gösterilmeye devam edebilir.
Geçirilmekte olan mevcut ad alanları:
- Şu anda kullanılabilirlik alanları etkin değildir.
- Bölge kullanılabilirlik alanlarını destekler.
- Bölge yeterli kullanılabilirlik alanı kapasitesine sahip.
Olağanüstü durumlara karşı koruma - standart katman
Service Bus Standart katmanıyla olağanüstü durumlara 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.
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: