Здравствуйте. Задача состоит в том, чтобы сделать real-time чат в

мобильном приложении. После передачи сообщения пользователем через веб-сокеты, для основного и долговременного хранения сообщений будет использоваться PostgreSQL. Изначально для оповещения системы о новом сообщении в PostgreSQL я хотел использовать Listen/Notify, это такая система (от PostgreSQL), которая позволяет уведомлять сервер о новом сообщении в базе данных. Но Listen/Notify может подойти, наверное, только для самых базовых задач при разработке приложения, потому что нагрузки он не выдерживает вообще.

Вместо Listen/Notify я принял решение взять RabbitMQ. После добавления сообщения в PostgreSQL, это сообщение отправляется в очередь RabbitMQ, которая уведомляет API сервер о том, что пришло новое сообщение. Далее, когда API сервер увидел новое сообщение, он отправляет его пользователю, которому было это сообщение направлено.

У меня будет single instance сервер PostgreSQL, single instance RabbitMQ и API сервер. На этом моменте у меня появились сомнения насчет RabbitMQ. Зачем мне RabbitMQ для уведомления API сервера, если у меня он будет один, и он будет узнавать о появлении нового сообщения даже раньше, чем PostgreSQL и RabbitMQ? Получается, что я просто могу отправить это сообщение сразу после добавления в PostgreSQL получателю?
Насчет нагрузок тут все очень неоднозначно. Первое время точно нагрузки будут не прям огромные (конечно, точно предугадать невозможно). Взять RabbitMQ я хотел для того чтобы больше перестраховаться, если пойдет нагрузка, но как я написал ранее, я сейчас вообще сомневаюсь, что RabbitMQ нужен, если будет один API сервер. Заранее огромное спасибо за ответ

5 ответов

15 просмотров

Стикер

🐾- Автор вопроса

Я ничего не жду, я пытаюсь разобраться что будет лучше конкретно для чата. Или если я сначала хотел взять Кафку то мне нужно чисто из принципа её брать?) если бы я тут информацию о Кафке написал то вам бы это что то дало?)

Стикер

На одном сервере норм делать обычный прям из туториалов по всяким signalr/socket.io Если хотите масштабирования, то уже не подойдёт. Но о каких нагрузках в уберпике идёт речь?

🐾- Автор вопроса

Стикер

Похожие вопросы

Обсуждают сегодня

Привет, делаю self-hosted github actions runner'ы на k8s для автоскейлинга, они распостраняются в виде helm chart'а. Так же мне нужно будет собрать свой образ, залить его в CR...
florius0
6
падает джоба хотя уже была собрана на соседнем namespace, куда капать? │ │ Copying blob sha256:2fa066caddb8f09a71082b03aa43046f79346a01d9c89e06a1f508bb1207dba5 427 │ │ Copyin...
Andrei St
6
Всем привет! А в werf есть возможность скипать проверку сертификата кластера? Я пытаюсь сделать werf converge из GitHub actions, но кластер на локалке с docker-desktop выходит...
Roman Ermakov
2
Подскажите пожалуйста, а я могу вот такую штуку использовать? rpc, только реализованное в реббите https://www.rabbitmq.com/tutorials/tutorial-six-php ( или https://habr.com/ru...
Artyom
11
Всем привет. Правильно ли я понимаю, что в 2.6.х werf использует кодовую базу helm? После перехода с 1.26 на 2.6.0 стали часто ловить ошибки типа этой https://github.com/helm/...
𝓐𝓵͢͢͢𝓮𝔁 C
2
Тут просто дело в том, что я не могу сейчас дать такие подробности из за того что рассчитать это всё нереально. Этого проекта который я хочу сделать ещё даже не существует) И ...
🐾
8
Имя релиза? Вот это можно сделать только для отдельного чарта/бандла, увы Если все объединить в один чарт, но установка только единым шматком большим и с одним именем релиза. ...
Alexander Kozharsky
1
Всем привет 👋 Подскажите пожалуйста, а чего тут не хватает permission или образ битый? Running with gitlab-runner 17.0.0 (44feccdf) on gitlab-runner-c58775949-d7znz YxYz2zp...
Max
2
Ребят привет) Я юзаю werf с билдом через локальный докер-сервер. Как туда подрубить кастомный синтаксис для докерфайла? https://docs.docker.com/reference/dockerfile/#syntax Т...
zakidyvatel Minaev
3
приветствую. Я заметил такую тему, если был собран Dockerfile с 1 версией например werf. Но при запуске образа, werf скачивает новый релиз сама автоматом. drwxr-xr-x 3 root ro...
vⱥ𝖉iϻ ϻⱥlͥтsͣeͫv♛
1
Карта сайта