1 Aralık 2020 Salı

Yazılım Mimarisindeki Genel Kabiliyetler - Sistemin Açılması

Giriş
Sistemin açılması ve kapanması başlı başına bir konu

1. Launcher
Bazı yazılımların farklı konfigürasyonlara göre farklı Launcher'lar çalıştırması gerekebilir. Örneğin farklı konfigürasyonlar şöyle olabilir.

Tek başına çalışan yazılım 
Burada Launcher'a çok fazla iş düşmez. Sadece gerekli konfigürasyon parametrelerini okur ve sistemi başlatır.

Bir kullanıcının master diğerlerinin slave olduğu dağıtık yazılım
Burada master launcher herkesin ortak kullanacağı bazı konfigürasyon ayarlarını seçer. Bu ayarları diğer slave launcher'lara dağıtır ve her launcher kendi sistemini başlatır

Bazı kullanıcıların grup master'ı  ve diğerlerinin gruplara ait slave olduğu dağıtık yazılım
Burada her grup master'ı olan launcher kendi grubunun ortak kullanacağı bazı konfigürasyon ayarlarını seçer. Bu ayarları kendi grubundaki diğer slave launcher'lara dağıtır ve her launcher kendi sistemini başlatır. 

Hatta her grubun kendi arasında da bir hiyerarşi bile olabilir. Örneğin bir grup master'ı bir konfigürasyonu diğer grup master'larına gönderir ve daha sonra geri kalan grup master'ları devam edebilirler.

2. Sistemin Açılması

Örnek
Sistemin bileşenlerden oluştuğunu varsayalım. Bu bileşenler bazı adımlardan geçerler. Adımlar şöyle
1. Bileşenlerin yaratılması
2. Bileşenlerin konfigürasyonu verisine abone olması
3. Bir bileşenin konfigürasyonu okuması ve yayınlaması
4. Bileşenlerin initialize işlemlerini gerçekleştirmesi. Bu adımda kanllar açılır, thread'ler başlatılır
5. Bileşenlerin start işlemlerini gerçekleştirmesi. Bileşenler gerekli birbirlerine abone olurlar ve haberleşmeye başlarlar.


Örnek - Pipes And Filters
Eğer mesajları bir kanaldan alıp bir başka kanala çift yönlü olarak veren bir yazılım varsa açılı şırası şöyle olmalı
init Adımı
1. Executors başlatılır
2. Kanallar açılır. Kanallar muhtemelen asenkron açılacaktır

start Adımı
Bileşenler birbirlerine bağlanır. Burada bir dezavantaj kanalların asenkron açılması yüzünden, bileşenler birbirine bağlamadan gelen mesajlar kayboluyor. Ama bu muhtemelen kabul edilebilir.

Kapatmak için
1. Bileşenler birbirlerinden koparılır
2. Executors kapatılır
3. Kanallar kapatılır. Executors ve kanallar arasında yumurta tavuk ilişkisi var. 
- Eğer Executor önce kapatılırsa, kanaldan gelen istek reddedilir. 
- Eğer kanal önce kapatılırsa, Executor tarafından gönderilmek istenen veri reddedilir.

Örnek - Açılış İçin State Machine
Bu adım Launcher'dan sonraki şey. Gerekli tüm konfigürasyon parametreleri elimizde vardır ve artık sistemi açmak gerekir. Sistem açılırken bir ApplicationState FSM'i kullanılabilir. FSM şu state'lerden oluşabilir.
Locale Selection : Yazılım açılmadan önce dil seçimi
Loading : Yazılımın yüklenmesi
Login : Yazılım açılmadan önce kullanıcı doğrulama
Launching : Yazılım yüklenirken yapılacak işler
Launched : Yazılım yüklendikten sonra yapılacak işler
Error : Hata durumunda yapılacak işler
3. Dağıtık Sistemler Açılması
Eğer sistem dağıtık yapıdaysa, Launcher aşamasında sonra bu adım çalıştırılabilir. Master ve Slave'lerden oluşan dağıtık bir yapı olsun.
- Tüm slave sistemler açılır ve bir barrier üzerinde beklerler.
- Master sistem tüm slave'lerin geldiğini gördükten sonra barrier'i indirir. Böylece herkes ayn anda başlamış olur
- Master sistem veriyi dağıtır. Verinin dağıtılması için ve yüklenmesi için bir kaç frame beklenir veya yine bir barrier kullanılır.

Hiç yorum yok:

Yorum Gönder