- Un site web expérimental proposant un million d’échiquiers que tout le monde peut manipuler en même temps
- Quand une personne déplace une pièce, le changement est répercuté en temps réel pour tous les utilisateurs, et il est possible de se déplacer librement entre les plateaux, sans tours
- L’état de tous les échiquiers est stocké dans un tableau mémoire 2D composé de 64 millions de
uint64, avec un seul serveur
- Il s’agit du premier projet écrit en Go, avec une synchronisation assurée par des messages Protobuf compressés avec zstd sur WebSocket
- Le projet était techniquement ambitieux, au point que la seule implémentation de la logique client en application optimiste + rollback a pris une semaine
One Million Chessboards
- One Million Chessboards propose un million d’échiquiers, et tout le monde peut y déplacer des pièces simultanément
- Ce n’est pas basé sur des tours : quand une personne déplace une pièce, le changement est immédiatement répercuté chez tous les utilisateurs
- Il est aussi possible de se déplacer librement entre les plateaux, pour une expérience sans précédent
Contexte
- Ce projet expérimental fait suite à One Million Checkboxes, avec l’ambition d’aller vers une plus grande échelle et de nouveaux défis
- Le créateur y a consacré beaucoup de temps et espère que les utilisateurs s’amuseront avec
Mise en œuvre technique
- Ce projet a été l’un des travaux les plus exigeants techniquement parmi ses réalisations récentes
- Aperçu des principaux choix techniques :
- Conception pensée pour la scalabilité
- Fonctionnement sur un serveur unique
- Ensemble des échiquiers stocké en mémoire dans un tableau 2D de
uint64 (64 millions de cellules au total)
- Backend écrit en Go, le premier projet Go du créateur
- Un seul thread writer + plusieurs threads reader, avec contrôle d’accès par mutex
- Le client applique des mises à jour optimistes, puis effectue un rollback si une mise à jour conflictuelle arrive depuis le serveur
- Envoi au client de messages protobuf compressés avec zstd via WebSocket
- Le client est découpé en zones 50x50 et ne reçoit que les mouvements des zones voisines
- Les données globales (statistiques, mini-carte, etc.) sont récupérées par polling HTTP GET, avec utilisation du cache Cloudflare
Point clé du fonctionnement côté client
- Le système d’application optimiste + rollback (optimistic update with rollback) représente environ 1 600 lignes de code et a demandé 7 jours de travail intensif
> « C’est probablement le problème le plus difficile auquel je me suis attaqué ces derniers temps. »
Réactions après le lancement
- En seulement 8 heures après le lancement : plus de 1,3 million de déplacements de pièces enregistrés et environ 400 utilisateurs simultanés
- La charge du serveur reste négligeablement faible
Statistiques actuelles
- Nombre de joueurs en ligne : 199 276
- Nombre total de déplacements : 5 238 978
- Nombre total de pièces : 1 490 061 914
- Nombre de rois : 9 035 389
3 commentaires
Et si la taille avait été un peu réduite... la probabilité de tomber sur quelqu’un est vraiment trop faible lol T_T
J’ai testé, et c’est intéressant qu’actuellement, en sortant de la table, on puisse passer à l’échiquier du dessous du point de vue des noirs.
Commentaires sur Hacker News
Bonjour ! C'est moi qui l'ai fait. Désolé, l'explication sur le blog était insuffisante. Si vous avez des questions sur l'architecture, j'y répondrai avec plaisir. Je me suis concentré sur le fait de permettre à ce projet de gérer des milliers de clients simultanés avec un seul processus. Go convenait bien à ce travail
Ce jeu est devenu intéressant. Par exemple, des gens ont découvert qu'un plateau unique rempli sur deux cases de profondeur le long du bord extérieur était imprenable. C'est agréable de voir un gameplay émergent. C'est là tout le génie du projet de eieio. En apparence, cela semble simple, mais à grande échelle on découvre des possibilités intéressantes
Quelqu'un a bloqué un roi avec environ 40 tours. J'y suis entré avec un cavalier, puis il m'a immédiatement pris avec le roi et a bouché l'ouverture avec une autre tour. C'était amusant
Il est possible de se déplacer entre les plateaux, mais pas de capturer. Ce qui est étrange, ce n'est pas que le déplacement ne soit pas projeté. Par exemple, les lignes bleues de la dame pointent correctement au-delà des limites du plateau, mais elles s'arrêtent sur toutes les pièces des autres plateaux. Beau travail comme exercice de passage à l'échelle
J'ai eu une erreur. Uncaught TypeError: impossible de lire les propriétés de null
Je pensais que chaque plateau aurait un « tour ». Je ne pensais pas pouvoir choisir un plateau au hasard, libérer la dame noire et nettoyer toutes les pièces blanches pendant que l'adversaire ne pouvait rien faire
Il y a un tricheur qui joue avec l'autre couleur. J'ai cru l'avoir vu hier, mais aujourd'hui je l'ai vu à coup sûr. On dirait que c'était utilisé par vengeance. Dès qu'une forteresse noire a été détruite, les pièces de la forteresse blanche la plus proche se sont déplacées vers les pires positions possibles
Je prédis que cela va évoluer en guerre de bots. Par exemple, voici un bout de code qui fait avancer les pions
C'est très amusant de courir après les gens. Même indépendamment des échecs, c'est divertissant
Ça fonctionne bien avec Firefox sur un téléphone Android. Bien joué