Mikroservis Mimarisi

Eclipse MicroProfile Fault Tolerance Nedir?

Günümüzün yazılım projelerinde mikroservis mimarisi oldukça yaygın. Mikroservis yaklaşımlarında servislerin yönetiminin kolaylaştırılması için yaklaşımlar ortaya çıktı. Servis yönetimindeki en önemli durumlardan bir tanesi ise hatalar karşısında alınacak tedbirlerdir.

Fault Tolerance Nedir


Servislerimizde hata oluşması ve buna karşı alınacak aksiyonun tölerans değerlerini verebildiğimiz bir spesifikasyondur. Bu spesifikasyon ile birlikte projemize dahil edebilir ve kullanmaya başlayabiliriz.

Fault Tolerance Çeşitleri


Mikroservislerimize anotasyon bazlı hata törelansları verebilmekteyiz. Bunlar;

  • Timeout
    Servisimizin maksimum bekleme süresini belirleyebiliyoruz.
@Timeout(400) 
   public String message() {
       return "Merhaba";
}

Örneğimizde bu servisin zaman sınırını belirleyebilmekteyiz. Eğer yukarıdaki örneğimiz belirtilen süre içerisinde cevap veremez duruma gelirse bu durumdan sonra ne olacağını ise @Fallback anotasyonu ile belirliyoruz. Örnekte tanımlanan süre milisaniye cinsindendir.

  • Retry
    Hata durumlarında tekrar çalıştırma. Hata durumlarında belirlediğimiz sınırlamalar dahilinde ne olması gerektiğine parametreler yardımı ile oluşturabilmekteyiz.
@Retry( maxRetries = 1, 
        maxDuration = 5000, delay = 500,
        retryOn = {IOException.class},
        abortOn = {NumberFormatException.class})
public String message() {...}

Yukarıdaki parametrelere tek tek bakalım.

  1. maxRetries: Maksimum yeniden deneme sayısı.
  2. delay: Her deneme arasındaki bekeleme süresi.
  3. maxDuration: Yeniden deneme işlemlerinde bekleme süresi
  4. retryOn ve abortOn: Yeniden demelerde oluşacak olan hata belirtme sınıfları. Bu parametreler Fallback’ile aynı diyebiliriz.
  • Bulkhead
    Senkron çalışma işlemlerini yani aynı anda işlem yapma limitini sınırlandırabiliyoruz.
@Bulkhead(3)
public String message() {...}
  • CircuitBreaker
    Aşırı yüklemeyi sınırlandırıyoruz. Birbirine bağlı olan servislerden dolayı bir bekleme durumunu yönetmek ve çeşitli hata paylarından sonra gerçekleşecek aksiyonları belirleyebilmekteyiz. Aşağıdaki örnekte 2 ardışık çağrının kayan penceresi arasında 1 açılır. Servis 1000 ms boyunca açık kalır. Ard arda 10 başarılı çağrıdan sonra, devre tekrar kapanır.
@CircuitBreaker(successThreshold = 10, 
               requestVolumeThreshold = 2, 
               failureRatio=0.50,delay = 1000)
public String hello() {...}
  • Fallback
    Hata alındığında alternatif çalışma belirlemek için kullanılır.
@Fallback(fallbackMethod = "fallbackHello")
public String hello() {...}
...
public String fallbackHello() {...}

Yorum Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir