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

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

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

    如题。

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

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

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

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

    谢谢大家~

    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   ·   实用小工具   ·   3056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:18 · PVG 21:18 · LAX 05:18 · JFK 08:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.