Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tavsiye
Bu içerik, .NET Docs veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için Bulut Yerel .NET Uygulamaları Tasarlama adlı e-Kitap'tan bir alıntıdır.
Azure eKitap kapak küçük resmi için Buluta Özel .NET uygulamaları.
İlk savunma hattı, uygulama dayanıklılığıdır.
Kendi dayanıklılık çerçevenizi yazmak için çok zaman ayırabilirsiniz ancak bu tür ürünler zaten mevcuttur.
Polly, geliştiricilerin dayanıklılık ilkelerini akıcı ve iş parçacığı açısından güvenli bir şekilde ifade etmelerine olanak tanıyan, kapsamlı bir .NET dayanıklılık ve geçici hata yönetimi kitaplığıdır. Polly, .NET Framework veya .NET 7 ile oluşturulan uygulamaları hedefler. Aşağıdaki tabloda, Polly Kitaplığı'nda bulunan adlı policiesdayanıklılık özellikleri açıklanmaktadır. Bunlar tek tek uygulanabilir veya birlikte gruplandırılabilir.
| Politika | Deneyim |
|---|---|
| Yeniden Dene | Belirlenen işlemlerde yeniden deneme işlemlerini yapılandırır. |
| Devre Kesici | Hataların yapılandırılmış eşiği aştığı önceden tanımlanmış bir dönem için istenen işlemleri engeller |
| Zaman Aşımı | Çağıranın yanıt bekleyebileceği sürenin sınırını yerleştirir. |
| Bölme | Başarısız çağrıların bir kaynağı aşırı yükleyip işlevsiz hale getirmesini önlemek için eylemleri sabit boyutlu kaynak havuzuyla kısıtlar. |
| Önbellek | Yanıtları otomatik olarak depolar. |
| Geri dönüş | Bir hata üzerine yapılandırılmış davranışı tanımlar. |
Önceki şekilde, ister dış istemciden ister arka uç hizmetinden gelen istek iletileri için dayanıklılık ilkelerinin nasıl uygulandığına dikkat edin. Amaç, kısa süre kullanılamayabilecek bir hizmet isteğini telafi etmektir. Bu kısa süreli kesintiler genellikle aşağıdaki tabloda gösterilen HTTP durum kodlarıyla kendini gösterir.
| HTTP Durum Kodu | Nedeni |
|---|---|
| 404 | Bulunamadı |
| 408 | İstek zamanaşımı |
| 429 | Çok fazla istek var (büyük olasılıkla kısıtlanmışsınızdır) |
| 502 | Hatalı ağ geçidi |
| 503 | Hizmet kullanılamıyor |
| 504 | Ağ geçidi zaman aşımı hatası |
Soru: 403 - Yasak http durum kodunu yeniden dener misiniz? Hayır. Burada sistem düzgün çalışıyor, ancak çağıranı istenen işlemi gerçekleştirme yetkisine sahip olmadığını bildiriyor. Yalnızca hatalardan kaynaklanan işlemleri yeniden denemek için dikkatli olunmalıdır.
Bölüm 1'de önerilen şekilde, buluta özel uygulamalar oluşturmak için Microsoft geliştiricileri .NET platformunu hedeflemelidir. Sürüm 2.1, URL tabanlı kaynaklarla etkileşime geçilmesi için HTTP İstemci örnekleri oluşturmaya yönelik HTTPClientFactory kitaplığını kullanıma sunulmuştur. Özgün HTTPClient sınıfının yerini alan fabrika sınıfı, biri Polly dayanıklılık kitaplığıyla sıkı tümleştirme olan birçok gelişmiş özelliği destekler. Bununla, kısmi hataları ve bağlantı sorunlarını işlemek için uygulama Başlangıç sınıfında dayanıklılık ilkelerini kolayca tanımlayabilirsiniz.
Şimdi yeniden deneme ve devre kesici desenlerini ele alalım.
Yeniden deneme düzeni
Dağıtılmış buluta özel bir ortamda, hizmetlere ve bulut kaynaklarına yapılan çağrılar, genellikle kısa bir süre sonra kendilerini düzelten geçici (kısa süreli) hatalar nedeniyle başarısız olabilir. Yeniden deneme stratejisi uygulamak, buluta özel bir hizmetin bu senaryoları azaltmasına yardımcı olur.
Yeniden Deneme düzeni, hizmetin başarısız istek işlemini birkaç kez yeniden denemesine olanak tanır ve bekleme süresini katlanarak artırır. Şekil 6-2'de yeniden deneme işlemi gösterilmektedir.
Şekil 6-2. Yeniden deneme deseni çalışır durumda
Önceki şekilde, bir istek işlemi için tekrar deneme deseni uygulanmıştır. İki saniyede başlayan bir geri alma aralığı (bekleme süresi) ile başarısız olmadan önce en fazla dört yeniden denemeye izin verecek şekilde yapılandırılır ve bu da sonraki her deneme için katlanarak iki katına çıkar.
- İlk çağırma başarısız olur ve 500 http durum kodunu döndürür. Uygulama iki saniye bekler ve çağrıyı yeniden dener.
- İkinci çağrı da başarısız olur ve 500 http durum kodunu döndürür. Uygulama artık geri alma aralığını dört saniye olarak ikiye katlar ve çağrıyı yeniden dener.
- Son olarak, üçüncü çağrı başarılı olur.
- Bu senaryoda, yeniden deneme işlemi, çağrı başarısız olmadan önce geri çekilme süresini iki katına çıkararak en fazla dört denemede bulunacaktır.
- 4. yeniden deneme girişimi başarısız olsaydı, sorunu düzgün bir şekilde işlemek için bir yedek politika çağrılacaktı.
Hizmet süresinin kendi kendine düzeltilmesine izin vermek için çağrıyı yeniden denemeden önce geri alma süresini artırmak önemlidir. Yeterli düzeltme süresine izin vermek için üstel olarak artan bir geri alma (her yeniden denemede süreyi iki katına çıkarma) uygulamak en iyi yöntemdir.
Devre kesici deseni
Yeniden deneme düzeni kısmi bir hatada dolanık bir isteğin kurtarılmasında yardımcı olsa da, hataların çözülmesi daha uzun süreler gerektirecek öngörülemeyen olayların neden olabileceği durumlar vardır. Bu hataların önem derecesi kısmi bağlantı kaybıyla bir hizmetin tamamen çökmesi arasında değişebilir. Bu gibi durumlarda, bir uygulamanın başarılı olma olasılığı düşük bir işlemi sürekli olarak yeniden denemesi anlamsızdır.
İşleri daha da kötü hale getirmek için, yanıt vermeyen bir hizmette sürekli yeniden deneme işlemlerini yürütmek, sizi, hizmetinizi bellek, iş parçacıkları ve veritabanı bağlantıları gibi sürekli çağrılarla dolup taşan ve sistemin aynı kaynakları kullanan ilişkisiz bölümlerinde hataya neden olan kendi kendine uygulanan bir hizmet reddi senaryosuna taşıyabilir.
Bu gibi durumlarda, işlemin hemen başarısız olması ve yalnızca başarılı olma olasılığı varsa hizmeti çağırmayı denemesi tercih edilir.
Devre Kesici düzeni, uygulamanın başarısız olma olasılığı olan bir işlemi tekrar tekrar yürütmeye çalışmasını engelleyebilir. Önceden tanımlanmış sayıda başarısız çağrıdan sonra hizmete gelen tüm trafiği engeller. Düzenli aralıklarla, hatanın çözülmüş olup olmadığını belirlemek için bir deneme çağrısına izin verir. Şekil 6-3'te Devre Kesici düzeni çalışır durumda gösterilmiştir.
Şekil 6-3. Devre kesici deseni çalışır durumda
Önceki şekilde, özgün yeniden deneme kalıbına bir Devre Kesici kalıbı eklenmiştir. 100 başarısız isteğin ardından devre kesicilerin açıldığını ve artık hizmete çağrılara izin vermediğini fark edin. 30 saniye olarak ayarlanmış CheckCircuit değeri, kitaplığın bir isteğin hizmete ulaşmasına ne sıklıkta izin vereceğini belirtir. Bu çağrı başarılı olursa bağlantı hattı kapanır ve hizmet bir kez daha trafiğe sunulur.
Devre Kesici düzeninin amacının Yeniden Deneme düzeninden farklı olduğunu unutmayın. Yeniden Deneme düzeni, bir uygulamanın başarılı olacağı beklentisi içinde bir işlemi yeniden denemesine olanak tanır. Devre Kesici düzeni, uygulamanın başarısız olma olasılığı olan bir işlem yapmasını engeller. Genellikle, bir uygulama bir devre kesici aracılığıyla bir işlemi çağırmak için Yeniden Deneme desenini kullanarak bu iki deseni birleştirir .
Dayanıklılık testi
Dayanıklılık testi her zaman uygulama işlevselliğini test ettiğiniz gibi yapılamaz (birim testleri, tümleştirme testleri vb. çalıştırılarak). Bunun yerine, uçtan uca iş yükünün yalnızca aralıklı olarak gerçekleşen hata koşullarında nasıl performans göstereceğini test etmeniz gerekir. Örneğin: işlemleri çökertip hataları enjekte etme, süresi dolmuş sertifikalar, bağımlı hizmetleri kullanılamaz duruma getirme vb. Chaos Monkey gibi çerçeveler bu tür kaos testleri için kullanılabilir.
Sorunlu istenen işlemleri işlemek için uygulama dayanıklılığı şarttır. Ama hikayenin sadece yarısı. Daha sonra Azure bulutunda kullanılabilen dayanıklılık özelliklerini ele alacağız.