menuTicketing

Déploiement du serveur Ticketing

Environnement
Mode
bash
Exemple de connexion client
rust
Test rapide avec nc
bash

Variables d'environnement

Chaque paramètre de ticketing.toml (optionnel) peut également être défini via une variable d'environnement. L'ordre de priorité est variable d'environnement > ticketing.toml > valeur par défaut, et les clés ainsi que les valeurs booléennes ne sont pas sensibles à la casse. L'image Docker étant basée sur scratch, l'injection de la configuration par variables d'environnement est le mode par défaut (pour utiliser un fichier de configuration, montez-le puis indiquez son chemin via CONFIG).

Variable d'environnementValeur par défautDescription
PORT (SERVER_PORT)5225Port d'écoute TCP. Ignoré en mode cluster, où le port de CLUSTER_SELF est utilisé
DEBUG (SERVER_DEBUG)Selon le buildJournalisation en mode debug si 1/true
SOCKET_BIND0.0.0.0Adresse d'écoute
SOCKET_NODELAYtrueTCP_NODELAY
SOCKET_READ_BUF_LEN4096Tampon de lecture par connexion (octets)
SOCKET_REPLY_QUEUE1024Longueur de la file d'attente de réponses par connexion
SOCKET_REPLY_BATCH64Nombre maximal de réponses regroupées en un seul write
SWEEP_INTERVAL_SECS5Intervalle de nettoyage des clés expirées (secondes)
CLUSTER_SELF(aucune)Adresse annoncée de ce nœud, host:port. Si définie, mode cluster
CLUSTER_PEERS(aucune)Liste des adresses des nœuds (séparées par des virgules). L'ordre = priorité de promotion, incluant self, 2 ou plus
CONFIG./conf/ticketing.tomlChemin du fichier de configuration

Simple vs cluster

  • Simple (1 nœud) : en l'absence de [cluster] (ou de CLUSTER_*), le nœud fonctionne seul. C'est le plus rapide, mais une brève interruption survient au redémarrage et l'état, gardé en mémoire, disparaît au redémarrage (le lease sert de filet de sécurité).
  • Cluster (sans interruption) : minimum 2 nœuds. Chaque nœud possède la même liste CLUSTER_PEERS (dans l'ordre de priorité) et son propre CLUSTER_SELF. Parmi les nœuds vivants, celui ayant la priorité la plus élevée devient actif, les autres restant standby et recevant une réplication en temps réel. Pour le détail du fonctionnement, consultez Principe de fonctionnement et Protocole — serveur ↔ serveur.

Le déploiement en cluster Kubernetes utilise un StatefulSet + un service headless. Chaque pod obtient un nom DNS stable (ticketing-0.ticketing…, ticketing-1.ticketing…) ; ces noms sont placés dans CLUSTER_PEERS dans l'ordre de priorité, et le CLUSTER_SELF de chaque pod est injecté automatiquement via la downward API (metadata.name).

Redémarrage sans interruption (rolling)

  1. Redémarrez d'abord les standby, un par un (l'actif continue de servir).
  2. Enfin, arrêtez l'actif (Ctrl+C) : un standby est promu via le handoff et les clients basculent vers lui.
  3. En redémarrant l'ancien actif arrêté, il rejoint le cluster comme standby de l'actif actuel (aucun failback automatique).

Références