Conception d'un serveur de jeu de Mahjong cloud-native avec Golang et pratiques DevOps

Conception d'un serveur de jeu de Mahjong cloud-native avec Golang et pratiques DevOps

Cet article détaille la mise en place d'un serveur de jeu de Mahjong production-ready en Golang, intégrant des pratiques DevOps, GitOps, Kubernetes, BPF et SRE. Nous explorerons la création du scaffolding, les concepts de base, et les flux de démarrage du serveur.

Introduction au projet

Il s'agit d'un projet complet qui met en œuvre les principes DevOps/GitOps et le déploiement sur Kubernetes. Le code source est basé sur le projet open-source Nanoserver, adapté pour le jeu de Mahjong. L'objectif est de fournir un guide pratique pour le développement backend en Golang, en mettant l'accent sur le partage de mémoire par communication.

Structure du scaffolding

Le scaffolding extrait de Nanoserver permet de comprendre rapidement l'archietcture du serveur de Mahjong. Nous commençons par une architecture monolithique pour saisir l'ensemble, puis évoluons vers un système distribué avec microservices.

Arborescence des fichiers

  • configuration/ - Fichiers de configuration
    • config.toml
  • database/ - Gestion de la base de données avec XORM
    • model/ - Schémas de base de données
    • constantes.go, logger.go, modele.go
  • interne/ - Code interne au serveur
    • jeu/ - Logique du serveur de jeu
      • chiffrement.go, gestion.go, manager.go
    • web/ - Serveur web pour les API
      • serveur.go
  • bibliotheque/ - Bibliothèques utilitaires partagées
    • outilalgo/ - Fonctions utilitaires courantes
    • chiffrement/ - Outils pour MD5, RSA, SHA1, etc.
    • gestionerreurs/ - Gestion centralisée des codes d'erreur
    • listeblanche/ - Validation de liste blanche
  • protocole/ - Définitions des protocoles de jeu
    • requete.go
  • principal.go - Point d'entrée de l'application

Rappels fondamentaux sur Go Modules

Go Modules est le système de gestion des dépendances en Go. Il permet de gérer les packages tiers de manière reproductible. Voici les commandes de base :

go mod init  # Initialise un nouveau module dans le répertoire courant
go mod tidy  # Ajoute les dépendances manquantes et supprime les inutilisées
go mod download  # Télécharge les modules dans le cache local

Pour plus d'informations, consultez l'aide intégrée avec go help mod.

Flux de démarrage du serveur Mahjong

Le serveur démarre à partir de principal.go. Voici les étapes clés :

Chargement de la configuration

Le fichier config.toml contient les paramètres essentiels : configuration de base, serveur web, serveur de jeu, base de données, liste blanche et mises à jour client.

Démarrage du serveur de jeu

La fonction jeu.Demarrage() initialise le serveur en plusieurs phases :

  1. Affichage des informations de version et paramètres critiques, comme l'intervalle de heartbeat.
  2. Configuration des fonctionnalités métier, par exemple les cartes de salle.
  3. Enregistrement des composants Nano pour la logique de jeu, incluant la gestion des joueurs, la création de tables, la reconnexion réseau, et la gestion des salles.
  4. Mise en place du pipeline de chiffrement pour les paquets de données avec des composants Inbound et Outbound.
  5. Lancement du serveur Nano avec options spécifiques : pipeline, heartbeat, logger, sérialiseur, et composants.

Démarrage du serveur web

La fonction web.Demarrage() configuer le serveur API :

  1. Initialisation de la base de données avec XORM, incluant la chaîne de connexion, l'affichage SQL, la gestion des connexions en idle et ouvertes, la synchronisation des schémas, et les canaux d'écriture asynchrone.
  2. Activation de la liste blanche pour le contrôle des accès.
  3. Enregistrement des points d'API pour l'authentification, les statistiques de joueurs, la gestion des rooms, les messages de diffusion, et les opérations administratives.
  4. Option d'utilisation de HTTPS avec http.EcouterEtServirAvecTLS.
  5. Implémentation d'un arrêt propre en écoutant les signaux système comme SIGINT et SIGTERM, avec une période de grâce pour les déploiements Kubernetes.

Développement local rapide

Démarrage de MySQL avec Docker Compose

Pour une base de données MySQL 5.7, utilisez le fichier docker-compose fourni :

docker-compose -f docker-compose.mysql.5.7.yaml up -d
docker-compose -f docker-compose.mysql.5.7.yaml down

Rechargement à chaud avec Air

Air est un outil pour le rechargement à chaud des appplications Go. Installez-le et exécutez depuis le répertoire du projet :

go install github.com/cosmtrek/air@latest
air

Cela permet des itérations rapides pendant le développement.

Débogage avec VSCode et Delve

Pour déboguer dans VSCode, installez l'extension Go et l'outil Delve via la palette de commandes. Configurez un point d'arrêt et lancez le débogage via le menu Exécuter > Lancer le débogage.

Étiquettes: golang devops GitOps kubernetes bpf

Publié le 29 juin à 22h49