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() {...}
Code language: JavaScript (javascript)
Yukarıdaki parametrelere tek tek bakalım.
- maxRetries: Maksimum yeniden deneme sayısı.
- delay: Her deneme arasındaki bekeleme süresi.
- maxDuration: Yeniden deneme işlemlerinde bekleme süresi
- 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() {...}
Code language: CSS (css)
- 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() {...}
Code language: CSS (css)
- Fallback
Hata alındığında alternatif çalışma belirlemek için kullanılır.
@Fallback(fallbackMethod = "fallbackHello")
public String hello() {...}
...
public String fallbackHello() {...}
Code language: JavaScript (javascript)
No Comment! Be the first one.