Erhan Ballıeker

Resilient Network Services Bölüm 6 – Polly

Selamlar,

Bu seri kapsamında sizlere tanıtmak istediğim son kütüphane Polly. Bu kütüphaneyi tanıdıktan sonra bunların hepsini bir arada nasıl kullanabiliriz kısmı ile ilgili yazacağım.

Polly, Resilient Network Service katmanı oluşturmak için  en önemli işlerden biri olan resilience and transient-fault-handling dediğimiz kavramı projemizde çok kolay bir şekilde kullanmamızı sağlıyor. Serinin ilk yazısında bahsettiğim gibi, yapılan bir api request in cevabı olarak aldığıımız sonucun neticesinde neler yapmalıyız, tekrar denemeli miyiz, yoksa başka bir yöntem mi uygulamalıyız gibi sorularımız için hem yardımcı metodları mevcut hem de kendi istediğimiz senaryolarıda içerisine dahil etmemize olanak sağlıyor.

Polly target olarak .NetStandard 2.0 ile yazıldığı için,

  • .NET Framework 4.6.1
  •  .NET Core 2.0+
  • Mono
  • Xamarin
  • UWP

target li tüm projelerde çalışabiliyor.

.NetFoundation ın bir parçası olan polly, bir yazılımcının api haberleşmesinde, Retry Pattern, Circuit-Breaker Pattern, Timeout Policy, BulkHead Isolation gibi senaryoları destekleyen extension ları ile, zaman kazanılmasını ve sistemin daha sağlıklı yazılmasını sağlıyor.

Bir xamarin projenizdeki Standard yada Portable projenize yada kullanmak istediğiniz diğer tipteki projelerinizin içinde Polly paketini eklemeniz yeterli.

Install-Package Polly

Yukarıda belirttiğim senaryolar detaylı ve kapsamlı işler olsa da, hem polly nin önerdiği hemde seçerken yardımcı olması adına kısa açıklamalarına bir bakalım.

Retry Policy

Bir api haberleşmesi sırasında bir API den size dönecek bazı hatalar geçici olabilir. Server ın anlık yoğunluktan dolayı geçici olarak kısa süreli verdiği hatalar gibi. Bu durumda belli bir bekleme süresi ile, kullanıcıya farkettirmeden arkada tekrar deneme senaryolarını implemente ederek, kullanıcıya hata göstermekten kaçınabiliriz.

Circuit-Breaker Policy

Bazen yine aşırı yoğunluktan  yada bir bug dan dolayı sistemde zamanla meydana gelen yavaşlıklardan ötürü, aldığınız cevaplar uzayabilir. Sistemin gerçek anlamda sıkıntı çektiğini düşündüğünüz durumlarda, kullanıcıya uzun sürelerce loading şeklinde bekletmektense, daha hızlı olarak hata almış gibi işlemi yarıda kesmek, hem uygulamanıza, hem API nin sunucusuna, hem kullanıcıya daha fazla katkı sağlayabilir. Yani bu işlem belli ki şuan sıkıntılı, “ben bu API nin üzerine daha fazla gitmeyeyim, biraz zaman verelim kendini toparlasın” gibi durumlar için düşünebiliriz.

Timeout

Verdiğimiz timeour süresinin sonrasına hiçbir request aşmayacağını garanti eder ve bu sayede istemediğimiz sürekli beklemelerden kullanıcımızı kurtarabiliriz.

Cache

Anlaşılacağı üzere, benzer requstleri atmayıp cache inden geri döndürüyor.

Bulkhead Isolation

Bunu örneklere geçtimizde daha iyi anlayabiliriz ama özetel bu şu senaryo için var. Bir process hata ona bağlı diğer requestlerin-işlemlerin de hata alacağı baştan belli olsa da sistem bunu bilmeyeceği gereksiz request ve işlem yapma isteği hem sunucu hem de client tarafına gereksiz yük bindireceğinden, bu gibi işlemleri belli bir kümede toplayıp bunlara belli kurallar set edebiliyoruz, dolayısı ile sistemin geri kalanından bu gibi durumları izole edip, bir yerde başlayan bir zincirleme hata senaryosunun tüm uygulamayı kitlemesini, zarar vermesini önleyebiliriz.

Fallback

Hatalar oluyor, olucaktır da. Bu gibi durumlarda sistemin hataya düşmeden, ne şekilde bu hataları handle edeceğimizi yazacağımız delegate ler olarak düşünebiliriz.

PolicyWrap

Düzgün bir sistem yazmaya çalışırken, yukarıda bahsettiğim tüm bu senaryoların birleşebileceği durumlara karşılık olarak, Polly nin bize sunduğu bu senaryolara karşılık gelen policy leri bir arada kullanmamıza olanak sağlayan yapı için bunu kullanacağız.

Birçok API ın kullanımında olduğu gibi, Polly de bu özelliklerinin çoğunun kullanımı için size Policy adında bir sınıf vriyor ve bu sınıfı kullanarak ayrı ayrı her bir haberleşme için istediğiniz policyleri kullanmanıza olanak sunuyor. Bir sonraki yazımda tüm bu senaryoların nasıl kullanılıcağına detaylı olarak değineceğim. Şimdilik bu kadar özet bilgi bence yeterli 🙂

Bir sonraki yazımda görüşmek üzere.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: