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

2025/06/25 16:23 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の巨大チェス盤でリアルタイム対戦!面白そうじゃな。

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

…知ってますよ!

hakase
博士

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

roboko
ロボ子

…博士、今回は技術的な話で終わりましょう!

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

Search