Какая архитектура подойдет для моего мобильного приложения Chat в данной ситуации?
Я разрабатываю приложение для android, подключающееся к бэкенду django. Мой сервер django в AWS уже имеет собственную базу данных mysql. (Firebase используется для аутентификации по sns). Теперь мне нужно добавить функции чата в это приложение. Оно включает групповой чат, но, вероятно, многие пользователи могут использовать чат 1:1.
Мой вопрос заключается в том, какая архитектура подходит для мобильного приложения Chat? Варианты, о которых я сейчас думаю...
- Сообщения чата хранятся в базе данных mysql в AWS, а сервер уведомляет о сообщении только с помощью FCM (Firebase cloud messaging). Все текстовые, графические или голосовые ссылки будут находиться в полезной нагрузке для FCM. Пользователь может войти в систему только на одном устройстве одновременно. (Если этот вариант не имеет критических проблем с производительностью, я думаю, что это простой способ, потому что у меня уже есть бэкэнд с базой данных, и мне не нужно заботиться о том, находится ли мобильное приложение пользователя на переднем плане или в фоновом режиме. Если приложение должно показывать сообщения, когда чат (канал) установлен на стяжке, иначе просто используется лоток уведомлений) .
- Использовать базу данных Firebase Realtime только для функций чата. Это реальное время, но мне нужно создать дополнительную базу данных в Firebase, и я не уверен, как обрабатывать сообщения, когда приложение находится в фоновом режиме.
- Сообщения чата хранятся в базе данных mysql в AWS. И когда приложение показывает чат на экране, оно устанавливает сокетное соединение с внутренним сервером. Сервер обрабатывает соединения и определяет способ доставки сообщений (сокет или FCM push-уведомление в зависимости от статуса приложения получателя) .
- или лучший вариант?