Kendini iyileştirme ve kendini koruma için mimari stratejileri

Bu Azure Well-Architected Framework Güvenilirlik 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ı güçlendirin. İş yükünüzün olaylar sırasında işlevsel kalmasına ve olaylardan kurtulmasına yardımcı olmak için yerleşik özellikleri ve iyi oluşturulmuş bulut desenlerini kullanın.

Bu kılavuzda, güvenilirliği iyileştirmek için uygulama mimarinizde kendini koruma ve kendini iyileştirme ö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 hatalar oluştuğunda iş yükünüzün normal veya düşük bir durumda çalışmasına olanak sağlar. Kendini onarma yetenekleri, kesinti süresini önlemenize yardımcı olmak için hata algılama ve hatalara yanıt vermek üzere otomatik düzeltme eylemleri oluşturarak sistemi güçlendirir.

Tanımlar

Süre Definition
Kendi kendini iyileştirme İş 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.

Yedeklilik tasarımı

İş yükünüzü arızalara karşı korumanın en etkili stratejilerinden biri, tüm bileşenlerinde yedeklilik oluşturmak ve tek hata noktalarından kaçınmaktır. Bileşenleri veya iş yükünün tamamını yedekli kaynaklara devredebilmek, sisteminizdeki çoğu hatayı işlemek için verimli bir yol sağlar.

Farklı düzeylerde yedeklilik oluşturun, işlem, ağ ve depolama gibi yedekli altyapı bileşenlerini göz önünde bulundurun ve çözümünüzün birden çok örneğini dağıtmayı göz önünde bulundurun. İş gereksinimlerinize bağlı olarak, tek bir bölgede veya bölgeler arasında yedeklilik oluşturabilirsiniz. Kurtarma gereksinimlerinizi karşılamak için etkin-etkin mi yoksa etkin-pasif bir tasarıma mı ihtiyacınız olduğunu da belirleyebilirsiniz. Daha fazla bilgi için, yedeklilik tasarlamaya yönelik mimari stratejiler ve kullanılabilirlik alanları ve bölgelerini kullanmaya yönelik mimari stratejiler bölümüne bakınız.

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, kritik akışlarınızı desteklemek için yedekli bir mimari tasarımı kullanın. Kaynakları kullanılabilirlik alanları veya bölgeler arasında dağıtma. 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 örüntüler, bileşenlerden biri kullanılamaz duruma gelse bile iş yükünüzün kullanılabilirliğini korumaya yardımcı olur. Otomatik ölçeklendirme stratejinizle birlikte aşağıdaki uygulama tasarım desenlerini kullanın.

  • Dağıtım Damgaları deseni: Birden çok iş yükünü veya kiracıyı barındırmak ve çalıştırmak için çeşitli kaynak gruplarını sağlama, yönetme ve izleme. 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 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 bağlı hizmetleri veya mikro hizmetleri kullanın. Örneğin, tüm zaman uyumsuz iletişimi işlemek için servis 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 iş yükünün arızalar olduğunda daha güvenilir ve daha kolay giderilmesini sağlar. Pratik olduğunda, zaman aşımı sorunlarını en aza indirmek için senkron iletişim yerine bileşenler arasındaki asenkron iletişimi tercih edin.

Tasarım standartlarınızı geliştirmenize ve mimarinin özelliklerini basitleştirmenize yardımcı olması için endüstride kanıtlanmış desenleri kullanın. Güvenilirliği desteklemeye yardımcı olabilecek tasarım desenleri , Güvenilirlik desenleri makalesinde bulunabilir.

Kendi kendini iyileştirecek şekilde tasarlama

Otomatik yanıtların tetiklenip kritik akışların düzgün bir şekilde kurtarılması için iş yükünüzü otomatik onarıma uygun tasarlamak üzere hata algılamayı entegre edin. 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ımladığınız 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, yedekli mimari tasarımıyla kritik akışlarınızı destekleyin. Bunu destekleyen bileşenler için otomatik yük devretmeyi etkinleştirin. 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

Güvenilirliği destekleyen tasarım desenlerini kullanmaya ek olarak, kendi kendini iyileştirici mekanizmalar geliştirmenize yardımcı olacak şu stratejileri göz önünde bulundurun:

  • 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ğlar. başka bir sanal makine işlemi aldığında olduğu gibi işlem yeniden başlatıldığında, 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ğinin erişebileceği dayanıklı depolama alanına kaydedin. İşlem kapatılırsa, başka bir örnek çalışmayı son denetim noktasından sürdürebilir. NServiceBus ve MassTransit gibi kitaplıklar bu işlevselliği sağlar. Durumu, aralıkların Azure Service Bus’taki kuyruklardan gelen iletilerin işlenmesiyle uyumlu olduğu şekilde, şeffaf bir biçimde kalıcı olarak saklarlar.

  • Otomatik kendi kendini düzeltme eylemlerini uygulama: İzleme çözümünüzün önceden belirlenmiş sistem durumu değişikliklerini algıladığında tetiklediğini otomatik eylemleri kullanın.

    Ö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. Otomatik eylemleri kullanmak, hızlı bir şekilde kurtarmanıza ve insan müdahalesinin gerekliliğini en aza indirmenize yardımcı olabilir.

    Teknolojiye özgü kendi kendini iyileştiren desenleri ve özellikleri kullanın. Örneğin, bir kuyruktaki bozuk bir ileti tekrar tekrar işlenip potansiyel olarak gelecekteki ileti işlemlerini engelleyebilir. Bunun yerine, teslim edilemeyen ileti kuyruğu kullanma gibi düzeltme yaklaşımları tasarlayın. Sorunlu iletileri kuyruğa taşımayı otomatikleştirirsiniz, ancak öğelerin işlenmesi genellikle el ile değerlendirmeyi ve ardından senaryoya özgü bir düzeltme adımını içerir.

Düzgün bir düşüş modu uygulama

Kendini koruma ve kendini iyileştirme mekanizmalarınıza rağmen, bir veya daha fazla bileşenin bir süre kullanılamaz hale geldiği ölçüde arızalandığı durumlarla karşılaşabilirsiniz. Bu gibi durumlarda, iş yükünüzün, işlerin azaltılmış bir durumda devam etmesine olanak tanıyacak yeterli işlevselliği koruyabilmesi idealdir. Bu olasılığı sağlamak için düzgün bir düşüş modu tasarlayıp uygulayın. Bu mod, başarısız bileşenlere tepki olarak etkinleştirilen ayrı bir iş akışıdır. Tasarım ve uygulamayla ilgili dikkat edilmesi gerekenler şunlardır:

  • Hata algılama ve otomatik başlatma: İzleme ve uyarı sistemleriniz, düzeyi düşürülmüş ve başarısız bileşenleri algılamalıdır. Bu sinyalleri kullanarak düzgün performans düşüşü moduna geçmenin ne zaman gerekli olduğunu belirleyen bir iş akışı oluşturun. Daha sonra iş akışı, etkilenen bileşenlere ve bileşenlerden gelen çağrıları otomatik olarak alternatif bileşenlere yönlendirmelidir veya diğer benzer eylemleri gerçekleştirmelidir.
  • Düzeyi düşürülmüş bir kullanıcı deneyimi uygulayın: Kullanıcılara, hangi işlevlerin kaldığını ve nelerin değiştiğini bilmelerini sağlamak için düzgün bir düşüş modunuzda bir bildirim mekanizması ekleyin. Bu bildirim genellikle bir sepete öğe eklerken açılan pencere gibi iş yükünün farklı işlevlerine bağlı iletilere yansıtılır.
  • İş yükünüzün temel işlevlerini tamamlamak için alternatif yollar oluşturun: İş yükünüzün kritik akışlarını düşünün ve çekirdek bileşenler kullanılamadığında bu akışları nasıl koruyabileceğinizi belirleyin. Örneğin, veritabanı kapalıysa uygulama önbelleğe alınmış verileri kullanarak salt okunur moda geçebilir. Bu örneği daha fazla göstermek için, bir ödeme ağ geçidinin devre dışı olması durumunda önbelleğe alınmış verilerin kullanılması kullanıcıların sepetini kaydetmesine ve satın alma işlemini daha sonra tamamlamasına olanak tanıyabilir.

Geçici hataları işlemek için mekanizmalar uygulama

Ağ zaman aşımları gibi geçici hatalar, bulut iş yükleri için yaygın bir sorundur. İş yükünüzü üretim ortamında çalıştırırken bunları işlemek için mekanizmaların bulunması kapalı kalma süresini ve sorun giderme çalışmalarını en aza indirgeyebilir. İşlemi yeniden denemeden önce yeterli süre verildiğinde geçici hata nedeniyle başarısız olan işlemlerin çoğu başarılı olduğundan, geçici hatalarla başa çıkmak için en yaygın yaklaşım yeniden deneme mekanizmasını kullanmaktır. Yeniden deneme stratejinizi tasarlarken aşağıdakileri göz önünde bulundurun:

Önerilerin ve önemli noktaların tam gözden geçirilmesi için Geçici hatalar tasarım kılavuzuna bakın.

Arka plan işlerini uygulama

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şlerine yaygın örnekler ş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ı.

Ayrıntılı yönergeler için bkz. arka plan işleri tasarım kılavuzu.

Azure hizmetlerinin kolaylaştırılması

Ç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 hata konusunda bilgilendirildiğinizde, otomatik bir iyileştirme eylemi gerçekleştirmek için Azure Otomasyonu runbook'unu, Azure Event Hubs'ı, bir Azure İşlevini, Logic App'i veya webhook'u tetikleyin.

Example

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

Güvenilirlik denetim listesi

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