Aktif-Aktif yedeklilik hayal mi ?

585

Özensiz bir çok iş görmeme yetecek kadar uzun süredir iş hayatındayım. Ö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 aslında basit çözümleri mevcut.

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

Günlük mesaim esnasında, benimle iletişime geçen bir mesai arkadaşım nedeniyle firmaya ücreti mukabili 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ı ilgili web serviste tek bir method vardı ve methodun içinde her request için 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 şekil ile görsele dökülebilir. Özetlemek gerekirse

– 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. 😀

Hakan LANA

Yorum yaz

Email adresiniz yayınlanmayacaktır.