Aracılığıyla paylaş


Kısmi hatayı işleme

İ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.

Mikro hizmet tabanlı uygulamalar gibi dağıtılmış sistemlerde kısmi hata riski vardır. Örneğin, tek bir mikro hizmet/kapsayıcı başarısız olabilir veya kısa bir süre yanıt vermeyebilir ya da tek bir VM veya sunucu kilitlenebilir. İstemciler ve hizmetler ayrı işlemler olduğundan, bir hizmet istemcinin isteğine zamanında yanıt vermeyebilir. Hizmet aşırı yüklenmiş ve isteklere çok yavaş yanıt veriyor olabilir veya ağ sorunları nedeniyle kısa bir süre için erişilebilir olmayabilir.

Örneğin, eShopOnContainers örnek uygulamasındaki Sipariş ayrıntıları sayfasını göz önünde bulundurun. Kullanıcı bir sipariş göndermeye çalıştığında mikro hizmet sipariş verme işlemi yanıt vermiyorsa, istemci kodunun zaman aşımı olmadan zaman uyumlu RPC'ler kullanması gibi istemci işleminin (MVC web uygulaması) hatalı bir şekilde uygulanması, yanıt bekleyen iş parçacıklarını süresiz olarak engeller. Kötü bir kullanıcı deneyimi oluşturmanın yanı sıra, yanıt vermeyen her bekleme bir iş parçacığını tüketir veya engeller ve iş parçacıkları yüksek oranda ölçeklenebilir uygulamalarda son derece değerlidir. Engellenen çok sayıda iş parçacığı varsa, sonunda uygulamanın çalışma zamanı iş parçacıkları tükenebilir. Bu durumda, şekil 8-1'de gösterildiği gibi uygulama kısmen yanıt vermemeye başlayabilir.

Diagram showing partial failures.

Şekil 8-1. Hizmet iş parçacığı kullanılabilirliğini etkileyen bağımlılıklar nedeniyle kısmi hatalar

Mikro hizmet tabanlı büyük bir uygulamada, özellikle iç mikro hizmetler etkileşiminin çoğu zaman uyumlu HTTP çağrılarına (desenden koruma olarak kabul edilir) bağlıysa, kısmi hatalar desteklenebilir. Günde milyonlarca gelen çağrı alan bir sistemi düşünün. Sisteminizin zaman uyumlu HTTP çağrılarının uzun zincirlerini temel alan hatalı bir tasarımı varsa bu gelen çağrılar, zaman uyumlu bağımlılıklar olarak onlarca iç mikro hizmete çok daha fazla milyonlarca giden çağrıya (1:4 oranında) neden olabilir. Bu durum Şekil 8-2'de, özellikle bağımlılık #3'te gösterilmiştir. Bu durum bir zincir başlatır ve bağımlılık #4'i çağırır ve ardından #5'i çağırır.

Diagram showing multiple distributed dependencies.

Şekil 8-2. Http isteklerinin uzun zincirlerini içeren yanlış bir tasarıma sahip olmanın etkisi

Her bağımlılığın kendisi mükemmel kullanılabilirliğe sahip olsa bile dağıtılmış ve bulut tabanlı bir sistemde aralıklı hata garanti edilir. Dikkate almanız gereken bir gerçek.

Hataya dayanıklılık sağlamak için teknik tasarlayıp uygulamazsanız, küçük kapalı kalma süreleri bile desteklenebilir. Örnek olarak, her biri %99,99 kullanılabilirliğe sahip 50 bağımlılık, bu dalgalanma etkisi nedeniyle her ay birkaç saatlik kapalı kalma süresine neden olur. Yüksek hacimli istekleri işlerken mikro hizmet bağımlılığı başarısız olduğunda, bu hata her hizmetteki tüm kullanılabilir istek iş parçacıklarını hızla doygunluğa taşıyabilir ve uygulamanın tamamını kilitleyebilir.

Diagram showing partial failure amplified in microservices.

Şekil 8-3. Zaman uyumlu HTTP çağrılarının uzun zincirlerine sahip mikro hizmetler tarafından kısmi hata

Bu sorunu en aza indirmek için, Zaman uyumsuz mikro hizmet tümleştirmesi mikro hizmetin özerkliğini zorunlu kılma bölümünde bu kılavuz, iç mikro hizmetler arasında zaman uyumsuz iletişim kullanmanızı teşvik eder.

Buna ek olarak, mikro hizmetlerinizi ve istemci uygulamalarınızı kısmi hataları işleyecek şekilde( yani dayanıklı mikro hizmetler ve istemci uygulamaları oluşturmak için) tasarlamanız önemlidir.