Tob*_*ngl 6 load-balancing amazon-web-services node.js sticky-session elastic-load-balancer
最初,我们有两个AWS EC2实例,它们的node.js在带有粘性会话的负载均衡器后面运行。随着负载增加,将添加更多实例。
但是我们正面临这种方法的问题。由于外出应用主要用于车间,因此负载通常会在较短的时间内(车间开始)增加,并且每个车间参与者都对前两个实例有粘性会议,而新实例几乎没有。因此,性能仍然很差。
首先想到的是:让我们禁用粘性会话。但这破坏了我们的网络套接字,因为它们需要粘性会话(至少这是我读过的内容)。另一个问题是负载减少。实例关闭,套接字连接也丢失。
有没有一种方法可以在实例之间转移用户会话或使Websocket在没有粘性会话的情况下工作(也许使用Redis)?
起初我们不得不禁用轮询,因为这对其余部分不起作用。这是通过手动定义传输来完成的。
let ioSocket = io('', {
path: '/socket.io-client'
transports: ['websocket']
Run Code Online (Sandbox Code Playgroud)之后,我们设置了一个标准的应用程序负载均衡器,其中包含两个目标组:一个用于 websockets,另一个用于所有其他请求。websocket 目标组的规则通过正则表达式匹配特定路径:
最后一个问题是扩展:如果其中一个实例因集群连接负载较低而关闭,则可能会丢失。这是在客户端断开连接后通过简单的重新连接修复的(在我们的例子中是一个角度应用程序):
[...]
this.socket.on('disconnect', () => {
// Reconnect after connection loss
this.connect();
});
[...]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |