Sarki Server Manager (SSM)
La description du fonctionnement du service de gestion des serveurs à la demande.
SSM désigne le système composé de multiples projets (serveur web, plugins, libs...) qui est, d'une certaine manière, la colonne vertébrale de Sarki. Sans lui, les mini-jeux ne démarreraient pas.
Voici la liste des différents composants de SSM :
Plugin de mini-jeu
Plugin connector de mini-jeu
Les différents composants de SSM communiquent exclusivement via la fonctionnalité Pub/Sub de Redis.
Vous pouvez retrouver l'ensemble du code source des projets SSM sur le Gitea.
SSM fonctionne comme suit (vous trouverez sur les pages respectives des composants plus d'informations les concernant) :
Sur le serveur lobby, les plugins ne contiennent pas la logique des jeux. Ils ne servent qu'à gérer les boutiques de leur mini-jeu, et gère le joueur quand il souhaite jouer à un jeu (via une commande par exemple /minijeu join). On appelle ces plugins les plugins "connector".
Une fois la demande du joueur reçue par le plugin connector associé, le connector transmet l'information à SSM-API, un serveur web Spring. Celui-ci a accès en base de donnée à la liste des "types d'instances" (instance_types), id est les différents mini-jeux.
L'API traite donc la demande du joueur, vérifie si il est déjà en partie par exemple, si il est propriétaire d'une party pour également potentiellement transférer les joueurs membres de sa party dans le mini-jeu qu'il veut rejoindre. Si l'API décrète que le joueur est apte à aller dans une partie, elle va se charger de lui trouver une partie existante prête à l'accueillir, ou bien d'en créer une nouvelle sur un serveur à la demande ayant de la place, ou bien sur un nouveau serveur à la demande qu'elle créera dans la foulée.
Une fois le serveur à la demande démarré, le plugin ReadyCheck enverra un message à l'API comme quoi le serveur est prêt à accueillir les futurs joueurs. L'API demandera donc au serveur de jeu d'accueillir les joueurs et les transférera dessus via SSM-Bungee, plugin installé sur le proxy.
C'est sur les serveurs de jeu que se trouvent le plugin de mini-jeu avec la logique dedans. Chaque serveur à la demande peut supporter un certain nombre (configurable) de parties simultanément. C'est pourquoi tous les plugins de mini-jeux utilisent le système de monde in-memory Slime.
L'API possède vraiment ce rôle de chef d'orchestre du système et possède toutes les informations en temps réel (stockées dans Redis également).
Les serveurs à la demande sont créés selon un modèle prédéfini de serveur, via une image Docker stockée dans le registre Docker de Gitea. On appelle ce modèle "Instance Config". Les dépôts Gitea se terminant par "InstanceConfig" sont ces fameuses templates.
Last updated