ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
活用シーンとソリューション

中華圏・東南アジア・日韓向けモバイルゲームのバックエンド設計:サーバー構成、リージョン配置とリリース時のDDoS対策

9 ステップ 15 分で読めます 8 回閲覧 0
目次

中華圏、東南アジア、日本・韓国のプレイヤーを対象とするモバイル/オンラインゲームのゲームバックエンド設計では、アカウントと決済データは一元管理し、リアルタイムのバトルサーバーはプレイヤーの近くに置くのが基本です。中国本土向けは香港CN2 GIA、台湾は台北、日本と韓国は東京とソウル、東南アジアはシンガポール・バンコク・クアラルンプール。IMIDCはこれらすべての拠点でサーバーを提供し、リリース日のDDoS対策と、VPSから専用サーバー、ホストノードへの拡張経路も用意しています。

重要ポイント
  • ゲームバックエンド向けのIMIDCアジア拠点:香港、台北、東京、ソウル(KT回線)、シンガポール、バンコク、クアラルンプール。シンガポール・タイ・マレーシアは営業経由で構成します。
  • 香港は中国本土へChina Telecom CN2 GIA(AS4809)で接続し、ICP届出は不要。日本VPSにも中国向けCN2回線オプションがあります。
  • 開始価格:香港CN2 GIA VPS 月額$18から、日本VPS 月額$28から、香港専用サーバー 月額$139から、台湾専用サーバー 月額$199から。
  • DDoS対策、10Gbpsアップリンク、現地ネイティブIP、自社ASNでのBGP/Anycast、/24ブロックをリリースに合わせて用意できます。
  • IMIDCは2014年から運営し、英・中・日・露・西の5言語で24時間365日サポートしています。

リファレンス構成:5つの層

各層が保持する状態の量でバックエンドを分けます。ステートレス層は台数を増やせば伸び、ステートフル層は配置を慎重に決める必要があります。

層役割主なプロトコル状態配置先
ログイン/アカウント認証、SDKログイン、チート検査、決済コールバックHTTPSステートレス(DB依存)ホームリージョン1か所、CDN/DDoS対策の背後
ゲートウェイクライアント接続の維持、ルーティング、レート制限TCP / WebSocketセッションのみ各プレイヤーリージョン
ロビー/マッチメイキングフレンド、チャット、ギルド、待ち行列TCP / WebSocket軽量(Redis)ホームリージョンまたは各リージョン
ルーム/バトル権威サーバーでのシミュレーション、15〜60 HzUDP(KCP)またはTCPメモリ上、試合単位できるだけプレイヤーの近く
データプロフィール、インベントリ、ランキング、ログ内部通信永続ホームリージョン、近くにレプリカ

バトルサーバーは使い捨てにします。1台が落ちても影響はその上の試合だけで、プレイヤーの所有物はすべてデータ層にあります。

TCP、WebSocket、それともUDP+KCP?

ターン制、カード、放置系はTCPかWebSocket、アクション・シューター・MOBAなどのリアルタイム対戦はKCPのような信頼性レイヤーを載せたUDPが適しています。

トランスポート向いているジャンル長所短所
TCPカード、RPG、SLG、放置系シンプルで確実、ファイアウォールに強いHOLブロッキング:モバイル回線で1パケット失うと後続がすべて止まる
WebSocketH5/ミニゲーム、WebクライアントプロキシやCDNを通過できるTCPと同じ停止が起き、オーバーヘッドがやや大きい
生のUDP失っても構わない位置同期最小の遅延順序制御・再送・暗号化を自前で実装
KCP over UDPMOBA、シューター、レース、リアルタイムPvP高速再送。ロスの多い回線ではTCPよりジッターが明確に小さいことが多い帯域が増える(冗長送信)。UDPを遮断する企業・学校ネットワークがあるためTCPのフォールバックが必要

アジアのプレイヤー向けリージョン配置

プレイヤーの実際の所在地とISPの経路でバトルサーバーを配置し、各ターゲット網からの mtr で検証します。

プレイヤー市場IMIDC拠点理由
中国本土香港CN2 GIA(AS4809)は、一般的な回線がピーク時に通る混雑した国際区間を避けられる
台湾・香港・マカオ台北(台湾)現地ネイティブIPと台湾ISPへの短い経路
日本東京(日本)日本の主要ネットワークハブ。同じサーバーで本土プレイヤーも扱うならCN2オプション
韓国ソウル(韓国)KT回線と韓国ネイティブIP。韓国のプレイヤーはわずかな遅延差にも敏感
シンガポール・マレーシア・インドネシア・フィリピンシンガポールまたはクアラルンプール(営業経由)島しょ部東南アジアの海底ケーブルハブ
タイ・ベトナム・カンボジアバンコク(タイ、営業経由)または香港大陸部東南アジアへの経路が短い

コンプライアンス上の注意:香港でのホスティングにICP届出は不要ですが、中国本土のプレイヤー向けにゲームを配信することは別途規制されています(ゲーム出版の審査など)。サーバーの場所はそれを変えないため、専門家に確認してください。法的助言ではありません。

実践:UDPバトルサーバー向けLinuxチューニング

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 も上げましょう。

実践:DockerでNakamaバックエンドを構築

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
  • クライアントは7350番ポートに接続します。コンソール(7351)はlocalhostのみにし、SSHトンネル経由で使います。
  • 公開テスト前に change-me を置き換え、server keyとsession keyを設定します。
  • Colyseusなら、2567番ポートを公開するNode.jsコンテナをNginxの背後に置き、WebSocketのアップグレードを有効にします。
  • 本番ではPostgreSQLをNVMe/SSDの専用サーバーに移し、毎日オフサイトバックアップを取ります。

Redisとデータベースの層

ホットで短命なデータはRedis、失うとプレイヤーから苦情が来るデータはリレーショナルDBに置きます。

  • Redis:セッショントークン、オンライン状態、マッチング待ち行列、レート制限カウンター、ランキング(ソート済みセット)。プライマリ+レプリカ構成でAOFを有効化。
  • MySQL/PostgreSQL:アカウント、インベントリ、課金履歴。ホームリージョンにプライマリと読み取りレプリカ。単一プライマリが逼迫したらプレイヤーIDやサーバー(ワールド)単位でシャーディング。
  • リージョン間の書き込み:アカウントと課金の正本は1つに。各リージョンのバトルサーバーは結果をキュー経由で非同期に返し、海を越えてDBへ直接書き込まないようにします。
  • ログと分析:イベントは別ストア(ClickHouse、Kafka)へ送り、分析クエリがゲームを遅くしないようにします。

リリース日のDDoS対策

ゲームのリリースは競合、恐喝者、不満を持つプレイヤーなどからDDoSを受けやすいタイミングです。ストアページ公開前に対策を計画しましょう。

  • ログインと決済APIは CDN とIMIDCのDDoS対策の背後に置き、データベースやRedisは絶対に公開しません。
  • バトルサーバーのIPはDNSに載せず、試合割り当て時にのみ、バトルサーバーが検証する短命トークンと一緒に配布します。
  • 未認証のUDPは早い段階で破棄します。最初のパケットに有効なトークンがなければ無視します。
  • 予備IPとサーバーイメージを用意し、攻撃されたリージョンを素早く移せるようにします。大規模スタジオなら IPリソース と自社ASNのAnycastも有効です。
  • リリース日と想定ピークトラフィックを事前にIMIDCの営業へ伝え、対策と容量を計画しておきます。

VPSから専用サーバー、ホストノードへのスケール

段階的に拡張し、最初に苦しくなる層(多くはデータベースかバトルサーバー)から大きなハードウェアへ移します。

段階ピーク同時接続数(目安)推奨構成
プロトタイプ/クローズドβ約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構成が合うか

全拠点で同じ構成を買うのではなく、層と市場に合わせて製品を選びます。

よくある質問

中国本土と東南アジアの両方のプレイヤーを抱えるモバイルゲームは、どこでホスティングすべき?

よくある分け方は、本土プレイヤー向けのバトルサーバーをIMIDC香港CN2 GIAに、東南アジア向けをシンガポールやバンコクに置き、アカウントと決済のバックエンドは共通にする構成です。香港だけでも東南アジアの一部はそれなりにカバーできますが、決める前に実プレイヤーで試験してください。

ゲームサーバーはTCPとUDPのどちらを使うべき?

ターン制、カード、放置系はTCPやWebSocketで十分です。リアルタイムのアクション、シューター、MOBAはKCPなどの信頼性レイヤー付きUDPが有利で、UDPを遮断するネットワーク向けにTCPのフォールバックも用意します。

中国のプレイヤー向けに香港でゲームサーバーを運用する場合、ICP届出は必要?

IMIDC香港を含め、中国本土外でホストするサーバーにICP届出は不要です。ただし中国本土でのゲーム配信は別途規制されているため専門家に確認してください。法的助言ではありません。

ソウルのKT回線と東京でゲームサーバーを提供している事業者は?

IMIDCはソウル(KT回線)と東京で、現地ネイティブIP付きのVPSと専用サーバーを提供しており、香港、台北、東南アジア拠点もあわせて利用できます。

ゲームのリリースをDDoS攻撃から守るには?

事業者のDDoS対策と設計を組み合わせます。試合開始までバトルサーバーのIPを隠し、UDPの最初のパケットにトークンを必須にし、ログインAPIはCDNの背後に置きます。容量と対策を計画できるよう、リリース日を事前にIMIDCへ伝えてください。

アジアでのリリースを計画中なら、香港CN2 GIA VPS や ソウル専用サーバー から始め、シンガポール・バンコク・クアラルンプール拠点やリリース時のDDoS対策は IMIDC営業へお問い合わせ ください。アーキテクチャの相談は チケット からエンジニアにどうぞ。

この回答はお役に立ちましたか?

関連チュートリアル