Releases: 742Team/STORM
HERMES™
STORM MICRO SERVICE™
-
CONTEXTE ET OBJECTIFS
Le micro service de chat "Storm Micro Service™" en Ruby est une initiative de recherche
destinée à pré-créer et valider la gestion d’un service de chat en temps réel dans le cadre
de la conception d'une application mobile. L’objectif principal est de fournir une solution
modulaire et évolutive, capable de gérer efficacement la communication en temps réel, la
persistance des messages et la gestion des utilisateurs, tout en offrant une interface de
type terminal riche en commandes. -
STACK TECHNIQUE
Langage et Framework :
- Ruby : Utilisé pour sa rapidité de prototypage et sa simplicité.
- Sinatra : Framework léger pour la création d’API HTTP, notamment pour l’authentification.
Communication en Temps Réel :
- WebSocket (via websocket-driver) : Diffusion en temps réel des messages dans les salons.
- gRPC (optionnel) : Communication bidirectionnelle efficace via Protocol Buffers.
Bases de Données :
- PostgreSQL : Utilisé pour la persistance des messages (texte, images, etc.). Le backend crée
automatiquement les tables nécessaires lors de la première exécution. - SQLite3 : Utilisé pour l’authentification, avec création automatique du fichier auth.db.
Protocole Protobuf :
- Utilisé pour définir les messages et services gRPC, permettant une communication structurée.
Dépendances Additionnelles :
- bcrypt : Pour le chiffrement sécurisé des mots de passe.
- colorize : Pour améliorer la lisibilité des logs serveur.
- Gemfile : Gestion des dépendances Ruby.
- FONCTIONNALITÉS CLÉS
-
Gestion des salons (rooms) :
• Création de salons via la commande /cr (création et basculement automatique).
• Changement de salon via /cd .
• Chaque salon possède un créateur, un historique, une liste d’utilisateurs et peut être modéré. -
Commandes de chat avancées :
• /help : Affiche la liste complète des commandes (formatée comme dans un terminal).
• /list : Affiche la liste des utilisateurs connectés.
• /info : Affiche des informations sur le thread (nom, créateur, utilisateurs).
• /history : Affiche l’historique des messages.
• /banned : Affiche la liste des utilisateurs bannis.
• /ban, /kick : Permettent de modérer le chat.
• /dm : Permet d’envoyer des messages privés.
• /color : Change la couleur du pseudo.
• /background : Change le fond d’écran pour tous.
• /typo : Change la police globale.
• /textcolor : Change la couleur du texte global.
• /clear : Efface l’affichage du chat côté client sans supprimer la persistance.
• /register et /login : Gèrent l’inscription et la connexion via HTTP (authentification basée sur SQLite3). -
Transformation des liens et prévisualisation d’images :
• Les URLs sont automatiquement transformées en liens cliquables.
• Les URLs menant à des images (jpg, jpeg, png, gif) affichent une prévisualisation intégrée via un tag.
- PERFORMANCE ET SCALABILITÉ
-
Concurrence et Réactivité :
• Le serveur de chat, basé sur WebSocket, est conçu pour diffuser les messages en temps réel
à tous les utilisateurs connectés.
• Grâce à Ruby et Sinatra, la solution est adaptée pour un prototype et des charges légères à
modérées. Cependant, pour des charges très élevées, des optimisations ou une réécriture partielle
(par exemple en Go) pourraient être envisagées. -
Persistance des Données :
• PostgreSQL gère la persistance des messages, permettant de conserver l’historique même en cas
de redémarrage.
• SQLite3 pour l’authentification assure une réponse rapide pour les opérations de login et register. -
Charge supportée :
• En environnement prototype, le système en Ruby peut supporter quelques dizaines à quelques centaines
de connexions simultanées sans problème majeur.
• En production, il est recommandé d’envisager une mise à l’échelle horizontale (avec plusieurs instances
du service derrière un load balancer) et éventuellement une réécriture partielle en Go pour une meilleure
gestion de la concurrence.
- SÉCURITÉ
- Chiffrement des mots de passe :
• Utilisation de bcrypt pour stocker les mots de passe en toute sécurité dans SQLite3. - Séparation des données :
• Les données d’authentification (SQLite3) sont séparées de la persistance des messages (PostgreSQL),
réduisant ainsi les risques en cas de faille. - Commandes de modération :
• Les commandes /ban, /kick, et /powerto permettent un contrôle efficace pour maintenir un environnement
sûr.
- PERSPECTIVES D'AMÉLIORATION
- Scalabilité horizontale :
• Utilisation d’un orchestrateur (Docker Compose, Kubernetes) pour déployer plusieurs instances et
équilibrer la charge. - Monitoring et Logging :
• Intégration d’outils comme Prometheus et Grafa
na pour surveiller la performance et la charge du service. - Interface utilisateur :
• Enrichir l’interface du client avec des transitions CSS avancées et des plugins (artifacts) pour
afficher des informations supplémentaires (météo, jeux, etc.). - Sécurité renforcée :
• Améliorer l’authentification via des tokens JWT, et chiffrer les communications avec TLS.
CONCLUSION
Le micro service "Storm Micro Service™" en Ruby constitue une solution complète et modulaire
pour expérimenter un service de chat en temps réel. Conçu pour la recherche, il intègre des fonctionnalités
avancées telles que la gestion des salons, des commandes personnalisées et la transformation des liens, tout en
utilisant deux bases de données distinctes pour l'authentification et la persistance des messages. Bien que
adapté pour des charges légères à modérées en prototype, des évolutions (scalabilité horizontale, réécriture en Go)
sont envisageables pour répondre à des exigences de production très élevées.
