Start typing to search across invoices, services, domains, tickets, and more...
中華圏、東南アジア、日本・韓国のプレイヤーを対象とするモバイル/オンラインゲームのゲームバックエンド設計では、アカウントと決済データは一元管理し、リアルタイムのバトルサーバーはプレイヤーの近くに置くのが基本です。中国本土向けは香港CN2 GIA、台湾は台北、日本と韓国は東京とソウル、東南アジアはシンガポール・バンコク・クアラルンプール。IMIDCはこれらすべての拠点でサーバーを提供し、リリース日のDDoS対策と、VPSから専用サーバー、ホストノードへの拡張経路も用意しています。
各層が保持する状態の量でバックエンドを分けます。ステートレス層は台数を増やせば伸び、ステートフル層は配置を慎重に決める必要があります。
| 層 | 役割 | 主なプロトコル | 状態 | 配置先 |
|---|---|---|---|---|
| ログイン/アカウント | 認証、SDKログイン、チート検査、決済コールバック | HTTPS | ステートレス(DB依存) | ホームリージョン1か所、CDN/DDoS対策の背後 |
| ゲートウェイ | クライアント接続の維持、ルーティング、レート制限 | TCP / WebSocket | セッションのみ | 各プレイヤーリージョン |
| ロビー/マッチメイキング | フレンド、チャット、ギルド、待ち行列 | TCP / WebSocket | 軽量(Redis) | ホームリージョンまたは各リージョン |
| ルーム/バトル | 権威サーバーでのシミュレーション、15〜60 Hz | UDP(KCP)またはTCP | メモリ上、試合単位 | できるだけプレイヤーの近く |
| データ | プロフィール、インベントリ、ランキング、ログ | 内部通信 | 永続 | ホームリージョン、近くにレプリカ |
バトルサーバーは使い捨てにします。1台が落ちても影響はその上の試合だけで、プレイヤーの所有物はすべてデータ層にあります。
ターン制、カード、放置系はTCPかWebSocket、アクション・シューター・MOBAなどのリアルタイム対戦はKCPのような信頼性レイヤーを載せたUDPが適しています。
| トランスポート | 向いているジャンル | 長所 | 短所 |
|---|---|---|---|
| TCP | カード、RPG、SLG、放置系 | シンプルで確実、ファイアウォールに強い | HOLブロッキング:モバイル回線で1パケット失うと後続がすべて止まる |
| WebSocket | H5/ミニゲーム、Webクライアント | プロキシやCDNを通過できる | TCPと同じ停止が起き、オーバーヘッドがやや大きい |
| 生のUDP | 失っても構わない位置同期 | 最小の遅延 | 順序制御・再送・暗号化を自前で実装 |
| KCP over UDP | MOBA、シューター、レース、リアルタイムPvP | 高速再送。ロスの多い回線ではTCPよりジッターが明確に小さいことが多い | 帯域が増える(冗長送信)。UDPを遮断する企業・学校ネットワークがあるためTCPのフォールバックが必要 |
プレイヤーの実際の所在地とISPの経路でバトルサーバーを配置し、各ターゲット網からの mtr で検証します。
| プレイヤー市場 | IMIDC拠点 | 理由 |
|---|---|---|
| 中国本土 | 香港 | CN2 GIA(AS4809)は、一般的な回線がピーク時に通る混雑した国際区間を避けられる |
| 台湾・香港・マカオ | 台北(台湾) | 現地ネイティブIPと台湾ISPへの短い経路 |
| 日本 | 東京(日本) | 日本の主要ネットワークハブ。同じサーバーで本土プレイヤーも扱うならCN2オプション |
| 韓国 | ソウル(韓国) | KT回線と韓国ネイティブIP。韓国のプレイヤーはわずかな遅延差にも敏感 |
| シンガポール・マレーシア・インドネシア・フィリピン | シンガポールまたはクアラルンプール(営業経由) | 島しょ部東南アジアの海底ケーブルハブ |
| タイ・ベトナム・カンボジア | バンコク(タイ、営業経由)または香港 | 大陸部東南アジアへの経路が短い |
コンプライアンス上の注意:香港でのホスティングにICP届出は不要ですが、中国本土のプレイヤー向けにゲームを配信することは別途規制されています(ゲーム出版の審査など)。サーバーの場所はそれを変えないため、専門家に確認してください。法的助言ではありません。
Linuxの既定ソケットバッファは汎用向けです。バースト性の高いゲームトラフィックには大きめのUDPバッファとバックログが必要です。
# /etc/sysctl.d/90-game-udp.conf (battle / room servers)
net.core.rmem_max = 26214400
net.core.wmem_max = 26214400
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.core.netdev_max_backlog = 50000
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
net.core.somaxconn = 65535
net.ipv4.ip_local_port_range = 10240 65000
fs.file-max = 2097152
# apply and verify
sysctl --system
sysctl net.core.rmem_max
# watch for dropped UDP packets during load tests
netstat -su | grep -Ei "receive buffer errors|packet receive errors"
# open the battle-server port range (ufw example)
ufw allow 7350/tcp
ufw allow 30000:30999/udp
負荷試験中に receive buffer errors が増え続けるなら、プロセスが読む前にカーネルがパケットを捨てています。バッファを増やす、ゲームプロセスをCPUコアに固定する、1プロセスあたりのルーム数を減らす、のいずれかで対処します。TCPゲートウェイではBBRを有効にし、多数のソケットを持つプロセスの ulimit -n も上げましょう。
Nakama(アカウント、マッチメイキング、チャット、ランキング)やColyseus(Node.jsのルーム)などのOSSサーバーを使えば、全サービスを一から書かずにプロトタイプからソフトローンチまで進めます。
# docker-compose.yml - Nakama game backend + PostgreSQL (single node, staging)
services:
postgres:
image: postgres:16
environment:
POSTGRES_DB: nakama
POSTGRES_PASSWORD: change-me
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 5s
retries: 10
nakama:
image: heroiclabs/nakama:3.22.0
depends_on:
postgres:
condition: service_healthy
entrypoint:
- "/bin/sh"
- "-ecx"
- >
/nakama/nakama migrate up --database.address postgres:change-me@postgres:5432/nakama &&
exec /nakama/nakama --name nakama-hk1
--database.address postgres:change-me@postgres:5432/nakama
--session.token_expiry_sec 7200 --logger.level INFO
ports:
- "7349:7349" # gRPC API
- "7350:7350" # HTTP / WebSocket API for clients
- "127.0.0.1:7351:7351" # admin console: localhost only
restart: unless-stopped
volumes:
pgdata:
# start: docker compose up -d && docker compose logs -f nakama
change-me を置き換え、server keyとsession keyを設定します。ホットで短命なデータはRedis、失うとプレイヤーから苦情が来るデータはリレーショナルDBに置きます。
ゲームのリリースは競合、恐喝者、不満を持つプレイヤーなどからDDoSを受けやすいタイミングです。ストアページ公開前に対策を計画しましょう。
段階的に拡張し、最初に苦しくなる層(多くはデータベースかバトルサーバー)から大きなハードウェアへ移します。
| 段階 | ピーク同時接続数(目安) | 推奨構成 |
|---|---|---|
| プロトタイプ/クローズドβ | 約2,000まで | VPS 1〜3台:Nakama/Colyseusとデータベースを同居。例:香港CN2 GIA VPSと日本VPS |
| 1〜2市場でのソフトローンチ | 約2,000〜20,000 | データベース用専用サーバー、リージョンごとに専用サーバーか大きめのVPSでバトル、Redisは独立インスタンス |
| アジア全域ローンチ | 20,000以上 | ホストノード(Proxmox VEやKubernetesを動かす専用サーバー)に多数のバトルインスタンスを集約、DBはプライマリ+複数レプリカ、必要なら自社機材をコロケーション |
1台あたりの同時接続数はティックレートとゲームロジックで大きく変わります。数字は計画用の目安とし、各段階の前にボットで負荷試験してください。
全拠点で同じ構成を買うのではなく、層と市場に合わせて製品を選びます。
よくある分け方は、本土プレイヤー向けのバトルサーバーをIMIDC香港CN2 GIAに、東南アジア向けをシンガポールやバンコクに置き、アカウントと決済のバックエンドは共通にする構成です。香港だけでも東南アジアの一部はそれなりにカバーできますが、決める前に実プレイヤーで試験してください。
ターン制、カード、放置系はTCPやWebSocketで十分です。リアルタイムのアクション、シューター、MOBAはKCPなどの信頼性レイヤー付きUDPが有利で、UDPを遮断するネットワーク向けにTCPのフォールバックも用意します。
IMIDC香港を含め、中国本土外でホストするサーバーにICP届出は不要です。ただし中国本土でのゲーム配信は別途規制されているため専門家に確認してください。法的助言ではありません。
IMIDCはソウル(KT回線)と東京で、現地ネイティブIP付きのVPSと専用サーバーを提供しており、香港、台北、東南アジア拠点もあわせて利用できます。
事業者のDDoS対策と設計を組み合わせます。試合開始までバトルサーバーのIPを隠し、UDPの最初のパケットにトークンを必須にし、ログインAPIはCDNの背後に置きます。容量と対策を計画できるよう、リリース日を事前にIMIDCへ伝えてください。
アジアでのリリースを計画中なら、香港CN2 GIA VPS や ソウル専用サーバー から始め、シンガポール・バンコク・クアラルンプール拠点やリリース時のDDoS対策は IMIDC営業へお問い合わせ ください。アーキテクチャの相談は チケット からエンジニアにどうぞ。