我正在尝试负载均衡一个nodejs服务端发送事件后台,并且需要知道是否有一种方法来将新连接分配给已连接客户端最少的实例。我的问题是在扩展时,路由器继续将新连接发送到已经饱和的实例上,而且由于这些连接具有长寿命,所以这种方法行不通。
对于水平扩展长期连接,我有哪些选项可用?
我正在尝试负载均衡一个nodejs服务端发送事件后台,并且需要知道是否有一种方法来将新连接分配给已连接客户端最少的实例。我的问题是在扩展时,路由器继续将新连接发送到已经饱和的实例上,而且由于这些连接具有长寿命,所以这种方法行不通。
对于水平扩展长期连接,我有哪些选项可用?
看起来您希望有一个负载均衡器,既能提供“粘性会话”,又能使用“最少连接”而不是“轮询”策略。不幸的是,NGINX 无法提供此功能。
HAProxy(高可用性代理)可以实现这一点:
backend bk_myapp
cookie MyAPP insert indirect nocache
balance leastconn
server srv1 10.0.0.1:80 check cookie srv1
server srv2 10.0.0.2:80 check cookie srv2
既然您正在使用AWS,我建议您使用Elastic Beanstalk来部署Node.js应用程序。官方文档提供了很好的示例,比如这个。请注意,Beanstalk会自动为您创建弹性负载均衡器,这正是您所需要的。
默认情况下,当您在Elastic Beanstalk控制台或EB CLI中启用负载均衡时,Elastic Beanstalk会为您的环境创建一个应用程序负载均衡器。它会将负载均衡器配置为在端口80上侦听HTTP流量,并将此流量转发到相同端口上的实例。