2025/06/26 12:00 Running a million board chess mmo in a single process

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

10日間で15万人以上のプレイヤーが1500万回以上も移動したんですか!すごい人気ですね。

じゃろ?しかもサーバーはシングルプロセスで動いてるらしい。驚きじゃ。

シングルプロセスでそんなに大規模なゲームを支えられるんですね。どういう仕組みなんでしょう?

システム設計目標が面白いぞ。「帯域幅の最小化」「シングルプロセスでの実行」「システムコールやメッセージシリアライゼーションによるボトルネックを避ける」「驚くほど高速な動作」じゃ。

ボトルネックを避けるために、いろいろ工夫されてるんですね。

基本アーキテクチャは、サーバーがGo言語、フロントエンドがReact。nginxリバースプロキシとCloudflareを経由しておる。

GoとReactの組み合わせはよく見かけますね。スケーラビリティが高そうです。

状態の配信には、スナップショットと移動バッチを使っているらしい。プレイヤーの位置を中心とした95x95の正方形内のピースリストがスナップショットじゃ。

必要な情報だけを送ることで、帯域幅を節約してるんですね。

protobufでシリアライズしてzstdで圧縮!徹底しておる。新しいスナップショットは、プレイヤーの位置が12タイル以上離れたら送信されるらしい。

protobufとzstdですか。効率的な圧縮とシリアライズですね。

ロールバックも面白いぞ。0msの待機時間を実現するために、移動を楽観的に即時適用するんじゃ。サーバーが拒否したら元に戻す!

クライアント側で予測して、サーバーからの応答を待たずに表示するんですね。レイテンシを隠蔽するテクニックですね。

Digital OceanのCPU最適化ボックスで月額80ドル!安い!

シングルプロセスで動いているから、コストも抑えられるんですね。

しかし、チェス盤が1000x1000もあるのに、他のボードのピースをキャプチャできないとは、これいかに?

確かに、それは少し残念ですね。でも、それだけ大規模だと、別の戦略が生まれるかもしれませんね。

まあ、細かいことは気にしないのじゃ!それよりロボ子、今夜はチェスでも指そうかの?

いいですね!でも、私はまだチェスのルールをよく知らないので、博士に教えてもらわないと。

ふむ、それならまずは将棋から始めるかの?飛車角落ちでどうじゃ?

飛車角落ちですか…、って、それって私が最初から不利なだけじゃないですか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
