Pages :: 1
Vous êtes nombreux depuis quelque temps a constater des lags importants sur le serveur RP, et particulier lorsqu'on fait du commerce.
Après de longue heure d'analyse, en particulier un trace des bases de donnees, j'en suis arrivé à la conclusion que le problème vient du plugin de question des comptes en banque: iconomy.
En effet, lors d'un achat d'un item dans une boutique, j'ai compté près de 90 connexions et 500 requêtes SQL à la base de donnée !
Pour ceux que ca pourrait interresser, petite apparté technique avec un extrait d'un exemple de transaction:
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='tronics'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='tronics'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='tronics'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT balance FROM iconomy WHERE username='tronics'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='server'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='server'
SHOW COLLATION
SET NAMES utf8mb4
SET character_set_results = NULL
SET autocommit=1
SELECT id FROM iconomy WHERE username='server'
etc...
Je pense que même ceux qui ne sont pas expers auront remarqué que ce plugin fait en permanence les mêmes requêtes. D'après mes constatations toutes ces requêtes aurait pu être résumé en seulement 4 !!!
En attendant, parce que depuis peut les 2 serveurs (de jeu et de base de donnée) ne sont plus sur les mêmes réseau, ça lag (car 500 requêtes ça peut prendre plusieurs seconde a s'exécuter, surtout sur des réseaux différents).
Les solutions ?
- Attendre que le plugin soit améliorer ? Ca n'arrivera jamais, il est abandonné. De plus même si ce n'était pas le cas, il serait extremement peu probable que les développeurs corrigent ce genre de problème, c'est un problème de conception (pas de parallélisation, et surcouche d'abstraction qui multiplie les requetes) qui neccessiterai de réécrire entièrement le plugin.
- Changer de plugin d'economie ? J'ai chercher... 90% des plugin d'economie ne gere tout simplement pas les base de donnée (je suis sidéré de voir ca, je comprend pas ...), pour les 2 ou 3 qui le gère, un bug (le notre), un autre neccessite la creation manuel des compte en banque par les joueurs (inutilisable donc), le dernier ne gere que l'importation des base de donnée des autres plugin opur en faire un ficheir texte (une aberation total). Reste un espoir, BSODEconomy qui a prévu de gérer mysql a terme... mais pour l'instant ce n'est toujours pas géré.
- Déplacer la base de donner sur le réseau du RP ? A ce moment la c'est le site qui lagguerai, je préfère encore avoir des problèmes avec le RP.
- Avoir plusieurs base de donnée ? Ça ne résoudrait rien, car le site interagit en permanence avec les données du jeu (page de profil, statistique, top, achat d'ecu, etc.) ca ne ferait qu'ajouter des problèmes
Je n'ai donc pas de solution à ce problème ...
En attendant, j'ai limiter les achats à 1 toutes les 5 secondes, ce qui ne fera pas disparaître le problème, mais j'espère limitera les lag du serveur.
La seule solution efficace à long terme serait de réécrire entièrement le plugin d'économie, mais la on aurait alors des problèmes de compatibilité avec les autres plugins (car il faut qu'ils arrivent a interagir). Ce n'est pas insurmontable (on a déjà vu ça, par exemple le plugin groupmanager simule le plugin Permission pour rendre les autres plugin compatible), mais c'est un boulot monstrueux, une aventure dans laquelle je ne suis actuellement pas près a me lancer.
Si il y a des volontaires, vous pouvez toujours m'en parler (et attention car j'ai un cahier des charges très strict :P ), sinon il faudra attendre :-(
Hors ligne
Fondateur et Administrateur de FR-Minecraft.net depuis 2010
Fondateur et Administrateur de Minecraft.Tools depuis 2014
Tronics Il y a un Iconomy 8 si je ne me trompe pas (repris par une autre personne) mais en cherchant sur bukkit je ne le trouve pas ><
Je te dit quoi si je le trouve.
Hors ligne
après quelque recherche je ne trouve rien.
Sinon tronics va tu le remplacer ou le mettre a niveau ?
et si tu le remplace nos compte seront-il toujours les même?
Hors ligne
Iconomy 8 ??? jamais entendu parlé.
J'ai bien entendu parler d'un iconomy 7, mais c'était un poisson d'avril.
Comme expliquer dans mon sujet, je n'ai pas de solution de remplacement, aucun autre plugin ne convient. Mais quoi que je fasse aucun écu ne sera perdu, soit en sur
Hors ligne
Fondateur et Administrateur de FR-Minecraft.net depuis 2010
Fondateur et Administrateur de Minecraft.Tools depuis 2014
oki =D , Bonne chance pour trouver le saint graal ^^
Hors ligne
Salut tout le monde :)
Alors j'ai étudier attentivement le problème ces derniers jours, le nez plongé dans le code source de iconomy ...
Et c'est non sans une certain fièreté que je peut vous annonce le passage de 500 requêtes à ... 4
Si ca interresse certaines personnes, voici techniquement les changements apportés:
1/ Suppression des multiples connexions SQL:
- J'enregistre la connexion courante et je la garde
- J'ai supprimé toutes les fermetures de connection
A chaque tentative de connection je retourne la connection déjà établit, ou je la refait si jamais il y a eut déconnection (ce qui normallement n'arrive jamais)Déjà la je passe de 90 connections à 1 seule (établit au lancement du serveur), et je divise les requêtes par 5: il en reste une centaine.
2/ Suppression des "SELECT id FROM iconomy WHERE username='tronics'" a répétition.
Cette requetes est lancer a chaque fois ou le plugin test l'existance d'un compte, c'est a dire très souvent dans le code source.
Solution simple: un cache. Je test une fois, je met en cache le resultat, et apres je regarde le cache.
J'ai réduit de 80% les requêtes, il en restait encore une vingtaine, principalement des lecture de la balance3/ Plus compliqué, pour un gain plus faible, mais tant qu'a faire autant aller jusqu'au bout de l'optimisation: réécriture des transactions.
Problème, Exemple: le joueur A veux donner 1 Ecu au joueur B, le plugin va récup le compte en banque de A et de B, va faire de multiple contrôle sur leur compte (en refaisant a chaque fois des requêtes sur leur compte).
- Dabord j'ai revu la méthode de calcul, ce n'est plus le plugin qui fait le calcul, mais la base de donnée (3 requetes en moins)
- J'ai réécrit les contrôles pour limiter les multiples rappel en base de donnée pour avoir le montant sur le compte du joueurAu final il reste 4 requetes:
- 2 lecture du compte en banque des joueurs A et B pour les vérifications
- 2 mise a jour des 2 comptesJ'avoue que j'aurai pu aller plus loin pour limité a 2 requetes seulement, mais ca serait des changements vraiment trop lourd, pour un gain trop faible
Je mettrai cette mise à jour en ligne dans la journée ce samedi.
Hors ligne
Fondateur et Administrateur de FR-Minecraft.net depuis 2010
Fondateur et Administrateur de Minecraft.Tools depuis 2014
hé bah, bien joué ^^
Hors ligne
Carabin, et fier de l'être.
GG Tronics =D
Hors ligne
Haha ! Je l'attendais celle-là !
Super boulot Tronics, gros merci à toi :)
Hors ligne
The Dude Abides
Encore une fois GG Un grand merci en tout cas
Hors ligne
Merci à tous
j'ai donc comme prévus mis cette nouvelle version du plugin en ligne dans l'après midi, et c'est avec un grand soulagement que j'ai constater qu'il n'y a plus eut aucun freeze de la journée, la charge serveur est maintenant linéaire, je pense que coté jeu les lags doivent être drastiquement réduit
Et voila un plugin de plus qui est maintenant géré par moi même ^^ (ça fait 7 en tout, dont 2 entièrement fait maison)
Hors ligne
Fondateur et Administrateur de FR-Minecraft.net depuis 2010
Fondateur et Administrateur de Minecraft.Tools depuis 2014
Bravo Tronics ;)
Sinon j'ai remarqué que le serveur ne tourne plus que a 40 voir 50 personnes donc je sais que c'est pas forcément l'endroit ou poster sa mais pourquoi ya de moins en moins de monde ?
Hors ligne
Si j'avais la réponse nous aurions tout le temps 120/120 joueurs
Hors ligne
Fondateur et Administrateur de FR-Minecraft.net depuis 2010
Fondateur et Administrateur de Minecraft.Tools depuis 2014
La réponse,je pense,c'est que les joueurs du rp vont pour le concours archi sur le créa.
Hors ligne
Esc
ouais bravo Tronics
Hors ligne
D'un autre coté si il y avait moins de feelback pour le minage ou les inventaires des coffres cela décourageraient moins de personnes a venir jouer sur le Rp !!
Dernière modification par NarKoTek77 (16/12/2012 05:10:15)
Hors ligne
C'est vrai que les lags font fuirent beaucoup de nouveaux joueurs ...
oui et pui blackwood et sparciate sont de moin en moin la ce la fait au moin 25 joueurs régulier qui parte !!!
Dernière modification par franck6949 (16/12/2012 12:55:33)
Hors ligne
Quel rapport avec les lags Franck?
Hors ligne
Ex-Seigneur Pumpkins!
suite au questionnement d Arthur et de tronic sur le dépeuplement du cerveur il n y a pas que le lag...
Hors ligne
Je pense qu'il veut dire que les lags ont fait (en partie ce n'est pas la seule raison) quitté le serveur à Spartiates et Blackwood.
Hors ligne
Pages :: 1