Vous n'êtes pas identifié(e).
Le domaine est devenu une part essentielle du GP, car les infrastructures qui sont dedans ou dehors ont des cycles de vie radicalement différents.
Le domaine d'un joueur impacte son propre domaine, celui des voisins, les facteurs de production de ses infrastructures et enfin les niveau de batiments dans son fief.
Pour avoir une expérience optimale de jeu, chaque action qui a une influence sur le domaine déclenche le calcul complet du domaine de tous les joueurs : création d'infrastructure, suppression, agrandissement, déplacement, changement de propriétaire (forteresse), passage en mode vacance, création ou suppression de liens entre joueurs, changement de niveau de la propriété technologie.
Cet algo :
1- remet les domaines à 0
2- recalcule les domaines de tout le monde
3- supprime les infrastructures devenues invalides
4- recalcule les productions de toutes les infrastructures
5- recalcule les niveaux de batiment de tous les fiefs
6- déplace les serfs excédentaires de tous les batiments de tous les fiefs
Pourquoi ça merde autant ?
Parce que cet algo est déclenché plein de fois en parallèle par des actions différentes de joueurs différents et chaque execution travaille sur la même base de donnée.
Même s'il prend que quelques centaines de milli-secondes, on a rapidement observé des problèmes, par exemple :
# Lorsque le lancement A en est à l'étape 3 et que le lancement B en est à l'étape 1 => toutes les infrastructures de la carte sont considérées comme invalides et sont toutes détruites... super.
# Lorsque le lancement A en est à l'étape 6 et que le lancement B en est à l'étape 5 => pendant une fraction de seconde les batiments sont tous de niveau 30 et les serfs sont tous déplacés.
# Lorsque le lancement A essaye d'accéder à la table "bâtiment" pour la mettre à jour alors qu'elle est utilisée par le lancement B, on a un "deadlock" et A échoue.
Qu'est-ce qui a été tenté ?
J'ai essayé de raccourcir les temps d'exécution, de mettre un systeme de ré-exécution en cas de "deadlock" mais le problème perdure, on l'a encore vu hier.
J'ai aussi essayé de faire des exécutions de la totalité de l'ago en séquentiel avec un verrouillage des tables entre deux mais ce n'est pas possible au niveau de innodb car il y a des tables crées à la volées que l'on ne peut vérouiller.
C'est très compliqué d'anticiper ces problèmes ou de les corriger car cela n'arrive qu'avec beaucoup de joueurs et beaucoup d'actions en même temps. C'est un peu pas de chance quand ça arrive mais il suffit que ça arrive pour avoir de grosses conséquences.
Vers une vraie solution
Pour essayer de faire un compromis entre expérience de jeu (je mets une forteresse => je veux voir le domaine s'agrandir tout de suite) et limiter ces problèmes de concurrence, je vais couper la poire en deux.
=> garder les modifications de domaine et d'infrastructure à chaque fois avec des verrouillage de la table => au pire on aura une légère dégradation de performance avec une execution qui devra "attendre" la fin de la précédente.
=> faire les modifications plus "risquées" (étape 3) toutes les heures en une seule fois pour tout le monde
Je vais essayer de faire tout ça rapidement pour mettre ça derrière nous !
Marie, gouvernante du clan Samarie.
(HRP: Admin)
Hors ligne
J'ai rien compris mais c'est toi le chef, chef.
Bon courage et merci pour tout !
Duc de Nortmannie, Seigneur de l'Ouest
"Ce qu'avons, Gardons ! "
Hors ligne
Merci Antoine de ton investissement.
Il ne peut avoir que de l'amélioration
Courage je sais que c'est parfois compliqué de choisir performance ou stabilité.
Si on peut tuer par amour, alors on peut sauver une vie par haine.
Hors ligne
J'ai rien compris non plus , mais c'est vachement important de nous tenir au courant quand même . Super !
Bah , j'ai quand même compris que ca ira mieux avec un peu plus de temps . Aucun soucis . Bon courage et merci .
Hors ligne
pour vulgarisé pour les néophyte, le dieu des forges dans sa grande magnificence à voulu créer un univers élégant où toute les actions serais résolu en même temps, malheureusement il avais mal jugé le bordel causé par les mortels par leurs activités à tout va, et la fabrique de la réalité commença à s'effrité, le dieu des forges essaya de sauver le cosmos mais malgré sa sagesse, son l'intellect et la puissance du saint clavier, la fabrique de la réalité ne supporta pas l'activité de tous les mortels et éclata, forçant le le dieu des forges tout puissant à inverser le cours du temps afin de sauver le cosmos.
désormais le dieu tout puissant est est obligé de ralentir le temps s'écoulant dans le cosmos et de réordonné au maximum les actions des mortels pour qu'ils ne causent pas un nouveau désastre environnemental de catégorie cosmique
quelque propositions:
-exécuter les rumeurs sur les infra qu'a la fin de la journée ou les viré le temps que ça se calme
-calculer les domaines 3 fois par jour si vraiment ça surcharge trop
et n'oublie pas de pas trop te prendre la tête on peut largement prendre notre mal en patience
PS: j'ai oublié d'écrire que les mortels étaient des enfoirés qui grille la priorité, mais bon si ma connaissance du code est bonne ça change pas grand chose à ma vulgarisation : surcharge du serveur+soucis de priorité en conflit, les meilleurs confirmerons si ma vulga est bonne
Dernière modification par GrandJarl (2024-10-09 00:11:01)
vous trouverez ici une rapide explication et un historique de la maison: https://www.okord.com/ranking.html?profile-3451
Le Grand Jarl Actuel: https://www.okord.com/ranking.html?profile-21203
Hors ligne
Tu m’a fait marrer merci GrandJarl ;-)
J’ai pu avancer sur le sujet hier soir mais je l’ai pas encore mis en ligne. Le coup de la mise à jour à minuit je l’ai pas senti haha.
Je continue de tester ça auj et je le mettrait en ligne rapidement. J’ai changé l’approche de l’algo pour ne mettre à jour que ce qui a été modifié sans passer par des d’étapes de remise à 0. Cela devrait éviter les cata en cas d’exécutions en parallèles.
Du coup ça se tente de remettre la mise à jour systématique pour tout le monde, ce qui offre la meilleur expérience de jeu.
Marie, gouvernante du clan Samarie.
(HRP: Admin)
Hors ligne
J'ai mis en ligne la nouvelle mouture, à voir ce que ça donne (et j'espère pas de suppression massive d'infrastructures )
Marie, gouvernante du clan Samarie.
(HRP: Admin)
Hors ligne
Et si tu la lances 1 fois par minute ou x minutes ?
Si c’est juste le fait d’en avoir lancé 2 en même temps ou presque, alors prends la main et lance 1 fois toutes les x périodes.
Après je ne suis pas dieu ni informaticien, je ne me rend pas compte de l’impact de ma remarque ^^
Lignée des Trofs, et autres successeurs
Hors ligne
Finalement j’ai gardé le lancement à la demande mais j’ai changé l’algo pour modifier que les trucs qui ont changés.
Marie, gouvernante du clan Samarie.
(HRP: Admin)
Hors ligne