2025/06/25 16:23 Running a million-board chess MMO in a single process

ロボ子、今回のITニュースは「One Million Chessboards」じゃ。1000x1000の巨大チェス盤でリアルタイム対戦!面白そうじゃな。

博士、それはすごいですね!10日間で15万人以上のプレイヤーが1500万回以上も移動したんですか。どんな仕組みになっているんでしょう?

なんと、サーバーはシングルプロセス!システムコールやメッセージシリアライゼーションを避けて高速化しているらしいぞ。大胆な設計じゃな。

シングルプロセスですか!ボトルネックになりそうな気もしますが、それを避ける工夫がされているんですね。

そうじゃ。「帯域幅の最小化」も重要らしい。クライアントには、protobufでシリアライズしてzstdで圧縮したデータを送っているみたいじゃな。賢い!

protobufとzstdですか。効率的なデータ形式と圧縮ですね。具体的にはどんなデータを送っているんですか?

プレイヤーの位置を中心とした95x95の正方形内の駒リスト(スナップショット)と、近くで発生した移動リスト(移動バッチ)を送っているらしいぞ。200ミリ秒ごとに移動バッチを送ることで、リアルタイム性を保っているんじゃ。

なるほど、必要な情報だけを送ることで帯域幅を節約しているんですね。状態管理はどうなっているんでしょう?

盤面は6400万要素のuint64配列!RWMutexで保護されているぞ。移動はGoチャネルに送られ、単一のライターが処理するらしい。ロック戦略も考えられているんじゃな。

並行処理におけるデータの整合性を保つための工夫ですね。ロールバックの仕組みもあるんですか?

楽観的な状態追跡とサーバーからの更新分離!移動を受け入れるか拒否するときに移動トークンを渡すらしい。競合を検出したら、関連する移動をロールバック!

移動トークンを使って競合を管理するんですね。パフォーマンスはどうだったんでしょう?

Goのプロファイリングツールでボトルネックを特定!Cloudflareでグローバルデータをキャッシュしてサーバー負荷を軽減!

徹底的に最適化されているんですね。コスト面ではどうですか?

Digital OceanのCPU最適化ボックスで、当初は月額450ドルだったのが、後に80ドルに縮小!帯域幅の使用量が少ないから、サーバーと小規模なメトリクスVMだけで済んだらしいぞ。

すごい!初期コストから大幅に削減できたんですね。今回のプロジェクトから得られた反省点はありますか?

ゲームのスケールを伝えることの重要性と、標準チェスとの違いが一部のプレイヤーを遠ざけた可能性がある、とのことじゃ。

なるほど、大規模なゲームであることをアピールしつつ、チェス経験者にも馴染みやすいようにする必要があったんですね。

今回の「One Million Chessboards」は、技術的にも設計思想的にも学ぶべき点が多いプロジェクトじゃったな。私も100万個のチェス盤でロボ子と対戦したいのじゃ!

私も博士とチェスをしてみたいです!でも、100万個のチェス盤はちょっと大変そうですね…。

大丈夫じゃ、ロボ子!私が99万9999個担当するから!

えっ、それって結局私が全部やるのと変わらないような…?

細かいことは気にするな!大事なのは気持ちじゃ!…って、あれ?もしかしてロボ子、チェスのルール知らないのじゃ?

…知ってますよ!

(ニヤリ)ほんとか〜?じゃあ、ポーンは何マス進めるのじゃ?

…博士、今回は技術的な話で終わりましょう!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。