15 Kasım 2014 Cumartesi

Supervisor Yazılım

Giriş
Yönetici yazılım (Supervisor) bileşenlerin durumlarını sorgulayarak, hayatta olup olmadıklarına bakarak tüm sistemin state'ini belirler. Eğer state değişmişse tüm bileşenlere duyurarak, herkesin yeni state'e uygun şekilde davranmasını ister. Yani Supervisor bir sistemin state değiştirmesi görevini yerine getiren yazılımdır.

UML
Sistemin state'leri arasındaki geçişleri görsel olarak çizmek için UML'deki State Diagram uygun olabilir.

Önce sistemin ne zaman state değiştireceğini gösteren bir şekil çizilir. Bu şekil geçiş koşullarını (transition criteria) gösterir. Belli şartlar sağlanırsa geçiş gerçekleşir. Örneğin bir cihazın hata vermesi, bir bileşenin heartbeat göndermeyi kesmesi (liveness'ın kaybedilmesi gibi)

Örnek sistem state'leri

State::Unknown --->
State::Operational<--->State::Degraded
                               |--->State::Failure

Design Pattern
Yönetici yazılımı geliştirirken de "State Pattern" tasarım örüntüsü kullanılabilir.

Periyodik Mesajlar Varsa Window Yöntemi
Örnek
Her saniye çalışan bir timer ve elimizde son 5 saniyelik veri olsun 
- En son 3 saniyede 3 mesaj almışsa sistem Operational State içindedir
- Eğer daha az mesaj almışsa bu sefer pencereyi biraz daha büyütür ve son 5 saniyeye bakar.
  Eğer 2 veya daha fazla mesaj almışsa sistem Degraded State'tedir. 
  Eğer 2'den de az mesaj almışsa sistem Not Operational State'tedir.

Örnek
Her saniye çalışan bir timer ve elimizde son 5 saniyelik veri olsun
- Eğer 5 saniye içinde 3 tane ardışık veri almışsa Operation State içindedir. Ardışık veri kontrolü için bu kod kullanılabilir. Şöyle yaparız
public boolean hasConsecutiveNumbers(List<Integer> list, int reqiredConsecutives) {

  boolean result = false;     
  int consecutives = 1;

  for (int i = 1; i < list.size(); i++) {
    // Going through each number here
    if (list.get(i) - list.get(i-1) == 1) {
      consecutives++; // Numbers were consecutive
      if (consecutives == reqiredConsecutives) {
        result = true;
        break;
      }
    } else {
      consecutives = 1;
    }
  }
  return result;
}

Hiç yorum yok:

Yorum Gönder