Channel 如何在多个服务器上做负载均衡?

sorcerer

Channel通讯组件,需要对server服务端做负载均衡,且客户端worker也在不同的服务器上,在不同客户端worker上做了长连接。
server服务端做负载均衡可以实现吗?
各客户端worker的长连接数据池如何共享?
用户端通过ws建立连接可以通过负载均衡的IP或lvs吗?

阅读 2232
1个回答

walkor

server服务端做负载均衡可以实现吗?

Channel/Server 目前只能单进程,没有负载均衡的需要。

各客户端worker的长连接数据池如何共享?

进程间无法共享连接,当需要操作某个进程的某个/些连接时可以通过Channel通讯组件通知对应进程处理

用户端通过ws建立连接可以通过负载均衡的IP或lvs吗?

可以

  • sorcerer 2018-05-18

    那就是说客户端只能通过真实ip和端口去连接1个Channel/Server进程,在负载多个worker的时候需要把Channel/Server进程与worker分开服务器部署,多个worker支持长连接的负载均衡单无法直接共享数据池,实际用户在建立连接的时候是不会重复。重连的时候可能会连到服务器和之前握手的不同。在推送的时候需要让这些worker同时收到消息在对每个worker内的连接进行筛选之后推送。

  • walkor 2018-05-18

    客户端通过ip 域名 lvs slb nginx负载均衡 haproxy负载均衡等方式都可以去连Channel/Server,没有限制。

  • walkor 2018-05-18

    我不清楚你说的共享数据池是什么东西

  • walkor 2018-05-18

    推送的时候不一定推给所有worker进程,可以利用channel只推给需要的进程。例如向单个客户端推送的时候,客户端id里包含了连接所在的进程信息,那么只需要给对应进程推送即可。这些都是可以自己写逻辑控制的。