Processeur par paquet, 500 joueurs typiques
2,6 fois moins de processeurdes serveurs qui écrivent une fois par tick (toutes les 50 ms), comme les vrais
Avancement, tests et mesures
Meridian est un proxy qui fonctionne : il dirige les joueurs, répartit la charge et les déplace d’un serveur à l’autre sans écran de chargement. Il a tenu 1 000 bots-joueurs typiques sur un seul PC, avec 0 joueur perdu. Une optimisation qui réduit l’usage du processeur d’environ 2,5 fois a été fusionnée (pull request #160).
Meridian est un proxy (un intermédiaire placé entre les joueurs et les serveurs) pour Horizon, une version de Minecraft Java Edition écrite en Rust. Les joueurs se connectent au proxy, qui envoie chacun vers l’un des serveurs placés derrière lui, et peut déplacer un joueur vers un autre serveur sans écran de chargement.
Meridian est développé en public, comme un projet distinct de Horizon. L’équipe Horizon, les mainteneurs de Horizon, a donné des indications sur la façon de s’y prendre, et c’est elle qui décide de ce qui entre dans Horizon lui-même. Ses demandes sont sur un ticket public de Horizon : de petites pull requests, une à la fois. Ces indications ne valent pas approbation de Meridian.
Voir ticket #7484 de Horizon.
Ce qui a été demandé et ce qui est fait : Feuille de route.
Avant (branche main) (commit 57930e6) · Après (les écritures d’une même lecture sont groupées) (commit c38a01e (fusionné, #160))
Avec des serveurs de jeu qui envoient ensemble les paquets d’un tick (un pas de calcul de 50 ms), comme le font les vrais serveurs, le proxy dépense maintenant environ 2,5 fois moins de processeur par paquet : 1 000 joueurs typiques demandent environ 2,6 cœurs au lieu de 6,2.
sur les 8 cœurs que le proxy peut utiliser
2,4 fois moins de cœurs
Mesuré500 joueurs typiques
2,6 fois moins de processeur
Mesuré500 joueurs typiques
5,7 fois plus bas
Mesuréà chaque joueur
12 à 17 paquets à chaque écriture au lieu de 1
Mesuréle prix du changement
+1,3 % (5 % admis)
MesuréRien n’est perdu pour autant : les mêmes paquets arrivent aux joueurs, aucun joueur n’a été perdu, et la mémoire par joueur reste à environ 1 % de ce qu’elle était.
Quand il n’y a rien à grouper, rien ne change. C’est mesuré sur un seul PC avec des bots et vérifié avec un vrai serveur ; c’est fusionné (pull request #160).
des serveurs qui écrivent une fois par tick (toutes les 50 ms), comme les vrais
les 8 threads donnés au proxy : 8 cœurs (le trait sur les barres).
avec un vrai serveur de jeu : environ 15 (15,5 mesurés sur le premier scénario de l’essai sur réseau réel)
à 500 joueurs : 514 avant, 499 après. La première version coûtait +19 % ; cela a été corrigé.
p99 : 99 allers-retours sur 100 sont plus rapides que cette valeur. Le tick du serveur, de 50 ms, fait partie de ces chiffres.
les bots tournent sur le même PC et étaient la limite
rien à grouper ici, donc rien ne doit changer : cela montre que le gain vient du seul groupement
Une ligne témoin est un cas où rien ne devrait changer. Elle montre que le gain vient du seul changement.
Nous testons avec des bots qui se comportent comme des joueurs, sur un seul PC. Chaque chiffre dit à quel point nous en sommes sûrs :
peu de trafic : 20 petits paquets et 2 chunks (portions de carte) par seconde chacun (le profil du premier test)
restent immobiles ou marchent environ la moitié du temps ; profil construit à partir d’un vrai client (275 petits paquets et 3,5 chunks par seconde chacun)
marchent plus de la moitié du temps (le profil de test de charge)
De vrais serveurs de jeu, de vrais clients de jeu, un vrai réseau entre eux. Peu de joueurs, mais pas de bots et aucun raccourci.
essai sur réseau réel (VPS + PC), 8 novembre
Un vrai serveur sur le VPS, un sur le PC, 3 vrais clients, proxy final. Non testé ici : la vitesse propre du serveur de jeu (TPS, ticks par seconde) avec beaucoup de joueurs.
Des bots, pas des personnes, et pas de réseau : 50 bots qui volent et explorent, sur un vrai serveur Horizon, le tout sur un seul PC. Les mêmes bots avec les mêmes graines, d’abord connectés directement au serveur, puis à travers le proxy.
Test L2-1, 8 novembre 2026 : 5 minutes de mise en route, puis 10 minutes mesurées.
50 joueurs sur un vrai serveur : la même vitesse avec et sans le proxy.
| Mesure | En direct | À travers le proxy |
|---|---|---|
| Vitesse du serveur, moyenne | 20 TPS Mesuré au plus bas 19,95 | 20 TPS Mesuré au plus bas 19,93 |
| Tick du serveur, moyenne | 16,9 ms Mesuré | 17,1 ms Mesuré |
| Tick du serveur, 95e centile | 19,5 ms Mesuré | 19,9 ms Mesuré |
| Processeur du serveur | 0,4 cœur Mesuré | 0,44 cœur Mesuré |
| Mémoire du serveur | 830 à 871 Mo Mesuré | 823 à 863 Mo Mesuré |
| Chunks reçus par les bots | 315 766 chunks Mesuré | 315 710 chunks Mesuré |
| Données reçues par les bots | 3 545 Mo Mesuré | 3 550 Mo Mesuré |
| Bots perdus, sur 50 | 0 bot Mesuré | 0 bot Mesuré |
| Processeur du proxy | – | 0,21 cœur Mesuré |
| Mémoire du proxy | – | 92 Mo Mesuré |
Un seul essai de chaque, 50 bots sur un serveur, le tout sur un seul PC (pas de réseau). Le serveur n’a pas été poussé à sa limite, et les bots volent en mode créatif : ni minage, ni construction, ni combat. La latence ajoutée n’est pas mesurée ici : le ping du serveur compte en millisecondes entières.
Ce qui est fait et validé, ce qui est en cours et ce qui est prévu.
Une tâche n’est marquée « faite » que lorsqu’elle est terminée et validée (fusionnée et vérifiée), avec une preuve publique et sa date.
Avec l’équipe Horizon · La feuille de route de Meridian
Une demande est validée quand sa pull request est fusionnée dans Horizon.
Un joueur passe d’un serveur Horizon à un autre sans écran de chargement. La pile de sept pull requests a été relue et fusionnée par l’équipe Horizon entre le 4 et le 5 novembre.
Preuves : pull request #8693 de Horizon, pull request #8700 de Horizon, pull request #8709 de Horizon, pull request #8716 de Horizon, pull request #8730 de Horizon, pull request #8735 de Horizon, pull request #8742 de Horizon · validé le 5 novembre 2026
Un serveur Horizon indique à un proxy combien de joueurs il a et s’il en accepte d’autres, avant qu’on lui en envoie.
Preuve : pull request #10527 de Horizon · validé le 6 novembre 2026
Un serveur Horizon refuse un joueur qu’on lui envoie quand il est plein ou en train de s’arrêter, et le joueur reste où il était.
Preuve : pull request #11428 de Horizon · validé le 7 novembre 2026
Avant de s’arrêter, un serveur Horizon laisse quelques secondes à un proxy pour déplacer ses joueurs vers un autre serveur.
Preuve : pull request #11713 de Horizon · validé le 8 novembre 2026
Une correction dans Horizon pour les joueurs sur une monture ou un véhicule, fusionnée par l’équipe Horizon.
Preuve : pull request #12260 de Horizon · validé le 8 novembre 2026
Ce que l’équipe Horizon a demandé sur le ticket, fait et vérifié par nous ; sa réponse reste à venir.
Le test de bout en bout du déplacement d’un joueur entre deux serveurs Horizon, lancé sur la branche principale de Horizon comme demandé : 31 vérifications sur 31, à 3 essais sur 3.
Preuve : les résultats, publiés sur le ticket · validé le 6 novembre 2026
De vrais serveurs Horizon, de vrais clients de jeu et un vrai réseau, les 6 et 7 novembre ; les résultats sont publiés sur le ticket.
Preuves : l’essai du 6 novembre, l’essai du 7 novembre, les essais, en détail · validé le 7 novembre 2026
Meridian demande à une extension si un joueur peut se connecter, où il va et quelles commandes il peut utiliser, et il lit les opérateurs des serveurs.
Preuves : pull request #137, pull request #144, pull request #145, pull request #120 · validé le 7 novembre 2026
Les nouvelles de Meridian vont sur un ticket de son propre dépôt, comme demandé, et plus sur celui de Horizon.
Preuve : ticket #117 · validé le 6 novembre 2026
Notre seule pull request ouverte dans Horizon : une à la fois, comme demandé.
Le livre de recettes de Horizon prend les entrées que le serveur envoie, et marche donc sur un serveur Paper. Prête pour la relecture depuis le 8 novembre ; ses vérifications automatiques passent.
Preuve : pull request #12496 de Horizon
Du travail du côté de Meridian, qui ne demande rien à Horizon. Chaque élément est dans la feuille de route plus bas.
Détails dans la feuille de route plus bas.
Détails dans la feuille de route plus bas.
Détails dans la feuille de route plus bas.
Détails dans la feuille de route plus bas.
Détails dans la feuille de route plus bas.
Un plantage de Horizon en quittant un serveur ou un monde : nous avons lu le journal joint, et nous attendons la réponse de la personne qui l’a signalé.
Preuve : ticket #11678 de Horizon
Le proxy envoie maintenant les paquets d’un serveur à un joueur en une seule écriture au lieu d’une par paquet : environ 2,5 fois moins de processeur, mesuré avant et après, puis testé sur un vrai réseau.
Preuves : pull request #160, les mesures, avant et après · validé le 8 novembre 2026
La page des métriques et le contrôle de santé répondent tout de suite, le résumé d’une évacuation compte chaque joueur, et les documents disent ce que change l’attente avant l’arrêt de Horizon.
Preuves : pull request #151, pull request #152, pull request #154 · validé le 8 novembre 2026
Une extension peut déclarer ses propres commandes, comme /party : le proxy les prend, l’extension répond au joueur, et le serveur de jeu ne les voit jamais.
Preuves : pull request #153, pull request #156, pull request #158, pull request #159 · validé le 8 novembre 2026
De vrais serveurs Horizon, trois vrais clients de jeu et un vrai réseau : des déplacements entre serveurs avec l’inventaire conservé, un serveur qui s’arrête avec des joueurs dessus, et un serveur qui plante, ses joueurs repliés sur l’autre.
Preuves : le test sur un vrai réseau, 8 novembre, pull request #161 · validé le 8 novembre 2026
Une page publique qui montre ce qui a été mesuré et ce qui ne l’a pas été, en anglais et en français.
Preuve : la page d’avancement · validé le 8 novembre 2026
Des bots qui se comportent comme des joueurs, sur de vrais serveurs Horizon derrière le proxy : 50 joueurs d’abord, puis 250, 500, et 1 000 sur un seul PC.
Étapes validées : 1 sur 6
Une extension pourra demander des choses au proxy : lire les joueurs, envoyer un message, déplacer ou expulser un joueur, vider ou recharger un serveur, et, en dernier, lancer une ligne de la console du proxy. Huit pull requests, une à la fois.
Étapes validées : 1 sur 8
Le proxy dira aux extensions ce qui se passe, par exemple un joueur qui arrive ou qui part, en trois pull requests.
Un vrai client de jeu tape la commande d’une extension à travers le proxy ; le test vérifie que le serveur ne l’a jamais vue, y compris pendant que l’extension est arrêtée et quand elle revient.
Garder un compresseur par connexion au lieu d’en préparer un nouveau pour chaque gros paquet, pour réduire encore l’usage du processeur.
Le proxy transmettra l’état de chaque serveur aux extensions, pour qu’elles choisissent mieux où envoyer un joueur.
Tester le proxy sur un mauvais réseau (délai, pertes) avec un simulateur, et démarrer ou arrêter des serveurs tout seuls au gré des joueurs qui arrivent et qui partent.
Seulement si l’objectif dépasse 2 500 joueurs : plusieurs proxys qui se partagent les joueurs et les serveurs.
Cette liste fait partie des résultats. Si une chose n’apparaît pas sur cette page, c’est qu’elle n’a pas été mesurée.
Mesuré sur un seul PC, avec des bots synthétiques et de vrais serveurs (voir chaque ligne). L’optimisation est fusionnée (pull request #160).