AWS SQS — настройка для горизонтального масштабирования

Я использую AWS SQS, поэтому два моих приложения (назовем их приложение 1 и приложение 2) могут взаимодействовать друг с другом. До сих пор приложение 1 отправляло сообщение в очередь, а приложение 2 прослушивало и обрабатывало сообщение, отправленное из приложения 1. Поток заключается в том, что клиент (приложение ReactJS) отправляет HTTP-запрос в приложение 1, приложение 1 пересылает сообщение в приложение 2. используя AWS SQS, а затем приложение 2 через веб-сокеты передает определенное сообщение всем другим пользователям/клиентам (здесь важно то, что все соединения с веб-сокетами находятся в приложении 2)

Но в прошлый период мне нужно было реализовать горизонтальное масштабирование приложения 2 (я запускаю ровно 2 экземпляра приложения 2), и теперь соединения веб-сокетов разделены, некоторые соединения веб-сокетов находятся в экземпляре 1 приложения 2, а некоторые соединения веб-сокетов - в экземпляре 2. приложения 2. В последнее время я столкнулся с проблемой, когда приложение 1 отправляет сообщение в очередь, а затем только один из экземпляров приложения 2 читает сообщение.

Итак, мой вопрос: есть ли вероятность того, что оба экземпляра приложения 2 прочитают сообщение SQS, или есть какой-то другой способ справиться с этой ситуацией? Заранее спасибо!


person los pollos hermanos    schedule 21.12.2020    source источник


Ответы (1)


Насколько я понимаю, разветвление (дополнительная информация также здесь) решит вашу проблему. В архитектуре ваше приложение 1 будет отправлять сообщение в тему SNS вместо очереди SQS. Затем вы подпишете на тему две очереди SQS, чтобы у каждого экземпляра была своя тема. Таким образом, сообщение будет транслироваться в два экземпляра приложения 2.

Если вы не можете изменить первоначальный SQS на SNS, вам потребуется повторно транслировать сообщения из SQS в SNS, например, с помощью лямбда-функции.

Архитектура также очень масштабируема, поскольку при добавлении третьего экземпляра вы просто добавляете третью очередь SQS.

person Marcin    schedule 21.12.2020