Aktif-Aktif yedeklilik

Uzun bir süredir iş hayatındayım, özellikle yazılım işlerinde bir çok özensiz ve üstün körü iş görmem için yeterli bir süre oldu. Öncelikle ben en iyisini bilirim ya da mutlak doğru budur diyecek değilim.

Biraz da alaylı yazılımcı olarak ahkam kesmek istemem, lakin şunu dile getirecek cesaretim var, piyasada kaçınılan bir çok sorunun basit çözümleri olabilir.

Bugün profesyonel hayatta şahit olduğum bir durum ve sonrasında çakan şimşeklerden bahsetmek istiyorum.

Günlük mesaim esnasında, benimle iletişime geçen bir mesai arkadaşım nedeniyle firmaya ücretine mukabil yaptırılmış bir web servisindeki özensizliğe tanık oldum.
Servisi kısaca özetleyeyim; sistemden ortak alana çıkılan bir xml dosya okunarak cevap dönülüyordu, ancak özensizlikte bu noktada gözüme çarptı tek bir method ve methodun içinde her defasında file read yapılıyordu ki, bu kısımda try/catch yapısı da düzgün kurulmamıştı ayrıca exception sonrası IIS' i bile kilitleyip recycle'a sebep olabilecek bir yapı mevcuttu.

Tespit edilen durum ve tasarlanan çözüme ilişkin çizim yukardaki şekilde görsele dökülebilir. Özetlemek gerekirse de ;

- Araya UNC path ile erişilen dosyayı izlemek için filewatcher ile çalışan windows servis yazıldı. Servisin görevi sadece değişiklik takibi yaparak, ilgili method ile webservisi modified date bilgisini de besleyerek tetiklemek olacak şekilde tasarlandı.

- Webservis'te 2. method eklenerek 2. method ile servis tarafından uyarıldığında modified date değişti ise dosyayı okuyarak cache'i tazelemesi aksi taktirde mesajı dikkate almayacak şekilde yapılandırıldı.
Ayrıca dosya okunurken using bloğu içinde accessmode read olarak açıldı.

- 1. method requestlere cache'ten dönüş yapacak şekilde ayarlandı.

- Kurulumlar 2'şer server'a yapıldı (windows servis ve web service aynı sunucuda host edildi.) Windows servisler düz ve çapraz modda web servisleri tetikliyor ve aynı zamanda webservisler de birbirlerini haberdar ediyor, ancak modified date kontrolü nedeniyle her dosya güncellemede dosya birer kez okunuyor.

Sonuç olarak, kazanımları incelediğimizde 
- Dosya lock olma olasılığı engellendi.
- Dosya okuma işlemleri ciddi oranda      düşürüldü.
- Olası hatalar nedeniyle oluşabilecek IIS recycle'ların önüne geçildi.
- Kaynak dosya sorunlu olsada cache' ten cevap dönülerek, runtime kesintileri minimize edildi.
- Response time larda iyileşme elde edildi.

Daha da önemlisi basit bir Aktif-Aktif yedeklilik sistemi oluşturulmuş oldu. 

Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 5 - Dönüşler ve Atlamalar (Returns and Jumps)