维护有用户状态的服务器中心节点如何实现主从等高可用架构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fsneak
V2EX    Java

维护有用户状态的服务器中心节点如何实现主从等高可用架构?

  •  
  •   fsneak 2016-07-12 11:26:04 +08:00 3367 次点击
    这是一个创建于 3384 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。

    现在的项目中,有一些全局唯一的中心节点需要为众多的服务器提供服务。 比如有一个可以组队匹配的功能,要求无论用户在哪一个服务器登录,都可以和在所有其他服务器登录的用户进行组队,队伍之间可以进行匹配。这就要求有一个中心节点维护这些队伍的信息,并且执行队伍之间匹配的操作。

    这就意味着,如果这个中心节点的服务器宕机了,则全部服务器的用户都无法使用相关功能。

    当然一个方法是做集群,把这个服务分散到多个节点但是一个服务器宕机之后,这台服务器上的用户状态仍然会丢失。

    所以我更想知道的是,有没有什么方案或者思路,可以实现一种主从的架构,让主服务器宕机的时候,从服务器可以接管主服务器上的用户状态,从而实现无缝切换?

    谢谢大家~

    8 条回复    2016-07-13 00:06:13 +08:00
    rootit
        1
    rootit  
       2016-07-12 11:51:36 +08:00
    维护这些队伍的信息 是放在哪里的数据?
    fsneak
        2
    fsneak  
    OP
       2016-07-12 12:18:52 +08:00
    @rootit 目前是放在中心节点的内存中。
    具体是,登录服务器把用户的信息以及队伍相关的操作(比如加入、离开、准备、开始匹配等)发给中心节点,队伍状态发生变化的时候,中心节点再把这些信息广播给队伍中的所有用户。这些数据结构和状态的维护都在中心节点的内存中进行。
    rootit
        3
    rootit  
       2016-07-12 12:57:15 +08:00   1
    在我的已知里内存做不了高可用,你可以使用 memecached 或 redis 来存储这些信息, redis 性能相对差一点但是高可以很好做。
    eliteYang
        4
    eliteYang  
       2016-07-12 13:36:53 +08:00
    如果放在内存里是不太好做的,建议放进缓存里,例如 NoSQL ,这样数据剥离出了程序后,节点才都可以访问数据,从而做节点的负载均衡和动态扩容。
    StanWang
        5
    StanWang  
       2016-07-12 15:18:19 +08:00
    主从切换,容易出现脑裂问题,这种结构的实现可以参考 ZooKeeper 的选举算法 Paxos
    henglinli
        6
    henglinli  
       2016-07-12 17:01:20 +08:00 via iPhone
    用 zookeeper 吧,另外 zookeeper 的算法教 ZAB
    anexplore
        7
    anexplore  
       2016-07-12 23:18:15 +08:00 via iPhone
    可以参考 zookeeper 的实现
    fwrq41251
        8
    fwrq41251  
       2016-07-13 00:06:13 +08:00
    raft 协议
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2830 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:40 PVG 10:40 LAX 19:40 JFK 22:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86