yisier / nps

在 0.26.10 版本的基础上修改而来的
https://ehang.io/nps/documents
GNU General Public License v3.0
1.84k stars 223 forks source link

是否考虑支持客户端多节点部署? #117

Closed lesteryou closed 6 months ago

lesteryou commented 11 months ago

目前,nps和nps都是单节点部署,都存在单点故障。 但是服务端nps一般都部署在服务器上,相对比较稳定。 主要是客户端npc,可能部署在各种机器上,比如路由器、nas、PC机等等;机器稳定性和网络稳定性都不是很高。而单节点的npc,只要挂了,反向代理服务就挂了。

我的想法是,针对同一个客户端,使用相同的key启动多个进程;服务端维持这多个客户端实例,当服务端收到请求时,可以随机从这多个客户端的实例中选择一个转发请求。这样就保证了客户端的高可用性。

Febtw commented 9 months ago

目前,nps和nps都是单节点部署,都存在单点故障。 但是服务端nps一般都部署在服务器上,相对比较稳定。 主要是客户端npc,可能部署在各种机器上,比如路由器、nas、PC机等等;机器稳定性和网络稳定性都不是很高。而单节点的npc,只要挂了,反向代理服务就挂了。

我的想法是,针对同一个客户端,使用相同的key启动多个进程;服务端维持这多个客户端实例,当服务端收到请求时,可以随机从这多个客户端的实例中选择一个转发请求。这样就保证了客户端的高可用性。

我觉得你的描述比较贴合我需要的负载均衡。 我需要的场景是,我有一个服务X,部署在机器A和机器B,互为备份,但机器A和机器B不在同一个网络。 我经过尝试,不能将机器A和机器B登录到同一个nps客户端,后登录的会将前面登录的挤掉,所以我有点疑惑客户端列表最大连接数和当前连接数的统计是什么,是否可以多台设备使用同一个客户端? 我也尝试将机器A和机器B分别登录不同的客户端,但是同一TCP隧道不能添加多个客户端ID为区分进行负载均衡。

目前将就的方案是使用nginx的负载均衡,感觉用起来不是很丝滑。可否设置当客户端未连接时,使用该客户端的隧道/代理端口自动关闭,这样也方便nginx进行判断tcp负载均衡

其实我更希望nps可以出一个类似于frp可以将多个相同类型的代理加入到同一个 group 中,从而实现负载均衡的功能。 https://gofrp.org/docs/features/common/load-balancer/