gpt4 book ai didi

node.js - 使用粘性 session 和 websockets 进行扩展

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:19 24 4
gpt4 key购买 nike

最初我们有两个 AWS EC2 实例,node.js 在具有粘性 session 的负载均衡器后面运行。随着负载的增加,会添加更多的实例。

但是我们在使用这种方法时遇到了问题。由于我们的应用程序主要用于研讨会,因此负载通常会在短时间内(研讨会开始)增加,并且每个研讨会参与者对前两个实例都有粘性 session ,而新实例几乎没有。因此,性能仍然很差。

第一个想法是:让我们禁用粘性 session 。但这会破坏我们的 websockets,因为它们需要粘性 session (至少这是我读过的)。另一个问题是负载减少。实例关闭,套接字连接也丢失。

是否有一种方法可以在实例之间转移用户 session 或让 websockets 在没有粘性 session 的情况下工作(可能使用 Redis)?

最佳答案

解决方案是 Application Load Balancer (参见 comment)。

  1. 起初我们不得不禁用轮询,因为这对其余部分不起作用。这是通过手动定义传输来完成的。

    let ioSocket = io('', {
    path: '/socket.io-client'
    transports: ['websocket']
  2. 之后,我们设置了一个具有两个目标组的标准应用程序负载均衡器:一个用于 websockets,一个用于所有其他请求。 websocket 目标组的规则通过正则表达式匹配特定路径:

Path pattern

  1. 最后一个问题是扩展:如果其中一个实例因为集群负载较低而关闭,连接可能会丢失。这是在客户端断开连接后通过简单的重新连接解决的(在我们的例子中是一个角度应用程序):

    [...]
    this.socket.on('disconnect', () => {
    // Reconnect after connection loss
    this.connect();
    });
    [...]

关于node.js - 使用粘性 session 和 websockets 进行扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48383013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com