Kendini iyileştirme ve kendini koruma önerileri

Bu Azure İyi Tasarlanmış Çerçeve Güvenilirliği denetim listesi önerisi için geçerlidir:

RE:07 Kendi kendini koruma ve kendini iyileştirici önlemler uygulayarak iş yükünüzün dayanıklılığını ve kurtarılabilirliğini güçlendirin. Bileşen hatalarını ve geçici hataları işlemek için altyapı tabanlı güvenilirlik desenlerini ve yazılım tabanlı tasarım desenlerini kullanarak çözüme yönelik özellikler oluşturun. Çözüm bileşeni hatalarını algılamak ve iş yükü tam veya azaltılmış işlevsellikte çalışmaya devam ederken düzeltme eylemini otomatik olarak başlatmak için sistemde özellikler oluşturun.

İlgili kılavuzlar: Arka plan işleri | Geçici hatalar

Bu kılavuzda, güvenilirliği iyileştirmek için uygulama mimarinizde kendi kendini iyileştirme ve kendini koruma özellikleri oluşturmaya yönelik öneriler açıklanmaktadır.

Kendini koruma özellikleri iş yükünüz için dayanıklılık sağlar. Tam kesinti olasılığını azaltır ve başarısız bileşenler kurtarılırken iş yükünüzün düzeyi düşürülmüş durumda çalışmasına olanak sağlar. Kendi kendini düzeltme özellikleri, farklı hata türlerine yanıt vermek için hata algılama ve otomatik düzeltme eylemleri oluşturarak kapalı kalma süresini önlemenize yardımcı olur.

Bu kılavuzda, kendini korumaya ve kendini iyileştirmeye odaklanan tasarım desenleri açıklanmaktadır. Dayanıklılığını ve kurtarılabilirliğini güçlendirmek için bunları iş yükünüzle birleştirin. Desenleri uygulamazsanız, kaçınılmaz sorunlar ortaya çıktığında uygulamalarınız hata riski altındadır.

Tanımlar

Süre Tanım
Kendi kendini onarma İş yükünüzün, etkilenen bileşenleri kurtararak ve gerekirse yedekli altyapıya yük devrederek sorunları otomatik olarak çözebilmesi.
Kendini koruma İş yükünüzün olası sorunlara karşı dayanıklı olma yeteneği.

Temel tasarım stratejileri

Kendini koruma için tasarım

İş yükünüzü kendi kendini koruma amacıyla tasarlamak için altyapı ve uygulama mimarisi tasarım desenlerini izleyerek iş yükünüzün dayanıklılığını iyileştirin. Tam bir uygulama kesintisi yaşama olasılığını en aza indirmek için tek hata noktalarını ortadan kaldırarak ve hataların patlama yarıçapını en aza indirerek çözümünüzün dayanıklılığını artırın. Bu makaledeki tasarım yaklaşımları, iş yükünüzün dayanıklılığını güçlendirmek ve iş yükünüzün tanımlı güvenilirlik hedeflerini karşılamak için çeşitli seçenekler sağlar.

Altyapı tasarım kılavuzu ve desenleri

Altyapı düzeyinde yedekli mimari tasarımı, kullanılabilirlik alanları veya bölgeler arasında dağıtılan kaynaklar ile kritik akışlarınızı desteklemelidir. Mümkün olduğunda otomatik ölçeklendirmeyi uygulayın. Otomatik ölçeklendirme, iş yükünüzün etkinlikte tahmin edilmeyen ani artışlara karşı korunmasına yardımcı olur ve altyapınızı daha da güçlendirir.

Sorunlar ortaya çıktığında patlama yarıçapını en aza indirmek için Dağıtım Damgaları desenini veya Bulkhead desenini kullanın. Bu desenler, tek bir bileşen kullanılamıyorsa iş yükünüzü kullanılabilir durumda tutmaya yardımcı olur. Otomatik ölçeklendirme stratejinizle birlikte aşağıdaki uygulama tasarım desenlerini kullanın.

  • Dağıtım DamgaLarı düzeni: Birden çok iş yükünü veya kiracıyı barındırmak ve çalıştırmak için çeşitli kaynak grubunu sağlayın, yönetin ve izleyin. Her bir kopya damga veya bazen hizmet birimi, ölçek birimi veya hücre olarak adlandırılır.

  • Bulkhead deseni: Hizmet örneklerini, tüketici yükü ve kullanılabilirlik gereksinimlerine göre havuz olarak bilinen farklı gruplara bölümleyin. Bu tasarım hataları yalıtmaya yardımcı olur ve bir hata sırasında bile bazı tüketiciler için hizmet işlevselliğini sürdürmenize olanak tanır.

Uygulama tasarımı kılavuzu ve desenleri

Uygulama tasarımınızda monolitik uygulamalar oluşturmaktan kaçının. Tek bir bileşende arızalar olduğunda kapsamlı sorun riskini azaltmak için iyi tanımlanmış standartlar aracılığıyla birbirleriyle iletişim kuran gevşek şekilde bağlanmış hizmetleri veya mikro hizmetleri kullanın. Örneğin, tüm zaman uyumsuz iletişimi işlemek için bir hizmet veri yolu kullanımını standartlaştırabilirsiniz. İletişim protokollerinin standartlaştırılması, uygulama tasarımının tutarlı ve basitleştirilmiş olmasını sağlar ve bu da iş yükünün arızalar olduğunda daha güvenilir ve daha kolay giderilmesini sağlar. Pratik olduğunda, kilitlenme harfi gibi zaman aşımı sorunlarını en aza indirmek için zaman uyumlu iletişim yerine bileşenler arasındaki zaman uyumsuz iletişimi tercih edin. Aşağıdaki tasarım desenleri iş yükünüzü düzenlemenize ve bileşenler arasındaki iletişimi iş gereksinimlerinize en uygun şekilde tanımlamanıza yardımcı olur.

  • Büyükelçi deseni: İş mantığınızı ağ kodunuz ve dayanıklılık mantığınızdan ayırın. Bir tüketici hizmeti veya uygulaması adına ağ istekleri gönderen yardımcı hizmetler oluşturur. Yeniden deneme mekanizmaları veya devre kesme uygulamak için bu düzeni kullanabilirsiniz.

  • Zaman Uyumsuz İstek-Yanıt deseni: Arka uç işlemenin zaman uyumsuz olması gerekiyorsa, ancak ön ucun net bir yanıta ihtiyacı varsa arka uç işlemesini ön uç konağından ayırın.

  • Edilgen Önbellek düzeni: Bir veri deposundan isteğe bağlı olarak verileri önbelleğe yükleyin. Bu düzen performansı artırabilir ve önbellekte tutulan veriler ile temel alınan veri deposundaki veriler arasında tutarlılık sağlamaya yardımcı olabilir.

  • Devre Kesici düzeni: Bir işlemin devam etmesine izin verilip verilmeyeceğini veya son hata sayısına bağlı olarak bir özel durum döndüreceğini proaktif olarak belirlemek için devre kesicileri kullanın.

  • Talep Denetimi düzeni: Büyük bir iletiyi talep denetimine ve yüke bölün. Talep denetimini mesajlaşma platformuna gönderin ve yükü bir dış hizmette depolayın. Bu düzen, ileti veri yolunu korurken ve istemcinin bunalmasını veya yavaşlanmasını engellerken büyük iletilerin işlenmesini sağlar.

  • Rakip Tüketiciler düzeni: Aynı mesajlaşma kanalında alınan iletileri işlemek için birden çok eşzamanlı tüketiciyi etkinleştirin. Sistem birden çok iletiyi eşzamanlı olarak işleyebilir ve bu da aktarım hızını iyileştirir, ölçeklenebilirliği ve kullanılabilirliği artırır ve iş yükünü dengeler.

  • İstek zaman aşımlarını yapılandırma: Hizmetlere veya veritabanlarına yapılan çağrılar için istek zaman aşımlarını yapılandırın. Veritabanı bağlantısı zaman aşımları genellikle 30 saniye olarak ayarlanır.

  • Ağ geçidi denetleyicisi düzeni: İstemciler ile uygulama veya hizmet arasındaki istekleri aracılık etmek için ayrılmış bir konak örneği kullanarak uygulamaları ve hizmetleri koruyun. Aracı istekleri doğrular ve temizler ve sistemin saldırı yüzeyini sınırlamak için ek bir güvenlik katmanı sağlayabilir.

  • Kuyruk Tabanlı Yük Dengeleme düzeni: Her birinin zaman uyumsuz olarak çalışabilmesi için aralarında bir kuyruk kullanarak çözümünüzdeki hizmetten görevleri ayırın. Hizmetin başarısız olmasına veya görevin zaman aşımına girmesine neden olabilecek aralıklı ağır yüklerin sorunsuz bir şekilde yüklenmesine yardımcı olmak için görevle çağıran hizmet arasında arabellek olarak bir kuyruk kullanın. Bu düzen, talepteki zirvelerin görev ve hizmet için kullanılabilirlik ve yanıt verme hızı üzerindeki etkisini en aza indirmeye yardımcı olabilir.

  • Azaltma düzeni: Bir uygulamanın örneği, tek bir kiracı veya hizmetin tamamı tarafından kullanılan kaynakların tüketimini denetleyin. Bu düzen, talep artışı kaynaklara aşırı yük getirse bile sistemin çalışmaya devam etmesini ve hizmet düzeyi sözleşmelerini (SLA) karşılamasını sağlar.

  • Geçici Hata İşleme düzeni ve Yeniden deneme düzeni: İş yükünüzde dayanıklılık sağlamak için geçici hataları işlemeye yönelik bir strateji uygulayın. Geçici hatalar, bulut ortamlarında normal ve beklenen durumlardır. Geçici hataların tipik nedenleri arasında anlık ağ bağlantısı kaybı, bırakılan veritabanı bağlantısı veya hizmet meşgul olduğunda zaman aşımı sayılabilir. Yeniden deneme stratejisi geliştirme hakkında daha fazla bilgi için bu serideki geçici hata işleme kılavuzuna bakın.

Arka plan işleri

Arka plan işleri, görevleri kullanıcı arabiriminden (UI) ayırma yoluyla sistemin güvenilirliğini artırmanın etkili bir yoludur. Kullanıcı girişi veya geri bildirim gerektirmeyen ve kullanıcı arabirimi yanıt hızını etkilemeyen bir görevi arka plan işi olarak uygulayın.

Arka plan işlerinin yaygın örnekleri şunlardır:

  • Karmaşık hesaplamalar yapma veya yapısal modelleri analiz etme gibi yoğun CPU kullanan işler.
  • Birden çok depolama işlemi çalıştırma veya büyük dosyaların dizinini oluşturma gibi G/Ç yoğunluklu işler.
  • Verileri düzenli olarak güncelleştirme veya belirli bir zamanda görevleri işleme gibi toplu işler.
  • Siparişi tamamlama veya hizmet ve sistemleri sağlama gibi uzun süre çalışan iş akışları.

Daha fazla bilgi için bkz . Arka plan işleri için öneriler.

Kendi kendini iyileştirecek şekilde tasarlama

İş yükünüzü kendi kendine düzeltme için tasarlamak üzere otomatik yanıtların tetiklenip kritik akışların düzgün bir şekilde kurtarılması için hata algılamayı uygulayın. Hatanın doğası ve kurtarmanın başarısı hakkında operasyonel içgörüler sağlamak için günlüğe kaydetmeyi etkinleştirin. Kritik bir akış için kendi kendini düzeltmeye yönelik yaklaşımlar, bu akış için tanımlanan güvenilirlik hedeflerine ve akışın bileşenlerine ve bağımlılıklarına bağlıdır.

Altyapı tasarım kılavuzu

Altyapı düzeyinde kritik akışlarınız, onu destekleyen bileşenler için otomatik yük devretmenin etkinleştirildiği yedekli bir mimari tasarımıyla desteklenmelidir. Aşağıdaki hizmet türleri için otomatik yük devretmeyi etkinleştirebilirsiniz:

  • İşlem kaynakları: Azure Sanal Makine Ölçek Kümeleri ve hizmet olarak platform (PaaS) işlem hizmetlerinin çoğu otomatik yük devretme için yapılandırılabilir.

  • Veritabanları: İlişkisel veritabanları Azure SQL yük devretme kümeleri, Always On kullanılabilirlik grupları veya PaaS hizmetleriyle yerleşik özellikler gibi çözümlerle otomatik yük devretme için yapılandırılabilir. NoSQL veritabanları, PaaS hizmetleri için benzer kümeleme özelliklerine ve yerleşik özelliklere sahiptir.

  • Depolama: Otomatik yük devretme ile yedekli depolama seçeneklerini kullanın.

Uygulama tasarımı kılavuzu ve desenleri

  • Kötü aktörleri engelleme: Bir istemciyi kısıtlarsanız, bu istemcinin kötü amaçlı davrandığı anlamına gelmez. Bu, istemcinin hizmet kotasını aştığı anlamına gelebilir. Ancak bir istemci sürekli olarak kotasını aşarsa veya başka bir şekilde kötü davranırsa, bunları engelleyebilirsiniz. İstemcinin engelinin kaldırılma isteğinde bulunarak bant dışı bir işlem tanımlama.

  • Devre Kesici düzeni: Yeniden deneme mekanizmanız başlatıldıktan sonra bir hata devam ederse, artan bir çağrı kapsamı nedeniyle oluşan art arda hataların riskiyle karşı karşıya kalırsınız. Yeniden deneme mekanizmasıyla çalışacak şekilde tasarlanmış bir devre kesici, uygulamanın başarısız olma olasılığı olan bir işlemi tekrar tekrar çalıştırmasını engelleyerek hata basamaklama riskini sınırlar.

  • Telafi İşlemi düzeni: Bir dizi adımdan oluşan nihai tutarlı bir işlem kullanıyorsanız Telafi İşlemi düzenini uygulayın. Adımlardan biri veya daha fazlası başarısız olursa, adımların gerçekleştirdiği çalışmayı geri almak için bu düzeni kullanabilirsiniz.

  • Düzgün bir şekilde düşürme: Bazen bir sorunu çözemezsiniz, ancak daha az işlevsellik sağlayabilirsiniz. Bir kitap kataloğu gösteren bir uygulama düşünün. Uygulama kitap kapağına ait küçük resmi alamıyorsa bunun yerine yer tutucu bir resim gösterebilir. Uygulama için bazı alt sistemler kritik olmayabilir. Örneğin, bir e-ticaret web sitesi için ürün önerilerini göstermek büyük olasılıkla siparişleri işlemekten daha az kritik öneme sahiptir. Düzgün performans düşüşü, otomatik yük devretme işlemlerini de içerebilir. Birincil örnekle ilgili bir sorun nedeniyle veritabanı otomatik olarak çoğaltmaya yük devredildiğinde, performans kısa bir süre için düşer.

  • Öncü Seçimi düzeni: Bir görevi koordine etmeniz gerektiğinde, bir koordinatör seçmek için öncü seçimi kullanın, böylece tek bir koordinatör tek bir hata noktası değildir. Düzenleyici başarısız olursa, yeni bir düzenleyici seçilir. Sıfırdan bir öncü seçim algoritması uygulamak yerine ZooKeeper gibi kullanıma açık bir çözüm düşünün.

  • Test desenleri: Standart test yordamlarınızın bir parçası olarak uyguladığınız desenlerin testini ekleyin.

  • Uzun süre çalışan işlemler için denetim noktalarını kullanın: Uzun süre çalışan bir işlem başarısız olursa denetim noktaları dayanıklılık sağlayabilir. İşlem yeniden başlatıldığında , örneğin başka bir sanal makine tarafından alınırsa, son denetim noktasından devam edebilir. Görevle ilgili durum bilgilerini düzenli aralıklarla kaydeden bir mekanizma uygulamayı düşünün. Bu durumu, görevi çalıştıran işlemin herhangi bir örneği tarafından erişilebilen dayanıklı depolama alanına kaydedin. İşlem kapatılırsa, gerçekleştirdiği çalışma başka bir örnek kullanılarak son denetim noktasından sürdürülebilir. NServiceBus ve MassTransit gibi bu işlevselliği sağlayan kitaplıklar vardır. Aralıkların Azure Service Bus'taki kuyruklardan gelen iletilerin işlenmesiyle hizalandığı durumu saydam bir şekilde kalıcı hale getirir.

Otomatik kendi kendini düzeltme eylemleri

Kendi kendini düzeltmeye yönelik bir diğer yaklaşım, önceden belirlenmiş sistem durumu değişiklikleri algılandığında izleme çözümünüz tarafından tetiklenen otomatik eylemlerin kullanılmasıdır. Örneğin, izlemeniz bir web uygulamasının isteklere yanıt vermediğini algılarsa, uygulama hizmetini yeniden başlatmak için PowerShell betiği aracılığıyla otomasyon oluşturabilirsiniz. Ekibinizin beceri kümesine ve tercih edilen geliştirme teknolojilerine bağlı olarak, daha karmaşık otomasyon eylemleri oluşturmak için bir web kancası veya işlevi kullanın. Veritabanı azaltmaya yanıt vermek için işlev kullanma örneği için olay tabanlı bulut otomasyonu başvuru mimarisine bakın. Otomatik eylemleri kullanmak, hızlı bir şekilde kurtarmanıza ve insan müdahalesinin gerekliliğini en aza indirmenize yardımcı olabilir.

Azure kolaylaştırma

Çoğu Azure hizmeti ve istemci SDK'sı bir yeniden deneme mekanizması içerir. Ancak her hizmetin farklı özellikleri ve gereksinimleri olduğundan, her yeniden deneme mekanizması belirli bir hizmete ayarlanır. Daha fazla bilgi için bkz . Geçici hata işleme önerileri.

E-posta, ses veya SMS gibi bildirimler için Azure İzleyici eylem gruplarını kullanın ve otomatik eylemleri tetikleyin. Bir hatayla ilgili bildirim aldığınızda otomatik düzeltme eylemi gerçekleştirmek için bir Azure Otomasyonu runbook'u, Azure Event Hubs'ı, Azure işlevini, mantıksal uygulamayı veya web kancasını tetikleyin.

Dikkat edilmesi gereken noktalar

Her desen için dikkat edilmesi gerekenler hakkında bilgi sahibi olun. Uygulamadan önce desenin iş yükünüz ve iş gereksinimleriniz için uygun olduğundan emin olun.

Örnek

Bazı desenlerin kullanım örnekleri için bkz . .NET için güvenilir web uygulaması deseni. Bir başvuru uygulaması dağıtmak için bu adımları izleyin.

Güvenilirlik denetim listesi

Öneriler kümesinin tamamına bakın.