Start typing to search across invoices, services, domains, tickets, and more...
Мобильной или онлайн-игре для игроков из Большого Китая, Юго-Восточной Азии, Японии и Кореи нужна такая архитектура игрового бэкенда, при которой аккаунты и платежи хранятся централизованно, а боевые серверы реального времени стоят рядом с игроками: Гонконг с CN2 GIA для континентального Китая, Тайбэй для Тайваня, Токио и Сеул для Японии и Кореи, Сингапур, Бангкок или Куала-Лумпур для Юго-Восточной Азии. IMIDC предоставляет серверы во всех этих точках, защиту от DDoS на день запуска и путь роста от одного VPS до выделенных серверов и хост-нод.
Делите бэкенд по количеству состояния в каждом уровне: stateless-уровни масштабируются добавлением машин, а stateful требуют продуманного размещения.
| Уровень | Задача | Типичный протокол | Состояние | Где размещать |
|---|---|---|---|---|
| Логин / аккаунты | Аутентификация, SDK-логин, античит, платежные колбэки | HTTPS | Без состояния (через БД) | Один домашний регион за CDN и защитой от DDoS |
| Шлюз | Держит клиентские соединения, маршрутизирует, ограничивает частоту | TCP / WebSocket | Только сессия | В каждом регионе игроков |
| Лобби / матчмейкинг | Друзья, чат, гильдии, очереди | TCP / WebSocket | Легкое (Redis) | Домашний регион или каждый регион |
| Комнаты / бои | Авторитетная симуляция, 15–60 тиков/с | UDP (KCP) или TCP | В памяти, на матч | Максимально близко к игрокам |
| Данные | Профили, инвентарь, рейтинги, логи | Внутренний | Долговременное | Домашний регион, реплики рядом |
Боевые серверы должны быть одноразовыми: если один упал, заканчиваются только матчи на нем. Все, чем владеет игрок, хранится в уровне данных.
Для пошаговых, карточных и idle-игр подходят TCP или WebSocket, для экшенов, шутеров и MOBA — UDP со слоем надежности вроде KCP.
| Транспорт | Для чего | Плюсы | Минусы |
|---|---|---|---|
| TCP | Карточные, RPG, стратегии, idle | Просто, надежно, проходит файрволы | Блокировка начала очереди: один потерянный пакет на мобильной сети останавливает весь поток |
| WebSocket | H5 и мини-игры, веб-клиенты | Проходит через прокси и CDN | Те же задержки, что у TCP, и чуть больше накладных расходов |
| Чистый UDP | Обновления позиций, которые можно потерять | Минимальная задержка | Порядок, надежность и шифрование — на вас |
| KCP поверх UDP | MOBA, шутеры, гонки, PvP в реальном времени | Быстрые повторные передачи; на сетях с потерями джиттер обычно заметно ниже, чем у TCP | Больше трафика (избыточные отправки); часть корпоративных и кампусных сетей блокирует UDP, нужен запасной TCP |
Ставьте боевые серверы по физическому местоположению игроков и маршрутам их провайдеров, а затем проверяйте реальными трассировками mtr из каждой целевой сети.
| Рынок игроков | Площадка IMIDC | Почему |
|---|---|---|
| Континентальный Китай | Гонконг | CN2 GIA (AS4809) обходит перегруженные в часы пик международные каналы, через которые идут многие стандартные маршруты |
| Тайвань, Гонконг, Макао | Тайбэй, Тайвань | Местные нативные IP и короткие пути к тайваньским провайдерам |
| Япония | Токио, Япония | Главный сетевой узел Японии; опция 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, ядро отбрасывает пакеты до того, как их прочитает сервер: увеличьте буферы, привяжите игровые процессы к ядрам или уменьшите число комнат на процесс. На TCP-шлюзах включите BBR и поднимите ulimit -n для процессов с большим числом сокетов.
Открытые серверы вроде Nakama (аккаунты, матчмейкинг, чат, рейтинги) или Colyseus (комнаты на Node.js) позволяют дойти от прототипа до софт-лонча, не написав каждый сервис с нуля.
# 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 отвечает за горячие и короткоживущие данные, реляционная БД — за все, потерю чего игрок не простит.
Запуск игры — излюбленная цель DDoS со стороны конкурентов, вымогателей или недовольных игроков, поэтому защиту планируют до открытия страницы в магазине.
Растите поэтапно и первым переносите на более мощное железо тот уровень, который начинает страдать, — обычно базу данных или боевые серверы.
| Этап | Пиковый онлайн (примерно) | Рекомендуемая схема |
|---|---|---|
| Прототип / ЗБТ | До ~2 000 | 1–3 VPS: Nakama/Colyseus и база на одной машине, например VPS в Гонконге с CN2 GIA и VPS в Японии |
| Софт-лонч на 1–2 рынках | ~2 000–20 000 | Выделенный сервер под БД, выделенный сервер или крупный VPS под бои в каждом регионе, Redis отдельно |
| Полный запуск в Азии | 20 000+ | Хост-ноды (выделенные серверы с Proxmox VE или Kubernetes) с плотной упаковкой боевых инстансов, БД с несколькими репликами, при необходимости колокация своего железа |
Емкость одного сервера сильно зависит от тикрейта и логики игры, поэтому цифры — лишь ориентиры для планирования; перед каждым этапом проводите нагрузочный тест ботами.
Подбирайте продукт под уровень и рынок, а не покупайте один размер везде.
Распространенная схема — боевые серверы для игроков из Китая на IMIDC в Гонконге с CN2 GIA, для Юго-Восточной Азии — в Сингапуре или Бангкоке, а бэкенд аккаунтов и платежей общий. Один Гонконг тоже приемлемо покрывает часть региона, но перед решением протестируйте на реальных игроках.
Пошаговым, карточным и idle-играм достаточно TCP или WebSocket. Экшенам, шутерам и MOBA лучше подходит UDP со слоем надежности вроде KCP плюс запасной TCP для сетей, блокирующих UDP.
Для серверов вне континентального Китая, включая IMIDC в Гонконге, регистрация ICP не требуется. Издание игр в континентальном Китае регулируется отдельно, поэтому проконсультируйтесь со специалистом; это не юридическая консультация.
IMIDC предлагает VPS и выделенные серверы в Сеуле (сеть KT) и в Токио с местными нативными IP, а также площадки в Гонконге, Тайбэе и Юго-Восточной Азии.
Сочетайте защиту на уровне провайдера с архитектурой: скрывайте IP боевых серверов до начала матча, требуйте токен в первом UDP-пакете и держите API логина за CDN. Сообщите IMIDC дату запуска заранее, чтобы спланировать мощности и защиту.
Готовите запуск в Азии? Начните с VPS в Гонконге с CN2 GIA или выделенного сервера в Сеуле, свяжитесь с отделом продаж IMIDC по узлам в Сингапуре, Бангкоке и Куала-Лумпуре или плану защиты от DDoS на запуск, либо создайте тикет, чтобы обсудить архитектуру с инженером.