Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
August 14, 2022 11:16 am GMT

Resilience4j

Resilience4j, birbirleri ile iletiim ierisinde bulunan sistemler iin hata toleransn yneterek daha esnek bir yap ierisinde
ilemlerin srdrmelerine yardmc olan bir ktphanedir. Bir noktadaki hatann btn sistemi etkilememesi asl amatr.

Gerekletirmesinde Decorator Pattern ve Fonksiyonel Programlama konseptlerinden faydalanr.

Bu esnek yapy oluturmak iin eitli temel paralar ierir;

  • CircuitBreaker
  • Retry
  • TimeLimiter
  • RateLimiter
  • Bulkhead

Circuit Breaker

Sistemdeki hata veya gecikmenin belirlenebilen bir eik deerinin zerine kt durumlarda, kaynaklarn boa harcanmamas iin balantnn kesilmesi olaydr.

Bu oran gzlemlemek iin sliding window kullanlr ve iki tipi vardr;

  • Count Based : Son N ar gz nnde bulundurulur ve ktlarn N boyutunda bir circular array ierisinde toplar. Bu arlarda gecikme veya hata oran eik deeri aarsa, devre kesilir.
  • Time Based : Son N saniyede gelen arlarn ktlar iin N boyutunda bir circular array oluturur. Her bir indeks bir saniyelik arala denk gelmektedir. Her bir indekste hatal, gecikmeli ve toplam arlar belirten 3 ayr integer tutulur. Bu deerlerin oranna gre devrenin kesilmesine karar verilir.

Tanmlanan listelere veri girii olduu zaman yaplan hesaplama ile belirlenen hata ve gecikme eik deerleri karlatrlr ve durum deiiklikleri yaplr.

  • failureRateThreshold : Hata orannn eik deeridir, varsaylan olarak %50 durumundadr.
  • slowCallRateThreshold : Gecikme orannn eik deeridir, varsaylan olarak %100 durumundadr. Bir arnn gecikme olarak kabul edilmesi de (slow call) slowCallDurationThreshold deerine baldr. Varsaylan olarak 60000 ms zeri sren bir ar gecikme olarak kabul edilir.

Bu eik deerleri ile ilgili bir dier nemli bir nokta da, kontrole dahil edilmeleri, toplam istek saysnn minimumNumberOfCalls deerini amasndan sonra gerekleir. rnein bu deer 10 olduunda, gelen 9 istek de hatal olsa dahi minimumNumberOfCalls deeri henz almad iin devre kesilmez.

Devre Durumlar

circuitbreakerstates

Devrenin bulunabilecei 3 farkl durum sz konusudur;

  • CLOSED : Devre kesiminin gereklemedii, her eyin normal seyrinde devam ettii durumdur.
  • OPEN : Hata veya gecikme oranlarnn eik deerleri aldnda sistemin bulunduu durumdur. Bu durumda iken gelen istekler CallNotPermittedException hatas ile geri evrilir.
  • HALF-OPEN : Kesilmi bir devrenin, waitDurationInOpenState ile belirlenen sreyi beklemesinden sonra, direk olarak CLOSED durumuna gemek yerinde getii ara durumdur. Bu durumda permittedNumberOfCallsInHalfOpenState ile belirtilen miktarda istek alnmasna izin verilir. Eer bu isteklerdeki hata veya gecikme oran eik deerlerinden yksek ise tekrar OPEN durumuna, deil ise CLOSED durumuna geilir. Bu duruma geiin otomatik bir ekilde yaplmas iin automaticTransitionFromOpenToHalfOpenEnabled deerinin true olarak ayarlanmas gereklidir.

Bu ilemeler dahilinde varsaylan olarak, btn Exception tipleri hata olarak saylr. Ancak bu yaklam yerine kendi ayarlamalarmz da yapabiliriz;

  • recordExceptions listesi kullanarak hata olarak saylmasn istediimiz Exception snflarn tanmlayabiliriz. Bunlar haricindekiler baarl olarak saylacaktr. Ayrca belirtilen snflardan miras alm snflar da ayn ekilde ele alnacaktr.
  • ignoreExceptions listesi ile grmezden gelinecek Exception snflarn tanmlayabiliriz. Bu snflar ne baarl ne de baarsz olarak kabul edilecektir.

Retry

Hata ile sonulanan bir arnn otomatik olarak yeniden gnderilmesi amacyla kullanlr.

Retry ile alakal dikkat edilmesi gereken nemli bir nokta, ar sonucu alan operasyonun idempotent olmas, yani tekrarlanan istekte gereksiz olan bulunuyorsa bunun grmezden gelinebilmesidir, aksi takdirde mantk hatalarna yol aabilir. rnein operasyon iin ar yapldnda, gerekli ilemler salkl bir ekilde gereketirilmi olsun ancak geri dnte bir problem olumu olsun, bu durumda istek tekrarlanacak ve eer sistem buna hazrlkl deilse ayn ilemler tekrar yaplmaya allacaktr.

Retry kullanmnda eitli deerleri konfigre edebiliriz ;

  • maxAttempts: Hata durumunda maksimum deneme saysn belirtir.
  • waitDuration: Her bir deneme arasnda geen sabit sreyi belirtir.
  • enableExponentialBackoff: Denemeler arasndaki geen srenin sabit olmayp, exponential ekilde artacan belirtir. rnein, denemeler arasnda geen sreler 2-4-8 eklinde artar

Yeniden deneme durumlar istenen ekilde ayarlanabilir.

  • Atlan istee bir cevap dnlm ise konfigrasyon dosyasna eklenecek resultPredicate deeri ile hangi koulda retry yaplaca ayarlanabilir.

resultPredicate: io.reflectoring.resilience4j.springboot.predicates.ConditionalRetryPredicate

ConditionalRetryPredicate implements Predicate<SearchResponse> { @Override public boolean test(SearchResponse searchResponse) {   if (searchResponse.getErrorCode() != null) {     return searchResponse.getErrorCode().equals("FS-167");   }    return false; }}
  • stek gerekletirilirken hata gereklemi ise retryExceptionPredicate kullanlarak, hata incelenip retry yaplp yaplmayacana karar verilebilir veya retryExceptions ve ignoreExceptions deerleri kullanlarak direk olarak snflarna gre filtreleme de yaplabilir.

retryExceptionPredicate: io.github.resilience4j.circuitbreaker.RecordFailurePredicate

public class RecordFailurePredicate implements Predicate<Throwable> {   @Override   public boolean test(Throwable throwable) {       return throwable instanceof IOException || throwable instanceof IgnoredException;   }}

Time Limiter

TimeLimiter, ilgili uca yaplan ilemin en fazla ne kadar zaman alacan belirlemek iin kullanlr.

  • TimeLimiter sadece asenkron ilemin yapld(CompletableFuture ile salanan) endpoint'lere uygulanabilir.

TimeLimiter kullanmnda eitli deerleri konfigre edebiliriz;

  • timeoutDuration: Gelen istein zaman am sresini belirtir.
  • cancelRunningFuture: Hali hazrda alan future iin iptal edilip edilemeyeceini belirtir.

Rate Limiter

Sisteme, belirtilen zaman aral ierisinde gelebilecek istek saysn kontrol edebilmemizi salar.

Rate Limiter kullanmnda eitli deerleri konfigre edebiliriz;

  • limitForPeriod: Belirtilen periyot iin izin verilecek azami istek saysr
  • limitRefreshPeriod: Verilen limit deerinin geerli olaca sreyi belirtir. Sre sonunda istek says sfrlanr.
  • timeoutDuration: Limit deere ulaldnda, blokalanan thread iin ka saniye bekleneceini belirtir.

Bulkhead

Bulkhead ile gelen ezamanl ar saysn snrlayabiliriz.

ki ekilde gerekletirilebilir ;

  • SemaphoreBulkhead : Gelen isteklerin semafor yardm ile kilitleme mant ile yrtlmesi.
  • FixedThreadPoolBulkhead : Gelen her istek iin, oluturulan thread havuzundan uygun bir thread alnr ve izole bir ekilde ilemler gerekletirilir..

Semafor yaklam iin iki deer konfigre edilebilir;

  • maxConcurrentCalls: Bulkhead tarafndan ayn anda yrtlebilecek, azami istek saysn belirtir.
  • maxWaitDuration: Belirlenen maxConcurrentCalls saysnn amna sebep olan istein ne kadar sre bloklanacan belirtir.

Thread havuzu yaklam iin eitli deerler konfigre edilebilir;

  • coreThreadPoolSize : Oluturlan havuz iin sabit(minimum) thread miktarn belirtir.
  • maxThreadPoolSize : coreThreadPoolSize miktarndan daha fazla thread kullanm gerektiinde, geici ekilde oluturulabilecek yeni threadlerin azami miktarn belirtir.
  • queueCapacity : Thread havuzunda uygun thread bulunmadnda gelen isteklerin bekletilecei srann kapasitesini belirtir.
  • keepAliveDuration : Geici oluturulan threadlerin bota ne kadar sre bekleyebileceini belirtir. Bu sre amnda thread sonlandrlr.

Original Link: https://dev.to/emrebasar/resilience4j-2b9l

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To