Забыли пароль?
Регистрация
Архитектура масштабирования боевой системы
24.09.2024 11:59:58
Итак, поняв особенности разработки игр, усвоив что важно и что не очень, можно выработать правильную (на мой взгляд) архитектуру, к которой стоит двигаться в текущих реалиях. Выглядит она так:
- По прежнему одна база данных, поверх нее работают все мелкие рутинные операции (регистрация пользователя, логин, покупки в магазине, одевание в казарме и т.п.). Для таких операций текущей базы хватит за глаза. А если не хватит - это будет означать тысячи игроков одновременно, что будет отличной проблемой. В таком случае можно будет просто развернуть еще один инстанс всего и раскидать игроков по разным серверам.
- Бои должны считаться в памяти и только результат боя записываться в базу. Здесь при относительно низком онлайне можно сохранять состояние боя на конец раунда или раз в минуту например, но в целом даже при полной работе боя от начала до конца в случае выхода из строя узла, на котором бой будет считаться, худшее, что мы получим - это ситуацию как будто бы боя и не было вовсе. Не очень приятный сценарий, но совсем не критичный, особенно учитывая его редкость. Кстати при разработке пустошей я сразу пошел в эту сторону - там все состояние хранится и обсчитывается в памяти, а в базу сохраняется раз в 10 секунд. Поэтому при перезапуске сервера игрок потеряет максимум 10 последних секунд своих действий.
- Работа с боями должна быть вынесена в отдельный сервис, который можно будет деплоить в неограниченных количествах на неограниченном кол-ве железа. В идеале завернуть в контейнер и иметь возможность автоматически скалироваться в облако по необходимости. Работать будет просто: стартуем на нем бой с определенными параметрами (игроки, поле и т.п.), сервис у себя в памяти создает независимый объект боя, внутри которого находится поле, игроки и все остальное. Нужен еще бой? Создаем новый независимый объект и внутри него все дополнительные структуры. При завершении боя дампим результат в базу и чистим память. Такой подход полностью исключит все блокировки между боями, останутся только запросы от игроков внутри одного боя, но это уже проблема совсем другого порядка, на практике можно сказать и не проблема вовсе.

Такая архитектура полностью решит вопрос скалируемости боевой системы. В спокойном режиме работаем на одном сервере, в случае взрывного роста - автоматически поднимаем контейнер в облачном кластере и отдаем задачи расчета боев туда. Растем еще сильнее? Добавляем еще ноды и скалируемся туда. При падении нагрузки убиваем ненужные контейнеры и снова сидим на одном сервере.

Есть только один ньюанс... тут тонна работы.



27.10.2026 ЭХ ПРОКАЧУ заработал 621555 опыта за последние сутки.
26.10.2026 Qwuack продал XaXaJlb 10.00 золотых кредитов на аукционе за 151.00 обычных.
26.10.2026 Самый мощный игрок недели - Укуренный Ёжик (максимальный рейтинг: 5112.0)
26.10.2026 Укуренный Ёжик заработал 20 тактических очков за последнюю неделю.
26.10.2026 ЭХ ПРОКАЧУ добыл 27 находок за городом за последнюю неделю.
26.10.2026 Истребитель киборгов недели - ЭХ ПРОКАЧУ. Убито 38 групп киборгов.
26.10.2026 mik заработал 57189 опыта за последние сутки.
25.10.2026 !Лис! заработал 240424 опыта за последние сутки.
24.10.2026 PHOENIX победил в клановом турнире.
24.10.2026 Виконт продал дубль три 50.00 золотых кредитов на аукционе за 701.00 обычных.
24.10.2026 ЭХ ПРОКАЧУ заработал 303186 опыта за последние сутки.
23.10.2026 Icecream продал ALIEN2005 50.00 золотых кредитов на аукционе за 751.00 обычных.
23.10.2026 ЭХ ПРОКАЧУ заработал 235323 опыта за последние сутки.
22.10.2026 Icecream продал дубль три 50.00 золотых кредитов на аукционе за 751.00 обычных.
22.10.2026 nikdor заработал 104455 опыта за последние сутки.
22.10.2026 Открыта запись на участие в клановом турнире.
21.10.2026 ЭХ ПРОКАЧУ заработал 676736 опыта за последние сутки.
20.10.2026 ЭХ ПРОКАЧУ заработал 345301 опыта за последние сутки.
19.10.2026 Самый мощный игрок недели - Укуренный Ёжик (максимальный рейтинг: 2232.7)
19.10.2026 ~HAMELEON~ заработал 22 тактических очков за последнюю неделю.
Начать игру
Рейтинг игроков
Октябрь 2026


!Лис! 12
Укуренный Ёжик 18
Militaris* 15
Qwuack 9
_ФаНтоМ_ 17
Серго 14
Мартосик 12
Baunatal_2.0 12
ЭХ ПРОКАЧУ 15
~HAMELEON~ 15
Рейтинг кланов
Октябрь 2026


10 PHOENIX 0.0
9 Гринпис 1.0
8 Волчья Стая 0.0
7 ANGELS 0.0
6 Эволюция 0.0
5 Полиция 0.0
4 Immortals 0.0
3 T.R.I.A.D.A. 0.0
Все кланы
Чемпионат
Сентябрь - Ноябрь


PHOENIX 21 (13, 8)
Полиция 18 (16, 2)
Гринпис 9 (9, 0)
Волчья Стая 6 (6, 0)
ANGELS 2 (0, 2)
Сектор 13 0 (0, 0)
Мафия 0 (0, 0)
Legion 0 (0, 0)
Alkatraz 0 (0, 0)
Resident Evil 0 (0, 0)
Все кланы
Союзы


Titanium
Nuntios Caeli
Bang!
Социальные сети


Группа ВКонтакте
Дневник разработчика