Laravel 负载均衡器背后的事件 - 如何使事件对自动缩放组中的所有服务器可见

Laravel events behind load balancer - how to make the event visible to all the servers in the autoscale group

我有一个申请 运行 Laravel 6.1。有些客户端通过 laravel websockets 连接到它并监听事件。我有一个向该服务器发送 post 请求的外部服务,该服务器随后会引发一个事件,而 websocket 客户端会看到它。我在开发阶段,还没有部署,这是我目前正在研究的。我使用 Docker,所以有一个 nginx 容器、一个 php 容器和一个 Mysql 容器(在生产中,容器将使用 RDS)

这在开发中运行良好,但计划是使用 Elastic Beanstalk 在 ECS 中部署,因为它为每个 EC2 实例启用了多个容器。我正计划让这些实例使用负载平衡器自动缩放,所以我的问题是 如何使传入事件在所有服务器上引发并可见? 例如,post 请求可能会命中一个实例,连接到该实例的客户端会看到事件已引发,但连接到另一个实例的客户端将看不到引发的事件。这是准确的吗?我想这些事件必须被发送到某种由所有实例监视的“队列”,但不确定如何使用 Laravel 或是否有更简单更快的方法来实现它。

根据评论。

建议的解决方案涉及使用 sns 而不是 SQS。

原因是 sns 允许同时将消息传递给多个收件人。相比之下,除非在 fan out 体系结构中使用,否则 SQS 旨在将消息一次传递给一个收件人。