Laravel событий за балансировщиком нагрузки - как сделать событие видимым для всех серверов в группе автомасштабирования - PullRequest
1 голос
/ 01 августа 2020

У меня запущено приложение Laravel 6.1. Есть клиенты, которые подключаются к нему через laravel веб-сокеты и слушают события. У меня есть внешняя служба, которая отправляет почтовые запросы на этот сервер, который затем вызывает событие, и клиенты websocket видят его. Я нахожусь на стадии разработки, и он еще не развернут, это то, что я сейчас исследую. Я использую Docker, поэтому есть контейнер nginx, контейнер php и контейнер Mysql (хотя в производстве контейнеры будут использовать RDS)

Это отлично работает в разработке, но план заключается в развертывании в ECS с Elasti c Beanstalk, так как он позволяет использовать несколько контейнеров для каждого экземпляра EC2. Я планировал автоматическое масштабирование этих экземпляров с помощью балансировщика нагрузки, поэтому мой вопрос: как сделать так, чтобы входящие события поднимались и отображались на всех серверах? Например, почтовый запрос может попасть в один экземпляр и клиенты, подключенные к этому экземпляру, увидят, что событие было инициировано, но клиенты, подключенные к другому экземпляру, не увидят возникшее событие. Это точно? Я предполагаю, что события должны быть отправлены в какую-то «очередь», которая отслеживается всеми экземплярами, но не знаю, как это реализовать с помощью Laravel или если есть более простой и быстрый способ.

1 Ответ

0 голосов
/ 03 августа 2020

На основе комментариев.

Предлагаемое решение предполагает использование sns вместо SQS.

Причина в том, что sns позволяет доставлять сообщения множеству получатели одновременно. Напротив, SQS предназначен для одной доставки сообщений только одному получателю, если только он не используется в архитектуре разветвление .

...