Hier, nous avons procédé à une importante augmentation des capacités serveurs de Board Game Arena.
Auparavant, le service tenait à peu près la route jusqu'à ~1100 joueurs jouant simultanément, mais au delà il commençait à y avoir des ralentissements, avec trop d'erreur du type "BGA mainsite does not respond" ou "Mise à jour serveur en cours" ou encore "Error with notification service".
Pour ceux qui sont intéressés par les coulisses du service, voici quelques explications détaillées sur "pourquoi on a mis si longtemps à réagir", ce qui nous avons fait et pourquoi c'était pas simple.
Plus de serveurs = plus de capacité ?
BGA est assez différent de la plupart des sites web, car il est quasiment entièrement basé sur le "temps réel" : vous n'avez pas besoin de rafraîchir votre navigateur pour voir que quelqu'un a créé une table, ou que votre adversaire a joué.
L'architecture que nous avons mise en place pour faire cela est plus complexe que celle d'un site web "standard". Très schématiquement, pour un site "standard", lorsque vous voulez augmenter la capacité du site, vous rajoutez des serveurs supplémentaires. Plus de serveurs = plus de capacité. Ca parait simple et direct.
Le serveur temps réel
C'est vrai en partie pour BGA - et nous ajoutons régulièrement des nouveaux serveurs - mais en partie seulement. En particulier, ce n'est pas du tout le cas pour le serveur "temps réel", celui qui vous permet de recevoir les coups en temps réel. C'est le fameux "notification service" qui envoie des vilains messages d'erreurs rouges quand il n'est pas content (ou surchargé, plus probablement).
Et donc, pourquoi ne peut-t on pas tout simplement ajouter "plus de serveurs temps réel" ?
Tout simplement parce que tout le monde doit être connecté au même serveur temps réel. Sinon, quand vous jouez un coup, votre adversaire n'en sera pas averti si il est connecté à un serveur différent. C'est pourquoi nous utilisons une technologie spéciale (NodeJs) qui permet à beaucoup beaucoup de joueurs d'être connectés sur le même serveur, et que ça tienne quand même la route. Et c'est comme ça que ça fonctionne depuis le début de BGA.
Il y a quelques semaines, BGA a gagné en audience, et le serveur temps réel n'était plus en capacité de digérer tout cela à l'heure de pointe. Cependant, le serveur que nous utilisions était déjà l'un des plus puissants disponibles, donc il était clair que nous avions atteint la limite de l'approche "classique" et historique de BGA.
Croissez et multipliez
Donc voilà ce que nous avons fait : nous avons coupé en quatre le serveur temps réel, qui est devenu 4 serveurs indépendants - ce qui (en théorie) multiplie par 4 la capacité "temps réel" de BGA.
Mais pour faire cela, nous avons du faire en sorte que ces 4 serveurs communiquent ensemble en permanence pour rester bien synchronisés, vous permettant ainsi de pouvoir jouer ensemble si vous êtes connectés à des serveurs différents. Pour cela, nous avons du reprendre complètement la logique temps réel de BGA en en réécrivant 40 à 50%. En réalité cela ne représente pas un si gros travail que cela, mais c'est quelque chose d’extrêmement sensible - en gros la moindre erreur peut tuer le service en quelques secondes.
Le jour d'après
Aujourd'hui, le service semble stable, et la plupart des soucis que nous avons rencontrés hier ont été résolus. Cependant, nous avons dû modifier un composant sensible et important en très peu de temps, donc il se peut qu'il reste des problèmes que nous n'avons pas encore rencontré.
Si vous trouvez l'un de ces problèmes, merci de le signaler dans le système de bug ou directement en commentaire de ce message.
Note : si votre problème se produit depuis longtemps, c'est probablement qu'il n'est pas lié aux opérations qui ont eu lieu hier.
Merci à tous de rendre ce service aussi populaire, et désolé pour l'impact que ces changements - nécessaires - causent sur le service.
... et tant qu'à avoir de la capacité "temps réel" supplémentaire on en a profité pour ajouter la fonction "X est entrain d'écrire qqchose..." sur les fenêtres de chat
Auparavant, le service tenait à peu près la route jusqu'à ~1100 joueurs jouant simultanément, mais au delà il commençait à y avoir des ralentissements, avec trop d'erreur du type "BGA mainsite does not respond" ou "Mise à jour serveur en cours" ou encore "Error with notification service".
Pour ceux qui sont intéressés par les coulisses du service, voici quelques explications détaillées sur "pourquoi on a mis si longtemps à réagir", ce qui nous avons fait et pourquoi c'était pas simple.
Plus de serveurs = plus de capacité ?
BGA est assez différent de la plupart des sites web, car il est quasiment entièrement basé sur le "temps réel" : vous n'avez pas besoin de rafraîchir votre navigateur pour voir que quelqu'un a créé une table, ou que votre adversaire a joué.
L'architecture que nous avons mise en place pour faire cela est plus complexe que celle d'un site web "standard". Très schématiquement, pour un site "standard", lorsque vous voulez augmenter la capacité du site, vous rajoutez des serveurs supplémentaires. Plus de serveurs = plus de capacité. Ca parait simple et direct.
Le serveur temps réel
C'est vrai en partie pour BGA - et nous ajoutons régulièrement des nouveaux serveurs - mais en partie seulement. En particulier, ce n'est pas du tout le cas pour le serveur "temps réel", celui qui vous permet de recevoir les coups en temps réel. C'est le fameux "notification service" qui envoie des vilains messages d'erreurs rouges quand il n'est pas content (ou surchargé, plus probablement).
Et donc, pourquoi ne peut-t on pas tout simplement ajouter "plus de serveurs temps réel" ?
Tout simplement parce que tout le monde doit être connecté au même serveur temps réel. Sinon, quand vous jouez un coup, votre adversaire n'en sera pas averti si il est connecté à un serveur différent. C'est pourquoi nous utilisons une technologie spéciale (NodeJs) qui permet à beaucoup beaucoup de joueurs d'être connectés sur le même serveur, et que ça tienne quand même la route. Et c'est comme ça que ça fonctionne depuis le début de BGA.
Il y a quelques semaines, BGA a gagné en audience, et le serveur temps réel n'était plus en capacité de digérer tout cela à l'heure de pointe. Cependant, le serveur que nous utilisions était déjà l'un des plus puissants disponibles, donc il était clair que nous avions atteint la limite de l'approche "classique" et historique de BGA.
Croissez et multipliez
Donc voilà ce que nous avons fait : nous avons coupé en quatre le serveur temps réel, qui est devenu 4 serveurs indépendants - ce qui (en théorie) multiplie par 4 la capacité "temps réel" de BGA.
Mais pour faire cela, nous avons du faire en sorte que ces 4 serveurs communiquent ensemble en permanence pour rester bien synchronisés, vous permettant ainsi de pouvoir jouer ensemble si vous êtes connectés à des serveurs différents. Pour cela, nous avons du reprendre complètement la logique temps réel de BGA en en réécrivant 40 à 50%. En réalité cela ne représente pas un si gros travail que cela, mais c'est quelque chose d’extrêmement sensible - en gros la moindre erreur peut tuer le service en quelques secondes.
Le jour d'après
Aujourd'hui, le service semble stable, et la plupart des soucis que nous avons rencontrés hier ont été résolus. Cependant, nous avons dû modifier un composant sensible et important en très peu de temps, donc il se peut qu'il reste des problèmes que nous n'avons pas encore rencontré.
Si vous trouvez l'un de ces problèmes, merci de le signaler dans le système de bug ou directement en commentaire de ce message.
Note : si votre problème se produit depuis longtemps, c'est probablement qu'il n'est pas lié aux opérations qui ont eu lieu hier.
Merci à tous de rendre ce service aussi populaire, et désolé pour l'impact que ces changements - nécessaires - causent sur le service.
... et tant qu'à avoir de la capacité "temps réel" supplémentaire on en a profité pour ajouter la fonction "X est entrain d'écrire qqchose..." sur les fenêtres de chat