22 Şubat 2018 Perşembe

Yazılım Mimarisindeki Genel Kabiliyetler

Giriş
Aşağıda bazı projelerde gördüğüm genel kabiliyetlerle ilgili notlarım var. Bu kabiliyetler teknolojiden bağımsız.

Fault/Event Management
Bir sistemin ürettiği hataların kullanıcı tarafından görülebilmesi gerekebilir.

Örnek
Bir seferinde bu kabiliyeti karşılamak için Spring Event'leri kullanmıştık. Her bileşen hata ile karşılaşınca bir Spring Event'i fire ediyordu. Bu eventleri dinleyen Spring Bean, hataları veritabanına kaydediyordu. Bir başka uygulama bu verileri kullanıcıya listeliyordu.

Sistemin Mod ve Durumunun Yönetilmesi (Mode and State)
Sistemin Mod ve Durumunun Yönetilmesi (Mode and State) yazısına taşıdım.

Kaydetme Kabiliyeti (Record)
Kaydetme Kabiliyeti yazısına taşıdım.

Tekra Oynatma Kabiliyeti (Replay)

Tekrar oynatmada iki temel çözüm var
1. Sistemin en başa alınarak herşeyin tekrar oynatılması
2. Sistemin belli bir state'a alınarak kayıdın belli bir zamandan başlayarak oynatılması

Her iki durum için de genellikle oynatma hızı değiştirilebilmeli 1x, 2x, 4x gibi hızlar verilmelidir.

En Baştan Oynatma
En kolay çözüm bu. Tüm sistem temiz olarak açılır ve kayıt edilmiş mesajlar sistem gönderilir.

Belli Bir Zamandan Başlatarak Oynatma
Tekrar oynatmada genellikle kayıdın belli bir zaman noktasına gidilir. Bu yüzden kayıt başlatılırken zaman bilgisini tutmak gerekir. Zaman noktası seçilirken Duvar Saati veya Kayıt Başlangıç Saati kullanılabilir. Zaman noktası kaydırma işlemi defalarca yapılabilmelidir. Burada en önemli problem state'i geri alabilmek

Eğer elimizde sadece bir viewer varsa ve mesela 100 tane mesaj gösteriyorsa kayıdı ileri geri oynatırken sadece viewer'ı temizleyerek mesajları yeniden oynatmak kolay. Çünkü viewer neredeyse state tutmuyor denilebilir.

Ancak elimizde bir araba varsa ve kayıdın belli bir zamanına geri gitme istiyorsak mecburen state saklamak gerekiyor.

State'i belli bir zamandaki duruma çekmenin en kolay yolu herşeyi temizlemek ve state'i saklanan haliyle tekrar yüklemek. Eğer elimizde publish/subscrive mimarisi varsa, state'i temizlemek için bir topic gönderilir. Daha sonra state'i temsil eden topic'ler teker teker baştan gönderilir. Daha sonra kayıt edilen mesajlar tekrar oynatılır.






Hiç yorum yok:

Yorum Gönder