Circuit Breaker Nedir Ne İşe Yarar ?

Yazılım geliştirme süreçlerinde, hata toleransını artırmak ve uygulama performansını yönetmek için çeşitli tasarım desenleri kullanılmaktadır. Bunlardan biri olan "Circuit Breaker" deseni, hata durumlarında belirli bir süre boyunca servisi kullanmayı durdurarak, hataların yayılmasını ve uygulama performansının düşmesini önlemeyi amaçlar. Bu yazıda, C# programlama dilinde Circuit Breaker desenini nasıl kullanabileceğimizi ve bir örnek proje üzerinden nasıl uygulayabileceğimizi öğreneceğiz.

Circuit Breaker Nedir?

Circuit Breaker, yazılım sistemlerindeki hata durumlarını ele almak için kullanılan bir tasarım desenidir. Bir servisin istenen hizmeti sağlamaması durumunda devreyi kapatır ve belirli bir süre boyunca tekrar denemeyi engeller. Bu, hataların yayılmasını ve uygulama performansının düşmesini önler.

C# ile Circuit Breaker Kullanımı

C# dilinde Circuit Breaker desenini uygulamak için genellikle "Polly" kütüphanesi kullanılır. Polly, çeşitli hata yönetimi ve geri dönüş stratejileri sağlayan bir kütüphanedir. Aşağıda, Polly kullanarak basit bir Circuit Breaker örneği bulunmaktadır.

using Polly;
using System;

class Program
{
    static void Main()
    {
        // Circuit Breaker oluşturuluyor
        var circuitBreaker = Policy
            .Handle<Exception>()
            .CircuitBreaker(2, TimeSpan.FromSeconds(30));

        // Circuit Breaker içinde çalışacak metot
        Action action = () =>
        {
            // Simüle edilmiş bir hata durumu
            throw new Exception("Servis hatası");
        };

        // Circuit Breaker'ı kullanarak metodu çalıştırma
        circuitBreaker.Execute(action);

        Console.WriteLine("Uygulama devam ediyor...");

        Console.ReadKey();
    }
}

Yukarıdaki örnekte, Policy.Handle<Exception>().CircuitBreaker(2, TimeSpan.FromSeconds(30)) ifadesi ile bir Circuit Breaker oluşturulmuştur. Bu Circuit Breaker, 2 ardışık hatadan sonra devreyi kapatır ve devre kapalı olduğu sürece 30 saniye boyunca tekrar deneme işlemlerini engeller.

  1. Hata Toleransı Sağlar:

    • Circuit Breaker, uygulamanın hata durumlarında kendini korumasını sağlar. Bir hizmet veya bağımlılıkta meydana gelen sürekli hatalar, tüm uygulamanın çökmesine yol açabilir. Circuit Breaker sayesinde, hataların yayılmasını engelleyerek diğer sistem bileşenlerine zarar vermesini önler.
  2. Performansı İyileştirir:

    • Sürekli hata durumlarına düşen bir servisi sürekli olarak çağırmak, uygulamanın performansını düşürebilir. Circuit Breaker, hata durumlarını belirli bir süre boyunca yöneterek, kaynakların verimli bir şekilde kullanılmasını sağlar.
  3. Fallback Strateji:

    • Circuit Breaker, hata durumlarına karşı belirli bir süre devre dışı bırakılarak, sistemdeki sorunların çözülmesine fırsat tanır. Bu süre zarfında, hata geri dönüş stratejileri (retry, fallback vb.) kullanılarak hataların daha kontrollü bir şekilde ele alınması mümkün olur.
  4. Sistem Kararlılığını Sağlar:

    • Hizmet çağrılarındaki hataların kontrolsüz bir şekilde yayılması, sistemde genel kararlılık sorunlarına yol açabilir. Circuit Breaker, bu tür durumları önleyerek, uygulamanın genel kararlılığını artırır.
  5. Otomatik İyileşme:

    • Circuit Breaker, belirli bir süre boyunca hata durumlarını izledikten sonra otomatik olarak devreyi kapatır ve tekrar deneme işlemlerine izin verir. Bu, sistemdeki hataların otomatik iyileşmesine olanak tanır.
  6. Uygulama ve Sistem Güvenliği:

    • Hataların kontrolsüz bir şekilde yayılması, kötü amaçlı kullanıcılara veya saldırılara karşı zayıf bir nokta oluşturabilir. Circuit Breaker, hata durumlarını izleyerek ve yöneterek, uygulama ve sistem güvenliğini artırır.

Circuit Breaker deseni, modern mikroservis mimarilerinde ve dağıtık sistemlerde özellikle önemlidir. Bu desen sayesinde, bir uygulama, servis veya bağımlılıkta meydana gelen hatalara karşı dirençli ve daha güvenilir hale gelir.

C# dilinde Circuit Breaker desenini kullanmak, uygulamanızın hata toleransını artırmanıza ve performansını yönetmenize yardımcı olabilir. Polly gibi kütüphaneler, bu deseni uygulamayı daha kolay hale getirir ve çeşitli hata yönetimi stratejileri sunar. Bu yazıdaki örnek projeyle başlayarak, kendi projelerinizde Circuit Breaker desenini kullanmayı deneyebilirsiniz.

Add comment