Bir acente yazılımı aynı anda birçok sigorta şirketi servisiyle konuşur. Bu servislerden biri bakıma girdiğinde, aşırı yüklendiğinde ya da tamamen erişilemez hale geldiğinde, o servise giden her istek uzun bir zaman aşımıyla sonuçlanır. Her kullanıcı sorgusu bu zaman aşımını bekler; işçiler meşgul kalır, kuyruklar uzar ve sorun yalnızca o şirketle sınırlı kalmayıp bütün teklif akışına yayılır. Devre kesici deseni, bu zincirleme etkiyi durdurmak için tasarlanmış bir dayanıklılık yöntemidir.
Desenin adı nereden geliyor?
Evlerdeki sigorta kutusunu düşünün. Bir cihazda kısa devre olduğunda sigorta atar ve o hattın elektriğini keser. Böylece arıza, evin bütün elektrik tesisatına zarar vermeden izole edilir. Yazılımdaki devre kesici de benzer şekilde çalışır: Belirli bir servise yapılan çağrılar sürekli başarısız oluyorsa, o servise giden çağrıları geçici olarak keser ve hemen hata döner. Sistemin geri kalanı çalışmaya devam eder.
Üç durum: Kapalı, açık ve yarı açık
Kapalı durum
Normal çalışma durumudur. İstekler servise iletilir, başarı ve hata sayıları izlenir. Hata oranı belirlenen eşiğin altında kaldıkça devre kapalı kalır. Elektrik benzetmesinde kapalı devre, akımın geçtiği devre anlamına gelir; bu yüzden "kapalı" burada olumlu bir durumdur.
Açık durum
Belirli bir zaman penceresinde hata oranı eşiği aştığında devre açılır. Bu durumda servise hiç istek gönderilmez; çağrılar anında "servis şu an kullanılamıyor" sonucuyla döner. Böylece işçiler uzun zaman aşımlarını beklemez, karşı servis de toparlanması için nefes alır.
Yarı açık durum
Açık durumda belirli bir bekleme süresi dolduktan sonra devre yarı açık konuma geçer. Bu aşamada sınırlı sayıda deneme isteğinin geçmesine izin verilir. Bu istekler başarılı olursa devre yeniden kapanır ve normal akış başlar. Başarısız olursa devre tekrar açılır ve bekleme süresi yeniden başlar.
Eşikleri belirlemek
Devre kesicinin etkinliği, doğru ayarlanmış eşiklere bağlıdır. Ayarlanması gereken temel parametreler şunlardır:
- Hata oranı eşiği: Devrenin açılması için gereken hata yüzdesi. Çok düşük tutulursa tekil hatalar devreyi gereksiz yere açar.
- Asgari istek sayısı: Hata oranının anlamlı sayılması için pencere içinde gereken minimum çağrı sayısı. Saatte birkaç sorgu alan bir branşta iki hatalı istek, yüzde yüz hata oranı gibi görünüp devreyi yanlışlıkla açabilir.
- Zaman penceresi: Hata oranının hesaplandığı süre. Kayan bir pencere, ani dalgalanmaları daha dengeli yansıtır.
- Açık kalma süresi: Devrenin yarı açık duruma geçmeden önce bekleyeceği süre.
- Yarı açık deneme sayısı: Toparlanmayı test etmek için geçirilecek istek adedi.
Bu değerler her şirket için aynı olmak zorunda değildir. Yanıt süreleri ve trafik hacimleri farklı olan servisler için ayrı ayarlar daha doğru sonuç verir.
Devre kesicinin kapsamı ne olmalı?
Bir şirketin trafik sorgu servisi çalışırken kasko servisi sorun yaşıyor olabilir. Trafik, kasko ve DASK sorguları çoğu zaman ayrı uç noktalara ve ayrı arka uç sistemlerine gider. Bu yüzden devre kesiciyi şirket düzeyinde değil, şirket ve branş birleşimi düzeyinde tanımlamak daha isabetlidir. Aksi halde yalnızca kasko tarafındaki bir sorun, aynı şirketin sağlıklı çalışan trafik sorgularını da gereksiz yere keser.
Daha ince bir ayrım da mümkündür: Aynı branş içinde sorgu ve poliçeleştirme uç noktaları ayrı devre kesicilere bağlanabilir. Sorgu servisi sorunluyken daha önce alınmış bir teklifin poliçeleştirilmesi engellenmemelidir.
Devre açıkken kullanıcıya ne gösterilmeli?
Devre kesici teknik bir mekanizmadır ama sonucu doğrudan kullanıcının ekranına yansır. Devre açıkken kullanıcıya belirsiz bir hata mesajı göstermek yerine durumu açıkça ifade etmek gerekir. Örneğin sorgu sonuç listesinde ilgili şirket için "şu anda yanıt alınamıyor" bilgisi gösterilebilir ve diğer şirketlerin sonuçları normal şekilde listelenir. Kullanıcı, beklemesi gerekmeyen bir durum için boşuna beklemez ve elindeki sonuçlarla çalışmaya devam eder.
Devre kesici ile diğer dayanıklılık desenlerinin ilişkisi
Devre kesici tek başına kullanılmaz; diğer desenlerle birlikte bir bütün oluşturur:
- Zaman aşımı: Her çağrının makul bir zaman aşımı olmalıdır. Zaman aşımı olmayan bir çağrıda devre kesici hatayı hiç göremeyebilir.
- Yeniden deneme: Geçici hatalar için yeniden deneme yapılır; ancak devre açıkken yeniden deneme yapılmamalıdır. Aksi halde iki mekanizma birbirine karşı çalışır.
- Bölme (bulkhead): Her şirket için ayrı bağlantı havuzu veya işçi kapasitesi ayırmak, sorunlu bir servisin bütün kaynakları tüketmesini önler.
- Yedek davranış: Bazı durumlarda devre açıkken önbellekteki son geçerli veri gösterilebilir. Teklif fiyatları için bu genellikle uygun değildir; ama örneğin şirketin desteklediği teminat listesi gibi nadiren değişen veriler için kullanılabilir.
İzleme ve alarm
Devre kesicinin durum değişiklikleri değerli operasyon sinyalleridir. Bir devrenin açılması, operasyon ekibine bildirim olarak gitmelidir. Devrelerin ne sıklıkla açılıp kapandığı, hangi şirket ve branşta yoğunlaştığı ve açık kalma sürelerinin dağılımı düzenli olarak incelenmelidir. Sürekli açılıp kapanan bir devre, eşiklerin yanlış ayarlandığına veya karşı serviste kronik bir sorun olduğuna işaret eder.
Uygulamada sık yapılan hatalar
- Devre durumunu her sunucuda ayrı tutmak ve sunucular arasında tutarsız davranışa yol açmak. Küçük ölçekte bu kabul edilebilir; büyüdükçe ortak bir durum deposu düşünülmelidir.
- İş kuralı reddlerini hata olarak saymak. Bir aracın teminata uygun bulunmaması servisin arızalı olduğu anlamına gelmez; devre kesici bu yanıtları başarılı çağrı olarak değerlendirmelidir.
- Devre açıldığında kullanıcıya hiçbir bilgi vermemek ve sonuç listesinde şirketi sessizce gizlemek.
InsureHub'da şirket bağlantılarının izolasyonu
InsureHub, sigorta acentelerine sunduğu sigorta teklif programı altyapısında bir şirket servisindeki aksaklığın diğer şirketlerin sonuçlarını bekletmemesini önemli bir tasarım ilkesi olarak görür. Devre kesici, bu ilkenin teknik karşılıklarından biridir. Bu yaklaşımın sigorta acentesi yazılımı içindeki günlük akışa nasıl yansıdığını, kendi kullanım senaryolarınızla değerlendirmeniz en sağlıklı yöntemdir.