Skip to content

A0Halim/Dist_Subs_Service

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistem programlama ödevi

Nasıl başlatılmalı

Plotting ve java serverları açıldıktan sonra admin client çalıştırılmalıdır daha sonrasında java clientları çalıştırabilirsiniz.

Programda neler oluyor

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.

Olası sorunlar

Kütüphane sorunları

Gerekli tüm python ve ruby kütüphanelerinin yüklü olduğundan emin olun.

Java protobuf

Bu sorunu aşmak için javanın protobuf kütüphanesi manuel kurulmuştur.

Kurulum rehberi

resimli anlatım

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 özellikleri

  • 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.

ServerX.java özellikleri

  • 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 özellikleri

  • 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 özellikleri

  • 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.

Ekip üyeleri

  • 22060388, Ömer Faruk DERİN
  • 22060662, Mahmut ÖZTÜRK
  • 22060339, Abdulhalim BAYRAK
  • 22060371, Batuhan AYDIN

Sunum Videosu Linki

https://www.youtube.com/watch?v=ahbmXw2MQh0

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 56.2%
  • Ruby 24.0%
  • Python 19.8%