Как разделить Django Channels WebSockets в масштабируемый микросервис для многопользовательской игры?
У меня есть веб-приложение Django, которое включает в себя функцию многопользовательской игры, использующей Django Channels для связи в реальном времени через WebSockets. В настоящее время функциональность WebSockets (обновления игры в реальном времени, взаимодействие игроков и т.д.) обрабатывается непосредственно в основном Django-приложении.
По мере роста проекта я рассматриваю возможность выделения логики WebSockets/игры в отдельный микросервис для масштабируемости и удобства обслуживания. Мои цели - иметь выделенный микросервис, который обрабатывает все коммуникации в реальном времени и игровую логику, и иметь возможность масштабировать этот сервис независимо от основного веб-приложения Django.
Вот конкретные детали моей установки:
- Бэкенд-фреймворк: Django (с Django Channels для WebSockets)
- Текущая архитектура: Монолитное приложение Django с WebSockets, обрабатываемыми непосредственно в той же кодовой базе - что и остальное приложение .
- Желаемая архитектура: Отдельный микросервис, предназначенный для обработки WebSocket-соединений и игровой логики, который можно масштабировать независимо .
Вопросы:
- Какие существуют лучшие практики для выделения WebSocket-коммуникаций в реальном времени в отдельный микросервис?
- Какие инструменты или технологии могут быть полезны для построения этого масштабируемого микросервиса на основе WebSocket? Я бы хотел не использовать другие сервисы django, а что-то более легкое .
- Как должно осуществляться взаимодействие между основным Django-приложением и WebSocket-микросервисом (например, API, очереди сообщений и т.д.)?
- Как управлять аутентификацией?
Первые попытки разделения: Я попробовал отделить логику WebSocket в новое приложение Django в рамках того же проекта, надеясь, что это позволит мне легче управлять ею. Я ожидал, что это облегчит масштабирование части WebSocket, сохраняя ее в том же фреймворке.