Как разработать масштабируемую систему обмена сообщениями с помощью Celery, Redis, Django Channels и FastAPI?
Я разрабатываю масштабируемую систему обмена сообщениями, основанную также на Django, в которой пользователи смогут обмениваться сообщениями в режиме реального времени. Вот основные требования и технологии, которые я планирую использовать:
Я планирую использовать Celery для обработки фоновых задач, таких как обработка доставки сообщений и уведомлений. Redis будет выступать в качестве брокера.
Для хранения сообщений я рассматриваю базу данных NoSQL, например MongoDB, из-за ее гибкости и масштабируемости. Каждое сообщение будет содержать такие поля, как message_id, sender_id, receiver_id, content, timestamp и status. Просто подход с одной таблицей.
Для доставки сообщений в реальном времени и уведомления пользователей я рассматриваю Django Channels или FastAPI с WebSockets.
Слой кэширования: Redis также будет использоваться в качестве слоя кэширования для повышения производительности часто используемых данных, таких как уведомления пользователей или непрочитанные сообщения.
Масштабируемость и производительность: Система должна поддерживать до 1 000 сообщений в секунду. Она должна обрабатывать более 10 000 одновременных пользователей, просматривающих сообщения одновременно. Ежедневное количество активных пользователей может превышать 100 000.
Мои вопросы:
Подходит ли эта архитектура для моих требований, или мне следует рассмотреть альтернативные технологии?
При каком масштабе мне следует начать рассматривать возможность шардирования базы данных MongoDB, чтобы эффективно справляться с нагрузкой?
Достаточно ли балансировщика нагрузки (например, Nginx) для обработки WebSocket-соединений и API-запросов, или мне следует изучить более продвинутые настройки, такие как Kubernetes для оркестровки контейнеров?
Любые соображения о возможных подводных камнях, альтернативных конструкциях или реальном опыте использования подобных систем будут высоко оценены.