Plotting ve java serverları açıldıktan sonra admin client çalıştırılmalıdır daha sonrasında java clientları çalıştırabilirsiniz.
Admin öncelikle plottera bağlanmayı deniyor bağlanamazsa bu işlem tekrarlanıyor. Bir sonraki işlemi serverlara bağlanmak oluyor. Serverlar, başlama emrini aldıktan sonra birbirlerine bağlanmaları için 3 saniye müddet tanınmışır. Bu surenin sonunda bağlanabildi ya da bağlanamadı diğer serverlara bağlanma denemesi kesilir. Server bağlantıları gerçekleştikten sonra serverlar, client isteklerini işleyebilir ve admin isteklerine yanıt verebilir bir durumda oluyor. Clientlar tek bir istek göndericek şekilde tasarlanmışır farklı istekler için manuel düzenleme gereklidir ve serverlarda tek bir bağlantıdan tek bir istek alıcak şekilde tasarlanmıştır. Tüm program çalışır durumdadır.
Gerekli tüm python ve ruby kütüphanelerinin yüklü olduğundan emin olun.
Bu sorunu aşmak için javanın protobuf kütüphanesi manuel kurulmuştur.
Son olarak değişiklikleri uygulayın. Bu şekilde protobufı kullanmak için vs koddaki
Run -> Start Debugging (F5) veya Run -> Run Without Debugging (Ctrl + F5)
Yollarıyla serverları çalıştırabilirsiniz.
- Client.java dosyasında, aynı pakette olan CreateClient.java dosyasının içindeki CreateClient constructoruna parametre yollanarak client oluşturulur.
- Constructor'a yollanan parametreler: [Id, nameSurname, TALEP (sub or del), AllInterest, serverNo].
- ServerNo parametresi Client.javadan random olarak yollanır. Eğer serverNo parametrede verilmezse overload constructor metodunda varsayılan olarak client, random bir sunucuya bağlatılır.
- Parametrelerden girilen abone bilgileri, rastgele seçilen sunucuya talep (sub or del) ile birlikte yollanır.
- Abonelik bilgileri yollandıktan sonra feedback olarak "Abone bilgisi sunucuya gönderildi" mesajı kullanıcıya gösterilir.
- Sunucudan da client'e feedback mesajı yollanır.
- Admin_client.rb den başlama emri alalındıktan sonra çalımaya başlama
- adminden gelen isteğin başarılı yada başarısız donuçlandığında dair geri dönüş
- Hata toleransı 0 prensibiyle çalışma
- Hata toleransı 1 prensibiyle çalışma
- Hata toleransı 2 prensibiyle çalışma
- Tüm iletişim işlemleri için proto kullanımı
- Serverlardan birinin bağlantısı koptuğununda diğer serverlar çalışmaya devam edebilir
- Hata yönetimi
- Clientler SUB ve DEL işlemlerini gerçekleştirebilir
- Adminden gelen kapasite isteklerine yanıt verebilir
- Gelen isteklerin sunuculardan mı Clientlerdan mı geldiğinin ayrımını yapabilme
- Serverlar birbirleri arasında arası yedekleme yapabilir
- Senkronizasyon sağlanmıştır aynıanda pek çok isteğe yanıt verebilir
- Plotter.py, 5004 portunda bir TCP sunucusu olarak çalışır ve Admin.rb'den gelen bağlantıları dinler.
- Admin.rb, veriyi boyutuyla birlikte gönderir ve bu veri, Capacity.proto formatına uygun olarak alınır.
- Alınan veriler, her bir sunucuya ait ayrı bir kuyrukta saklanır. Veri alındıkça kuyruklar güncellenir ve her sunucu için en son veriler korunur.
- Sunucu adı, Capacity mesajındaki server_id ile belirlenir ve her sunucuya ait kapasite verileri ayrı ayrı işlenir.
- Plotter.py, alınan veriyi çözümledikten sonra matplotlib ile gerçek zamanlı bir grafik üzerinde kapasite durumlarını görselleştirir.
- Sunucular, her biri için farklı renklerle temsil edilir. Bu sayede her sunucu, görselde açıkça ayırt edilebilir.
- Grafik sürekli olarak güncellenir, böylece sunuculardan alınan yeni veriler görselleştirilir.
- Hata durumları için gerekli try-except blokları oluşturulmuştur.
- Admin.rb client durumunda çalışmaktadır ve sırasıyla 5004(python), 5001, 5002 ve 5003(java) portlarına bağlanmaya çalışır ve en az 1 java sunucusu, python bağlantısı sağlandığı takdirde sunuculara veri göndermeye başlayabilir.
- Admin.rb ve sunucular arası veri gönderimi protobuf ile sağlanmaktadır ve veri gönderimi sırasında gönderilen veri, boyutuyla ile beraber gönderilmektedir.
- Admin.rb kendi makinesinde bulunan dist_subs.conf dosyasından fault_tolerance_level değerini okuyup bu değeri bağlantısı sağlanan her bir java sunucusuna da göndermektedir.
- Okunan değer yanında ayrıca java sunucularına başlama emrini de göndermektedir. Java sunucuları bu emri doğru almadığı takdirde sunucular çalışmaya başlamamaktadır.
- Java sunucuları ise bu başlama emrine karşılık olarak başlamaya hazır olup olmadıkları durumunu messsage tipinde protonun response "YEP" veya "NOP" değerleri ile admin.rb'ye bildirirler.
- Java sunucuları başlamaya hazır durumda ise admin.rb her bir sunucudan kapasite bilgisini ister. Daha sonra ise capacity tipinde bir nesne oluşturur ve bu nesneye server_id ataması yaparak bu proto nesnesini java serverlarına gönderir.
- Java sunuculuar yaptığı kontroller sonrasında admin.rb'nin yaptığı kapasite isteğine karşılık olarak kapasite bilgilerini admin.rb'ye gönderir.
- Admin.rb java sunucularından aldığı kapasite bilgilerini server_id bilgileriyle birlikte python sunucusuna gönderir.
- Hata durumları için gerekli begin rescue mekanizmaları oluşturulmuştur.
- 22060388, Ömer Faruk DERİN
- 22060662, Mahmut ÖZTÜRK
- 22060339, Abdulhalim BAYRAK
- 22060371, Batuhan AYDIN