Kendini iyileştirme ve kendini koruma önerileri

Bu Azure Well-Architected Framework Güvenilirlik denetim listesi önerisi için geçerlidir:

RE:07 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ümde özellikler oluşturun. İş yükü tam veya azaltılmış işlevsellikle çalışmaya devam ederken çözüm bileşeni hatalarını algılamak ve otomatik olarak düzeltici eylem 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 onarma 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üzeltici eylemler 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 riskiyle karşınıza çıkar.

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 çözebilme özelliği.
Kendini koruma İş yükünüzün olası sorunlara karşı dayanıklı olma özelliği.

Temel tasarım stratejileri

Kendini koruma kılavuzu

İş yükünüzü 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 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çeklendirme 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 oluştuğunda 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 kopyaya damga veya bazen hizmet birimi, ölçek birimi veya hücre adı verilir.

  • 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 birbiriyle iletişim kuran gevşek bağlı hizmetleri veya mikro hizmetleri kullanın. Örneğin, tüm zaman uyumsuz iletişimi işlemek için bir hizmet veri yolunun 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 arızalar olduğunda iş yükünün daha güvenilir ve daha kolay giderilmesini sağlar. Pratik olduğunda, devre dışı mektuplama 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ş gereksinimlerinizi en iyi şekilde tanımlamanıza yardımcı olur.

  • Elçi deseni: İş mantığınızı ağ kodunuzdan 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 Request-Reply 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ı 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ığın korunmasına 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 önceden 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şlatılmasını engellerken büyük iletilerin işlenmesini sağlar.

  • Rakip Tüketiciler düzeni: Birden çok eşzamanlı tüketicinin aynı mesajlaşma kanalında alınan iletileri işlemesini sağlayın. 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 geliştirir 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 ve uygulama veya hizmet arasında istekler arasında aracılık yapmak 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 görevleri çözümünüzdeki hizmetten 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 kuyruk kullanın. Bu düzen, talepteki zirvelerin görev ve hizmet için kullanılabilirlik ve yanıt hızı üzerindeki etkisini en aza indirmeye yardımcı olabilir.

  • Azaltma düzeni: Bir uygulama örneği, tek bir kiracı veya hizmetin tamamı tarafından kullanılan kaynakların tüketimini denetleyin. Bu düzen, talepteki 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 bir 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) ayrıştırarak 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.
  • Bir 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 düzeltme kılavuzu

İş yükünüzü kendi kendine düzeltme için tasarlamak için, otomatik yanıtların tetiklenebilmesi ve 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ı tarafından 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 engeli kaldırılmayı istemesi için bant dışı bir işlem tanımlayın.

  • Devre Kesici düzeni: Yeniden deneme mekanizmanız başlatıldıktan sonra bir hata devam ederse, artan çağrı kapsamı nedeniyle art arda hatalarla sonuçlanma 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ırmayı denemesini engelleyerek art arda hata riskini sınırlar.

  • Telafi İşlemi düzeni: Bir dizi adımdan oluşan ve sonunda 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 önemlidir. 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 kısa bir süre için performans düşer.

  • Öncü Seçimi düzeni: Bir görevi koordine etmeniz gerektiğinde, koordinatörlerden birinin tek bir hata noktası olmaması için bir koordinatör seçmek için öncü seçimi kullanın. Düzenleyici başarısız olursa, yeni bir düzenleyici seçilir. Sıfırdan ö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ınmışsa, son denetim noktasından devam edebilir. Görevle ilgili durum bilgilerini düzenli aralıklarla kaydeden bir mekanizma uygulamayı göz önünde bulundurun. 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. Bunlar, aralıkların Azure Service Bus'daki kuyruklardan gelen iletilerin işlenmesiyle hizalandığı durumu saydam bir şekilde kalıcı hale getirir.

Otomatik kendi kendini düzeltme eylemleri

Kendi kendini iyileştirmeye 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 bir 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şlev 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 göre ayarlandığı için farklılık gösterir. Daha fazla bilgi için bkz. Geçici hata işleme önerileri.

E-posta, ses veya SMS gibi bildirimler ve otomatik eylemleri tetikleme amacıyla Azure İzleyici eylem gruplarını kullanın. Hata bildirimi aldığınızda otomatik düzeltme eylemi gerçekleştirmek için Azure Otomasyonu bir runbook, Azure Event Hubs, Azure işlevi, mantıksal uygulama veya web kancası tetikleyin.

Dikkat edilmesi gerekenler

Her desen için dikkat edilmesi gerekenler hakkında bilgi sahibi olursunuz. 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ı düzeni. Başvuru uygulamasını dağıtmak için bu adımları izleyin.

Güvenilirlik denetim listesi

Önerilerin tamamına bakın.