Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

🚀 Présentation de StorUGE

StorUGE est un projet d'architecture réseau distribuée développé en Java NIO (Non-blocking I/O). Il implémente un système de nœuds interconnectés formant une topologie en arbre. Chaque instance du programme possède une double casquette : elle agit simultanément comme un serveur (acceptant des connexions) et comme un client (connecté à un nœud parent).

Ce projet a été réalisé pour illustrer la gestion des entrées/sorties asynchrones à haute performance, permettant de gérer de multiples connexions simultanées sur un seul thread.

🏛️ Architecture Distribuée

Le réseau se construit dynamiquement grâce à deux types de lancements :

  • Le Nœud Racine (Root) : Initialise le réseau. Il ouvre un ServerSocketChannel pour écouter les connexions entrantes, mais ne se connecte à aucun parent.
  • Les Nœuds Enfants : Se connectent à un nœud "mère" existant (via OP_CONNECT), tout en ouvrant leur propre port pour accepter de futurs nœuds enfants, étendant ainsi l'arbre réseau.
  • Multiplexage : Toutes les opérations réseau (Accept, Connect, Read, Write) sont supervisées par un unique Selector, garantissant qu'aucun thread n'est jamais bloqué.

🧠 Mécanismes Techniques Clés

L'application s'appuie sur des concepts avancés pour éviter l'attente active et optimiser la RAM :

  • Machines à états (Readers) : Les trames réseau pouvant arriver fragmentées, l'application utilise des objets Reader. Si un paquet est incomplet, le lecteur sauvegarde son état en mémoire et libère le thread jusqu'à l'arrivée des octets manquants.
  • Gestion experte des ByteBuffers : Manipulation précise de la mémoire tampon avec des chorégraphies strictes de bascule (flip) et de compactage (compact) pour optimiser le transfert d'octets.
  • Isolation par Contexte : Chaque canal réseau est attaché à un Context dédié, possédant ses propres buffers d'entrée/sortie et sa file de messages asynchrone (ArrayDeque).
  • Mise à jour dynamique des Intentions : Le système bascule intelligemment entre les modes d'écoute (OP_READ et OP_WRITE) en fonction du remplissage des buffers pour minimiser la charge CPU.

⚙️ Utilisation et Déploiement

Le programme se lance depuis un terminal.

1. Lancer le nœud racine (Premier serveur) :

java -jar ServerStorUGE.jar <port_local>

2. Lancer un nœud enfant (Connexion à une mère) :

java -jar ServerStorUGE.jar <port_local> <ip_mere> <port_mere>

Projet réalisé dans le cadre du Master 1 Informatique (Université Gustave Eiffel).

About

Distributed network application for secure document storage and retrieval, featuring a custom protocol implementation (StorUGE RFC), 64-byte hash addressing, and asymmetric cryptography in Java.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages