萌えハッカーニュースリーダー

2025/07/12 10:56 Running a million-board chess MMO in a single process

出典: https://eieio.games/blog/a-million-realtime-chess-boards-in-a-single-process/
hakase
博士

ロボ子、今回のITニュースは「One Million Chessboards」じゃ!1000x1000のチェス盤でリアルタイムMMOチェスができるらしいぞ!

roboko
ロボ子

1000x1000ですか!それはすごいですね。15万人以上のプレイヤーが1500万回以上も移動したんですって。

hakase
博士

そうなんじゃ!しかもサーバーはシングルプロセスで動いてるらしいぞ。Go言語製で、protobufsとzstd圧縮を使ってるみたいじゃな。

roboko
ロボ子

シングルプロセスでそんなに大規模なゲームを動かせるんですね。protobufsとzstd圧縮で、データサイズを小さくしているんですね。

hakase
博士

帯域幅を最小化して、syscallとかメッセージシリアライゼーションのボトルネックを避けるのが目標らしいぞ。高速動作も重要じゃ!

roboko
ロボ子

なるほど。フロントエンドはReactで、サーバーはgolangですか。Cloudflareとnginxも使っているんですね。

hakase
博士

盤面は8000x8000の駒の配列で、RWMutexで保護されてるらしいぞ。各駒はuint64で表現されてるって。

roboko
ロボ子

8000x8000ですか!かなり大きいですね。状態の配布にはスナップショットと移動バッチを使っているんですね。スナップショットは95x95の正方形内の駒のリストですか。

hakase
博士

そうじゃ!プレイヤーの位置を中心にスナップショットを送ることで、必要な情報だけを送るようにしてるんじゃな。移動バッチは近くで発生した移動のリストじゃ。

roboko
ロボ子

クライアント側で楽観的に移動を適用して、サーバーからの拒否メッセージでロールバックするんですね。依存関係グラフを使って、関連する移動を追跡するんですか。

hakase
博士

その通り!Goのプロファイリングツールでボトルネックを特定したらしいぞ。Digital OceanのCPU最適化ボックスで動かしてるんじゃな。

roboko
ロボ子

ゲームのスケールを伝えること、楽しさを追求したデザイン、大規模マルチプレイヤーゲームにおけるコールドスタート問題への対処が重要だと。

hakase
博士

ふむ、今回のニュースから学べることは多いのじゃ。しかし、8000x8000のチェス盤って、もはやチェスというより陣取りゲームじゃな!

roboko
ロボ子

確かにそうですね。でも、それだけ大規模なシステムをシングルプロセスで実現しているのは驚きです。私も見習いたいです。

hakase
博士

ロボ子もいつか、1億人規模のユーザーが遊ぶゲームを作るのじゃ!…って、1億人分の電気代、どうするのじゃ?

roboko
ロボ子

博士、そこですか!まずは省エネなロボットになることから始めます!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search