Aracılığıyla paylaş


Kısmi hatayı işleme stratejileri

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Kapsayıcılı .NET Uygulamaları için .NET Mikro Hizmet Mimarisi e-Kitabı'ndan bir alıntıdır.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Kısmi hatalarla başa çıkmak için burada açıklanan stratejilerden birini kullanın.

İç mikro hizmetler arasında zaman uyumsuz iletişim (örneğin, ileti tabanlı iletişim) kullanın. Hatalı tasarım sonunda hatalı kesintilerin ana nedeni olacağı için iç mikro hizmetlerde zaman uyumlu HTTP çağrılarının uzun zincirlerini oluşturmamak kesinlikle önerilir. Aksine, istemci uygulamaları ile ilk mikro hizmet düzeyi veya ayrıntılı API Gateway'ler arasındaki ön uç iletişimleri dışında, iç mikro hizmetler genelinde ilk istek/yanıt döngüsünden sonra yalnızca zaman uyumsuz (ileti tabanlı) iletişim kullanılması önerilir. Nihai tutarlılık ve olay odaklı mimariler dalgalanma etkilerini en aza indirmeye yardımcı olacaktır. Bu yaklaşımlar daha yüksek bir mikro hizmet özerkliği düzeyini zorlar ve bu nedenle burada belirtilen soruna karşı engeller.

Üstel geri alma ile yeniden denemeleri kullanın. Bu teknik, hizmetin yalnızca kısa bir süre için kullanılabilir olmaması durumunda belirli sayıda çağrı yeniden denemesi gerçekleştirerek kısa ve aralıklı hataları önlemeye yardımcı olur. Bu durum, aralıklı ağ sorunlarında veya bir mikro hizmet/kapsayıcı bir kümedeki farklı bir düğüme taşındığında oluşabilir. Ancak, bu yeniden denemeler devre kesicilerle düzgün tasarlanmamışsa, dalgalanma etkilerini daha da kötüleştirebilir ve sonuçta hizmet reddine (DoS) neden olabilir.

Ağ zaman aşımlarına geçici çözüm. Genel olarak, istemciler süresiz olarak engellenmemek ve yanıt beklerken her zaman zaman zaman aşımları kullanmak üzere tasarlanmalıdır. Zaman aşımlarını kullanmak, kaynakların hiçbir zaman süresiz olarak bağlanmamasını sağlar.

Devre Kesici desenini kullanın. Bu yaklaşımda istemci işlemi başarısız isteklerin sayısını izler. Hata oranı yapılandırılmış bir sınırı aşarsa, başka denemelerin hemen başarısız olması için bir "devre kesici" başlatılır. (Çok sayıda istek başarısız oluyorsa, hizmetin kullanılamadığını ve istek göndermenin anlamsız olduğunu gösterir.) Zaman aşımı süresinden sonra istemcinin yeniden denemesi ve yeni istekler başarılı olursa devre kesiciyi kapatması gerekir.

Geri dönüşler sağlayın. Bu yaklaşımda istemci işlemi, önbelleğe alınmış verileri veya varsayılan değeri döndürme gibi bir istek başarısız olduğunda geri dönüş mantığı gerçekleştirir. Bu, sorgular için uygun bir yaklaşımdır ve güncelleştirmeler veya komutlar için daha karmaşıktır.

Kuyruğa alınan isteklerin sayısını sınırlayın. İstemciler ayrıca bir istemci mikro hizmetinin belirli bir hizmete gönderebileceği bekleyen istek sayısına bir üst sınır uygulamalıdır. Sınıra ulaşıldıysa, büyük olasılıkla ek isteklerde bulunmak anlamsızdır ve bu denemeler hemen başarısız olmalıdır. Uygulama açısından, bu gereksinimi yerine getirmek için Polly Bulkhead Yalıtım ilkesi kullanılabilir. Bu yaklaşım temelde uygulama olarak ile SemaphoreSlim paralelleştirme kısıtlamasıdır. Ayrıca bölme ucu dışında bir "kuyruğa" izin verir. Yürütme öncesinde bile proaktif olarak fazla yük atabilirsiniz (örneğin, kapasite dolu olarak kabul edildiğinden). Bu, devre kesici hataları beklediğinden, belirli hata senaryolarına yanıtını devre kesicinin olabileceğinden daha hızlı hale getirir. Polly'deki BulkheadPolicy nesnesi, bölme ve kuyruğun ne kadar dolu olduğunu ortaya çıkarır ve taşma sırasında olaylar sunar, böylece otomatik yatay ölçeklendirmeyi yönlendirmek için de kullanılabilir.

Ek kaynaklar