Ohrido : Ce n'est pas le CPU qui pose problème dans ces cas mais l'envoi de paquets.
Prenons 100 personnes sur une map. 1 personne bouge, ca génère 100 'paquets' pour chacun des joueurs sur la map.
Si les 100 bougent en même temps, on a 100*100 soit 10000 paquets à envoyer. Le traitement et la génération des paquets suit largement, par contre l'envoi est plus problématique. Même sans prendre en compte la bande passante qui supporte ce genre de pics, il faut le temps de dépiler les messages à envoyer, écrire sur le socket, etc, etc.
Si on a pris 0.1ms par envoi (valeur d'exemple qui n'est en rien reflet de la réalité), ca fait 1 seconde pour traiter juste cette map. Tout le reste du serveur doit pourtant continuer à tourner à côté, etc.
Il n'y a donc pas simplement le CPU qui traite ces données, mais les interfaces réseau (et perso j'ai jamais tenté d'overclocker une carte réseau), étou² .
Ifym : tu es loin de la réalité. Nous n'interrogeons pas la base de données à chaque instruction d'un joueur, on est pas tarés non plus. L'intégralité des données est en mémoire sur le serveur, la base de données sert de support physique mais ne provoque de délai que lors de la connexion d'un personnage, et ce uniquement pour le joueur en cours de connexion. Le reste du temps, le serveur travaille sur ses données en mémoire et exécute simplement des mises à jour de la base en parallèle, mais en aucun cas quand tu te déplaces on attend que la base ait écrit la donnée pour que ton personnage bouge réellement.
De même, à l'ouverture d'un hdv, avec un éditeur de paquet (truc interdit que personne n'utilise, évidemment) tu verrais que le paquet contenant toutes les données est généré immédiatement. Si ensuite il y a beaucoup d'objets dans ce paquet, c'est uniquement du côté flash sur ton ordinateur qu'il y a un délai, le temps pour le client d'instancier ces objets, de construire ses interfaces et d'afficher les données. Si c'était le serveur qui imposait de lag à l'ouverture d'un hdv, tous les joueurs subiraient ce même lag en même temps que toi, or ce n'est pas le cas, fort heureusement.
Cara : Dofus a été concu initialement pour fonctionner sur un seul serveur. D'où pour nous l'obligation d'ouvrir des mondes différents sur d'autres serveurs, de séparer les mondes sur des serveurs distincts. Nous modifions régulièrement les principes de base du serveur, en externalisant les bases de données, l'identification, et bientôt le chat qui sera intégralement sur d'autres serveurs (si mes esclaves se dépèchent un peu, ça... mais s'ils se dépèchent pas ils auront pas à manger.) Mais nous ne pouvons hélas pas refondre intégralement le moteur du jeu, soit plus de 4 ans de développement, sans bloquer toute évolution du jeu pendant 10 ou 15 mois, et en sortant de là on est pas sûrs que la réécriture ne génère pas plein de bugs. On externalise ce qu'on peut, mais on ne peut pas reprendre les serveurs Dofus de 0, hélas.
Wakfu, par contre, est concu à la base en clustering de serveurs, donc il sera possible de rajouter à la volée des serveurs supplémentaires pour augmenter la puissance, ou le nombre d'interfaces réseau, pour améliorer performances et débit. Ceci nous donnera forcément une architecture beaucoup plus souple, et surtout plus robuste.
Depuis le changement de mercredi, les conditions sont nettement améliorées sur Djaul. Pourtant le serveur est une copie conforme de celui qui héberge Jiva, mêmes CPU, même mémoire, mêmes disques, mêmes cartes réseau, et l'installation du système est identique. Au niveau matériel, 2 processeurs sortant de la même chaine de production ont pourtant quelques différences minimes. C'est l'ensemble de ces différences qu'on essaie de tester, le but étant de trouver le serveur nickel où tous les composants sont en harmonie.
Et même sur 2 serveurs identiques (on a plusieurs fois fait des switch de serveurs entre 2 royaumes, Djaul, Jiva, et d'autres tout aussi chargés, mais on a vu que les problèmes ne dépendent pas exclusivement du serveur, mais aussi du comportement des joueurs dessus. Certains serveurs font plus de combats, ou plus de craft, ou collectionnent plus d'objets. Bref chaque royaume a des besoins spécifiques, et réussir à faire cohabiter tous ces éléments dans un même serveur, ca implique énormément de boulot.
On avance dans le bon sens je crois, mais rien ne dit que Djaul ne reposera pas un problème un peu différent d'ici quelques semaines, car les comportements des joueurs évolueront, et les besoins du serveur changeront, et ca ne collera peut être plus aux paramétrages actuels du serveur...
Pour en terminer, si je reviens un peu sur le client flash actuel, quand vous faites un /ping, ca ne reflète pas pour autant le délai de réponse du serveur. Essayez de faire un /ping sur une map vide, ou au zaap d'astrub, au même moment. Pourtant c'est le même serveur derrière... Il faut prendre en compte également que le calcul du temps de réponse est effectué par le client flash, et que le retour du ping passe par la même pile d'instructions que le reste du jeu. Donc si vous envoyez un /ping, le serveur répond en quelques millièmes de secondes, mais si juste avant il venait de vous envoyer 130 instructions, style du chat, des mouvements sur la map, etc.. et bien al réponse du ping sera traitée après ces retours. Vous aurez donc dans ce /ping le temps de réponse du serveur, mais également une grosse quantité de temps qui n'a rien à voir avec, qui en reflètera en fait que le lag de votre client.
J'espère que mes propos sont accessibles à tous, j'ai essayé de vulgariser un peu tout cela.
|