V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX  ›  程序员

请教关于 socket.io 负载均衡问题

  •  
  •   imherer · 2017-09-13 21:33:14 +08:00 · 2509 次点击
    这是一个创建于 2629 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 socket.io 做游戏服务端,按照官方的方案: https://socket.io/docs/using-multiple-nodes 做了负载均衡,主要思想就是用 Nginx 做 ip_hash。但是现在问题来了: 假如我有 S1,S2,S3 这 3 台服务器来做 socket 服务器,还有一台服务器 A 上面装了 Nginx 用来负载前面的 S1,S2,S3。这样用户一上来先连到 A,然后通过 A 分发到后面的 S1,S2,S3,但是这样 A 这台服务器就会产生单点故障,如何解决呢?

    因为之前的业务基本上都是用 AWS 的 ELB,所以不存在这个问题,但是 ELB 不支持 TCP 的粘性会话,所以这里想用 Nginx 来解决。 不知道各位大大有没有更好的解决方案。

    还有一个问题就是因为游戏是开房间机制的,几个用户在同一个房间内游戏(游戏时间很短,就几分钟),在游戏的过程中有一些服务端主动发起的倒计时什么的,如果我用了负载均衡(即多个 socket )如何保证多个服务器不会重复下发同样的指令呢?

    10 条回复    2017-09-14 13:06:56 +08:00
    aru
        1
    aru  
       2017-09-13 22:38:56 +08:00 via iPhone   ❤️ 1
    1. nginx 非常稳定,负载均衡的开销也很小,一般不会成为瓶颈,如果不是服务器本身原因,也很难挂掉。
    2. socket 服务器在后端通过某种方式选举每个房间的主动发起指令 socket 服务
    t123yh
        2
    t123yh  
       2017-09-13 22:42:49 +08:00 via Android   ❤️ 1
    后端可以使用消息队列来管理推送。
    imherer
        3
    imherer  
    OP
       2017-09-14 10:00:54 +08:00
    @aru 但是毕竟只有只有一台,还是不够保修。 不知道 Nginx 通用的做法是什么
    imherer
        4
    imherer  
    OP
       2017-09-14 10:01:17 +08:00
    @t123yh 好的,谢谢。我看看消息队列。
    mooncakejs
        5
    mooncakejs  
       2017-09-14 10:47:51 +08:00   ❤️ 1
    socket.io 自己维护了 session,也支持断线重连,所以用 tcp 代理就够了。
    imherer
        6
    imherer  
    OP
       2017-09-14 10:50:16 +08:00
    @mooncakejs 能详细点吗? 这块不是很懂。Nginx 的 ip_hash 是可以实现的对吧?
    mooncakejs
        7
    mooncakejs  
       2017-09-14 11:03:38 +08:00   ❤️ 1
    @imherer socket.io 负载均衡关键的不是前面是 nginx 还是 slb 或者 haproxy 之类,而是 socket.io Adapter 可以同步事件消息, 如果你担心 nginx 会造成单点故障,直接用 ELB 没问题的。
    imherer
        8
    imherer  
    OP
       2017-09-14 11:13:40 +08:00
    @mooncakejs
    @aru
    谢谢,但是现在对于 1 楼的 2 这个问题,我不知道怎么选举。
    aru
        9
    aru  
       2017-09-14 11:27:03 +08:00
    @imherer
    我猜推送消耗的资源不算多,用简单的办法来实现就行了。
    将房间人数除以房间 socket 服务的数量,取编号为余数的 socket 服务
    imherer
        10
    imherer  
    OP
       2017-09-14 13:06:56 +08:00
    @aru 谢谢,我研究研究。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:11 · PVG 23:11 · LAX 07:11 · JFK 10:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.