【问题标题】:Load balancing websockets on ECS?ECS上的负载平衡websockets?
【发布时间】:2023-03-06 12:17:01
【问题描述】:

我才刚刚开始理解和解决这个问题。

Node.js 的 Socket.io 或 Go 的 Gorilla websocket 解决方案每个实例都有一个连接池。因此,在每个实例中,我都可以说“向客户端 xxx 发送消息”。

但是,当我尝试水平扩展(通过生成其他实例)时,每个实例都有自己的客户端连接池,因此尝试向连接到另一个实例的特定客户端发送消息会失败。我认为这是因为当前实例无权访问该实例的连接/内存池。

我知道 ECS 会自动水平扩展 docker 容器,如果我要在 ECS 上启动一个 WS 服务器项目并让它扩展另一个实例到该服务,AWS 是否会神奇地处理套接字服务器实例之间的对话 - 还是我必须处理那个?

【问题讨论】:

  • AWS 不会将您的 websocket 会话绑定到特定实例。要搜索的关键字:AWS ALB(支持 WebSockets)、SocketCluster。

标签: javascript amazon-web-services amazon-ecs


【解决方案1】:

根据 MDN

WebSockets 是一种先进的技术,可以在用户的​​浏览器和服务器之间打开交互式通信会话。

这意味着每个 websocket 都是到特定服务器的持久连接。为了向不同服务器中的套接字发送事件,您需要一个适配器。例如,如果您使用的是 Socket.io,您可以查看 SocketIO Redis

另一方面,为了平衡负载,您可以使用 Application Load Balancer (ALB),它支持 ECS 中的 websocket 和容器化应用程序。

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 2017-05-23
    • 2013-08-20
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2022-06-13
    相关资源
    最近更新 更多