Вопросы и просьба о пересмотре архитектуры бэкенда MMO
Я делаю простой MMO бэкенд с Django в качестве личного/портфолио проекта.
(на самом деле я не делаю игру MMO)
Вы можете найти проект здесь
У меня есть несколько вопросов к архитектуре, потому что я ее проектировал
1. Архитектура
1.1 Терминология
AuthServer= Веб-сервер, отвечающий за аутентификацию
UniverseServer= Веб-сервер, отвечающий за постоянное хранилище игры (Не смог найти лучшего названия)
MatchmakingServer= Веб-сервер, который действует как посредник между клиентом и GameServerManager
GameServerManager= Менеджер кластера, отвечающий за запуск/остановку GameServerInstances
.
GameServerInstance= Экземпляр игрового сервера
PlayerClient= Игровой клиент игрока
1.2 Поток
1.2.1 Аутентификация
- PlayerClient входит на AuthServer для получения AuthToken на
/api/auth/login/
1.2.2 Получение данных игрока
- PlayerClient запрашивает все необходимые данные с UniverseServer по адресу
/api/universe/user/{...}
(пример: список персонажей)
1.2.3 Подключение к игровому серверу
- PlayerClient запрашивает доступный игровой сервер у MatchmakingServer с некоторыми параметрами .
- Сервер MatchmakingServer проверяет, есть ли доступный GameServerInstance в базе данных с этими параметрами .
- Если есть доступный GameServerInstance, MatchmakingServer отвечает PlayerClient с IP и портом GameServerInstance, иначе он пошлет запрос менеджеру GameServerManager на порождение одного .
Когда MatchmakingServer запрашивает GameServerManager для порождения экземпляра, он передает ServerAuthToken, чтобы GameServerInstance мог делать авторизованные запросы к /api/universe/server/{...}/
для обновления любого значения (например: опыт персонажа)
В проекте Django я реализую AuthServer, UniverseServer, MatchmakingServer как отдельные приложения, чтобы оставаться как можно более модульным.
Прежде всего, я бы хотел, чтобы опытный в этой области человек пересмотрел всю архитектуру.
И вопросы:
- Имеет ли смысл эта архитектура? Что я мог бы изменить, чтобы улучшить (даже для именования на более стандартные именования/функциональность/etc...) .
- Какие инструменты можно использовать в качестве GameServerManager. Могут ли это сделать kubernetes/agones? Есть ли что-нибудь для этого у AWS или CloudOcean? .
- Я делаю этот проект в качестве портфолио, но есть ли у этой архитектуры/стека возможности для запуска в производство даже для mmo с небольшой базой игроков, как ROTMG?
- Как это можно масштабировать? Разделить приложения по разным проектам и разместить все по отдельности? Использовать балансировщики нагрузки? Использовать прокси?
- Считается ли это облачной архитектурой, облачной оркестровкой или чем-то еще?
Любой совет приветствуется
Из вопросов вы можете понять, что у меня минимальные знания в этой области, поэтому, пожалуйста, будьте как можно более подробными (или/и предоставьте ресурсы, чтобы прочитать больше)
Спасибо за ваше время :)