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

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

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



05.10.2026 Icecream установил новый образ.
05.10.2026 Самый мощный игрок недели - Меф. (максимальный рейтинг: 5093.1)
05.10.2026 Одеяло заработал 18 тактических очков за последнюю неделю.
05.10.2026 Укуренный Ёжик добыл 12 находок за городом за последнюю неделю.
05.10.2026 Истребитель киборгов недели - Виконт. Убито 85 групп киборгов.
05.10.2026 Виконт заработал 1041428 опыта за последние сутки.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 99.01 обычных.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 151.00 обычных.
04.10.2026 !Лис! продал Калипсо 10.00 золотых кредитов на аукционе за 99.01 обычных.
04.10.2026 !Лис! продал Калипсо 28.00 золотых кредитов на аукционе за 447.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал Калипсо 50.00 золотых кредитов на аукционе за 799.01 обычных.
04.10.2026 !Лис! продал ~.maks.~ 50.00 золотых кредитов на аукционе за 801.00 обычных.
04.10.2026 Skystorm и Icecream вступили в брак.
04.10.2026 Виконт заработал 358428 опыта за последние сутки.
03.10.2026 Icecream продал Псих Одиночка 100.00 золотых кредитов на аукционе за 1800.01 обычных.
03.10.2026 Qwuack продал Атеист 10.00 золотых кредитов на аукционе за 801.00 обычных.
Начать игру
Рейтинг игроков
Октябрь 2026


Меф. 18
!Лис! 12
Militaris* 15
Qwuack 9
Straik2025 12
Виски 9
Серго 14
Мартосик 12
mouse* 12
roma 11
Рейтинг кланов
Октябрь 2026


0 PHOENIX 17.3
0 Гринпис 8.4
0 Волчья Стая 5.1
0 Полиция 3.0
0 ANGELS 2.1
0 Эволюция 2.0
0 Immortals 1.0
0 T.R.I.A.D.A. 0.0
Все кланы
Чемпионат
Сентябрь - Ноябрь


PHOENIX 12 (4, 8)
Полиция 11 (9, 2)
Гринпис 7 (7, 0)
Волчья Стая 2 (2, 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!
Социальные сети


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