Circuit Breaker Pattern Nedir?

  • Oluşturulan isteklerin başarısız olması,
  • İstek atılan servis ya da sistemin ayakta olmaması
  • İstek atılan servisin geç cevap vermesi/timeout durumuna düşmesi

Hikaye: Elektrik mühendisliğinde circuit breaker(devre kesici) yapıları hali hazırda fazlaca kullanılıyor. Circuit Breaker: bir elektrik devresini oluşabilecek olumsuz bir duruma karşın hasardan korumak için elektrik akışını kesen otomatik elektrik anahtarlarıdır. Yazılım geliştirmede, uygulamanızı koruyan çok benzer bir işi yapan circuit breaker pattern’nine sahibiz.

Sorun Örneklemi

Bir ödeme sistemi geliştirdiğinizi düşünün. Böyle bir sistemde onlarca banka ile entegrasyon mevcuttur. Dolayısıyla kullanıcıların işlemlerini tamamlayabilmek için bankaların API’larını kullanarak güvenli bir ödeme altyapısı sunabiliriz. Dolayısıyla her bir ödeme ya da iade işlemi bu bankaların API’ları aracılığıyla gerçekleşir. Bu işlemleri gerçekleştirmek için bankaların API’larını kullanırız ve bankadan daha güvenilir bir sistem olabilir mi diye hayal edip rahatça hayatımıza devam edebiliriz.

Çözüm: Circuit Breaker Pattern

Genel olarak Circuit Breaker, hizmet alınan(istek atılan) bir servisin kullanılabilirliğini kontrol edip oluşabilecek hatalarda sistemimizi belirttiğimiz türdeki sorunlardan korumak için kullanılabilir. Hizmet alınan yapı bir servis, bir veritabanı sunucusu veya uygulama tarafından kullanılan bir web hizmeti olabilir. Circuit breaker, hataları algılar ve uygulamanın başarısız işlem sayısı belirli bir eşiği geçmesi durumunda ise yeniden kullanılabilir hale gelene kadar işlemleri engeller.

Circuit Breaker Durumları

Closed(Kapalı): Circuit breaker’ın başlangıç konumu kapalıdır. Her şeyin beklendiği gibi çalıştığı ve tüm istek akışının olağan şekilde devam ettiği durumdur. İstek atılmak istenilen servise ulaşılırken herhangi bir hata alınıyorsa ve bu hatalar eşik kriterlerini aşıyorsa circuit breaker devreye girer.

Doğru Eşik Kriterlerinin Belirlenmesi

Eşik değeri diye bahsettiğimiz kriter aslında sadece istek sayısından oluşan bir kavram değildir. Circuit breaker pattern’i için kullanılabilecek bazı yaygın eşikler sunucu zaman aşımı(timeout), hata sayısı, beklenmeyen response kodları veya aşırı kaynak tüketimi olabilir. Örneğin, kullanıcı bilgileri üzerinden işlem yapan bir servis için işlem süresi daha önemliyken, ödeme sistemiyle ilgili bir serviste ise hata sayısı eşik kriterlerinden en önemlisi olabilir.

Hata durumlarında yapılabilecekler

Circuit Breaker ile birlikte istek atarken oluşan hata durumlarının sonucunda gereksiz istekleri önleyebiliriz. Bu pattern ile hata durumlarında yapılacak işlemler sistemin sağlıklı işleyişi için önemli bir rol oynar.

  • Bazı istekler başarısız olduğunda bunları alternatif API’lar kullanarak istekleri yönlendirilebilir ve işlemlerdeki aksaklıkların önüne geçilebilir.
  • Oluşan hata durumunda Generic API’lar için cache mekanizması kullanılabilir ve hata durumunda cache üzerinden okunarak cevap dönülebilir.
  • Kullanıcıya işlemin devam ettiğine dair kullanıcı bilgilendirilebilir ve arka planda işlem yeniden denenebilir.

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev