31/05/2015Principe de fonctionnement des serveurs d'ITH

Salut à tous,

Bonne année ! :p Enfin bon, je ne vais pas blablater trois heures, et comme vous attendiez cette actualité depuis les 6 mois habituels, je me lance !

Donc aujourd'hui, on parle un peu d'ITH ! Ce jeu sur lequel je distille les infos au compte goutte. Vous aimeriez bien en savoir plus dessus, n'est-ce pas ? Ce que vous pourrez faire dans le jeu ? Le but ? Des images, des vidéos ? Hé bien ne vous inquiétez pas, je ne vais pas du tout vous parler de ça maintenant ! Je vais un peu vous parler du fonctionnement des serveurs, qui n'est pas si classique que ça, et les raisons qui m'ont poussés à pondre ce système à priori tordu.

Rappel pour ceux qui n'ont pas suivi ou on oublié : ITH, c'est un jeu bac à sable (exemples connus du genre : Minecraft, Terraria, Starbound) en 2D, dans un univers spatial (vous voyez, des planètes, des vaisseaux spatiaux, tout ça) relativement réaliste (du genre KSP, en bien moins compliqué tout de même, mais ne vous inquiétez pas, vous aurez droit à vos crash avant de réussir votre premier prototype de fusée vous permettant de ficher le camp de votre planète de départ), et évidemment dans un univers (théoriquement) infini, généré procéduralement. Et tout ça avec une possibilité de jouer à plusieurs (beaucoup).

Mais ! Vous allez me dire, l'espace c'est grand, et tu n'as pas un ordinateur de la NASA à ta disposition pour simuler tout ça. En effet. De plus, de la manière dont j'ai pensé le jeu, ITH ne sera à son maxium qu'avec un grand nombre de joueurs. Car quand on y pense, ça peut être chouette au début de jouer seul ou avec 2-7 potes sur sa planète, mais une fois qu'on arrive à la quitter pour seulement découvrir qu'il n'y a absolument aucun être vivant au delà, sur ces infinités d'autres endroits, c'est un peu décevant, et devient vite ennuyant. On veut des combats spatiaux, des alliances entre planètes ! Et pour ça, il faut du monde et beaucoup de puissance de calcul. Je pourrais donc fournir un serveur principal d'ITH (pas question d'empêcher les joueurs de créer leurs propres serveurs cependant, mais juste d'assurer un serveur un minimum peuplé plutôt que de disperser les quelques joueurs qui seront là dès la sortie du jeu). Bonne idée. Cependant, je ne suis pas assez riche pour me payer un serveur qui pourrait tenir la charge, et si jamais j'arrête de payer tous les joueurs n'auront que leurs yeux pour pleurer leurs heures de jeu perdues. Et soudain...

Principe d'un réseau de serveurs, ou le serveur décentralisé

Bien sûr ! Si je ne peux pas payer un seul gros serveur, il faut faire payer les joueurs à sa place diviser ce serveur en plusieurs serveurs peu puissants ! D'où l'idée de créer un réseau de serveur, ou dit d'une autre manière, un serveur décentralisé.

Le principe est simple (la pratique un peu moins) : au lieu qu'un serveur ne se charge de simuler tout l'univers connu tout seul, plein de serveurs se chargeront chacun de simuler leur petite partie de l'univers, selon leurs performances. En assemblant tous ces serveurs, on pourrait ainsi simuler un univers entier.

C'est l'idée de base. Allons un peu plus loin dans le fonctionnement : tous les serveurs communiquent entre eux, et lorsqu'un joueur se connecte à l'un des serveurs, il est expédié sur le serveur en charge de la zone dans laquelle il était. Ainsi, quelque soit le serveur auquel il se connecte, si il appartient au même réseau de serveurs, il se retrouvera bien dans le même univers, au même endroit qu'avant, comme si de rien n'était. Les serveurs se chargeront ainsi de trouver les zones où des joueurs sont connectés et de se répartir les zones à simuler, selon leurs performances.

Une conséquence de cette distribution très intéressente : tout le monde pourra contribuer au réseau. Un joueur lambda pourra connecter son ordinateur peu puissant au réseau, et se chargera de simuler une petite zone, tandis qu'un autre joueur généreux (e.g., vous) aura loué un serveur professionnel pour simuler une grosse zone. Chacun contribue comme il le peut, et tous ces efforts assemblés, on a un serveur super-uber-puissant.

Un autre avantage est que tant qu'il y aura des joueurs, le serveur sera toujours là. En effet, puisque chaque joueur simule l'univers dans lequel il évolue (dans l'idéal cependant, je ne pourrais oubliger des joueurs à utiliser de leur puissance de calcul pour les serveurs d'ITH, bien que cela sera fortement encouragé :D), les serveurs ne fonctionneront plus que quand il n'y aura plus personne pour joueur dessus. Donc, même si je décide de subitement arrêter ITH, rien ne vous empêchera de le continuer sans moi, contre ma volonté (et je ne pourrais pas me plaindre, puisque j'ai moi-même conçu ce système).

Après, ce système n'est pas sans failles. Déjà, afin que chaque serveur puisse changer de zone simulée en fonction des besoins des joueurs, il faudrait que chaque serveur télécharge l'intégralité de l'univers, qui risque de vite grossir avec le temps. Il y a cependant des moyens de ne télécharger une partie de l'univers seulement quand elle devient nécessaire (comme le font certains clients Bitcoin avec la blockchain), mais je n'ai pour l'instant pas intégré ces modifications dans le fonctionnement détaillé des réseaux de serveur.

En parlant de choses pas encore conçues, certains d'entre vous doivent avoir remarqué une faille évidente dans le système que j'ai détaillé plus haut... non ? Mais si, si chaque joueur peut contribuer à la simulation de l'univers... imaginez, j'ai bien dit imaginez, personne de sensé ne ferait telle chose, que le joueur (oh et puis non, il ne mérite même pas qu'on l'appelle comme ça, appelons le "tricheur"), le tricheur modifie le code du serveur, pour par exemple donner des ressources infinies à une liste de joueur (dont lui évidemment, c'est un tricheur après tout), il s'arrage pour aller dans la zone de l'univers qui a été assignée à son serveur, et paf, l'économie glactique s'effondre, un mystérieux joueur salaud nommé "Tchiteur2000" domine subitement le monde, tout le monde quitte le jeu car c'est n'importe quoi, ITH sombre dans l'oubli, et Thomas99 se lance dans la création d'un jeu mobile pay-to-win. Personne ne veut ça, n'est-ce pas ? Moi non plus, mais je ne peux cependant contrôler l'idiotie des gens, il faut donc rendre tout ces problèmes impossibles au niveau du fonctionnement même des réseaux de serveur. Il faut donc effectuer des vérifications sur ce que fait un serveur, et si un problème est détecté, le serveur fautif pourra gentiment se faire rembarrer par les autres serveurs (en assumant que la majorité des serveurs soient non tricheurs, ce qui devrait être le cas si les serveurs tricheurs se font éjecter dès qu'ils arrivent sur le réseau). Donc voilà l'idée, que je ne peux cependant pas trop détailler ici car de un, c'est plutôt chiant, et de deux, je n'ai pas fini ce système. Mais à priori, le système sera entièrement automatisé : chaque serveur simulera sa zone propre, plus une ou des zones déjà simulées par un autre serveur, et si jamais une différence est constatée entre les résultats des différentes simulation de la même zone, les autres serveurs se chargeront de détecter le serveur fautif et de l'éliminer, tout en effaçant toute trace des ses crimes. Cependant, si vous avez déjà tenté de concevoir un système sécurisé, vous devez savoir à quel point c'est compliqué de trouver un système qui ne présente pas de faille, et combien de scénarios il faut imaginer pour s'en assurer. Et pour l'instant, je n'ai pas encore trouvé le système, et si à priori ça s'approche de ce que j'ai présenté plus haut cela pourrait être totalement différent.


Donc voilà, vous savez désormais quelle est l'architecture réseau d'ITH, sorte de peer-to-peer entre serveurs. Même si je ne me suis pas insipré d'un modèle déjà existant précis, ce genre de modèle a déjà fait ses preuves avec par exemple la plateforme de calcul distribuée BOINC ou encore le réseau Bitcoin/Dogecoin. Il ne manquait plus que de l'adapter à un jeu vidéo, ce qui convient parfaitement à ITH.

Même si il me reste encore pas mal de parties de ce système à faire passer de la théorie à la pratique, une partie du système est déjà implementée dans le code d'ITH, et est à priori la dernière grosse partie back-end d'ITH avant de reparler du contenu à proprement parler. Cela me semblait cependant être une chose importante dont il fallait que je parle à un moment, vu la complexité de la chose et les gros avantages que cela apporte au jeu. Et si vous vous en fichez de ce qui se passe derrière, n'oubliez pas de revenir bientôt ici, je reparlerai de choses qui vous intéressent peut-être un peu plus ! :D

Aller, salut ! On se revoit à coup sûr le 30 novembre, et peut-être même un peu avant...

N'oubliez pas de commenter ! Si vous trouvez ce système inutile, pensez à quelque chose à rajouter ou à quelque chose qui n'a rien à voir, n'hésitez pas et dites-le !

PS: Bon ok, encore une fois je suis un peu en retard, mais cette fois j'ai une excuse :p ! J'avais écris l'actualité à l'avance mais n'ai pas eu accès au fichier où je l'avais écrite le jour J... du coup j'en ai profité pour bien l'étoffer, ça doit être l'actualité la plus longue que j'ai jamais écrite ! Pour les archives, aujourd'hui on est en réalité le 5/06/2015.




Commentaires

Moi_prods, le 06/06/2015 à 03:02:59

Bien le bonjour l'ami !
Que ça fleure bon le devblog en devenir ici :p !
Ma foi, j'allais nonchalamment protester contre ce retard infâme mais force est de constater que l'attente en valait le chandelier en or massif Louis XVI... Cette lecture fut fort enrichissante, même si un peu compliquée, et désormais n'importe quel ignorant osant poser l'embarrassante et existentielle question "Saperlipodiantre, comment fonctionnent les serveurs d'ITH ?!" IL. AURA. SA. RÉPONSE.
Et soit dit en passant, j'ai vraiment hâte de l'actualité de novembre (à l'heure, hein ?!) qui promet d'être au moins aussi intéressante.

Moi_prods.
P.S.: Connaitra-t-on un jour ne serait-ce que l'année de sortie d'ITH ?


Ajouter un commentaire...