Задать вопрос
@nelfo

Как организовать отправку сообщений в множество микросервисных нод?

Есть самонописанная сетевая нода (микросервис) на golang. Она принимает текстовые сообщения через REST и далее требуется отправить это сообщение другим таким же нодам (список нод заранее известен, их может быть 1, 30, 100 и т.д. любое количество). Но, ноды между сообой пересылают сообщения через grpc. Т.е. у каждой ноды две точки приема сообщений - rest и grpc. Как организовать передачу таких сообщений с точки зрения архитектуры? Складывать сообщения от rest и grpc в общую очередь и другим потоком делать отправку, наверное будет не очень эффективно. Разгребать общую очередь пулом потоков не очень понятно как, т.к. придется как-то делить сообщения по потокам в пуле и отправляемым другим адресам нод, но все ноды должны получить каждое сообщение. Отправлять без очереди, сразу при поступлении новых сообщений - накладные расходы на установку grpc-соединений. По сути каждое новое сообщение будет инициировать новое клиентское подключение к серверу и создавать новую горутину, что приведет к задержкам в сети, выделению лишней памяти и т.п.
Какие есть подходы для решения такой проблемы?
  • Вопрос задан
  • 50 просмотров
Подписаться 2 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Берете какой-нибудь брокер сообщений.
Например, Rabbitmq.
Там создаёте exchange с типом fanout. Туда будете слать сообщения из сервиса-отправителя.
Каждый сервис-получатель будет подключаться к этому exchange и для каждого будет создаваться своя очередь, куда будут попадать все сообщения. И каждый сервис спокойно сам вычитает свою очередь. И даже если он упадёт, то дочитает их после того, как подымется.
https://youtu.be/P_EtQ-s-hiU?si=tavSDSzTnGpqQrAY
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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