Skip to content
Yann Lastapis edited this page May 19, 2015 · 12 revisions

Serveur

Architecture Server

NodeJs + RequireJs

https://nodejs.org/ / http://requirejs.org/ Plateforme Javascript permettant un mode de programmation événementiel "StateLess" et pensé pour les applications modulables nécessitant une montée en charge importante.

PomeloJs

PomeloJs

http://pomelo.netease.com/ Permet de créer une architecture distribuée et modulable. Il créera ainsi de nouveaux serveurs virtuels en fonction des besoins, à la volée. Cette architecture distribuée s'organise autour de deux types de serveurs : Applicatifs (A) et Connecteurs (C), ainsi qu'un seul et unique serveur de type Master (M)

  • Le Master se chargera de "booter" virtuellement les serveurs A & C requis.
  • Le Connecteur établira une connexion permanente entre le client (Au travers de NGinx) et le serveur Applicatif, via des appels RPC. Un "Keep-Alive" sauvegardera à intervalles régulier le statut de l'utilisateur connecté, et les serveurs Applicatifs associés dans Redis.
  • Le serveur d'Application enfin effectuera les traitements logiques requis par les actions utilisateur.

Express

http://expressjs.com/ Mini-framework web NodeJs qui va permettre de gérer entre autres les Routes de notre application.

Socket.IO

http://socket.io/ Bibliothèque Javascript qui permet de faire de la communication en temps réel entre le client et le serveur, via des "sockets". Socket.io détermine pour chaque client quelle est la méthode de communication temps réel la plus adaptée, et essaiera "d'améliorer" le type de connexion, en fonction de ce que le client est capable d'accepter. Par exemple, si le navigateur ne support pas WebSocket mais que Flash est installé, socket.io passera par Flash pour faire de la communication temps réel. Sinon, il peut utiliser d'autres techniques comme l'AJAX Long Polling.

Types de connexions : WebSocket / Adobe Flash Socket / AJAX long polling / AJAX multipart streaming / Forever Iframe / JSONP Polling

MongoDb

https://www.mongodb.org/ Système de gestion de base de données orientée documents, qui permet de stocker des objets sous format JSon. Vu qu'il n'y a pas de structure définie, on peut stocker tout et n'importe quoi, il faut donc faire attention à bien traiter les données récupérées. MongoDb Servira ici de "ColdStorage", soit l'ensemble des données applicatives (Comptes clients, messages envoytés, etc...) qui ne doivent surtout pas être perdues en cas de crash de la plateforme.

Redis

http://redis.io/ Système de gestion de base de données clef-valeur scalable, très hautes performances. Redis Servira ici de "HotStorage", soit l'ensemble des données qui peuvent être perdues en cas de crash de la plateforme (Données de connexion, statut actuel des utilidateurs et connecteurs, etc...).

NGinx

http://nginx.org/ Nginx est un serveur asynchrone par opposition aux serveurs synchrones où chaque requête est traitée par un processus dédié. Au lieu d'exploiter une architecture parallèle et un multiplexage temporel des tâches par le système d'exploitation, Nginx utilise les changements d'état pour gérer plusieurs connexions en même temps. Il sera utilisé ici en amont de la connexion Client aux Connecteurs, et aura plusieurs rôles à sa charge :

  • Sécurité : Absorption de certaines attaques (Ddos par exemple)
  • Reverse proxy : S'interfacer entre le client et le Connecteur.
  • Load Balancing : Détecter la charge de chaque Connecteur et brancher le client sur le serveur le moins "chargé". Démarrer de nouveaux serveurs virtuels de Type C si ceux existant sont saturés

Client

Clone this wiki locally