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

请问一个关于局域网通信的问题

  •  1
     
  •   aLife20 · 2019-12-16 15:02:14 +08:00 · 1844 次点击
    这是一个创建于 1564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    向各位大佬请教一个问题,在一个局域网内有 N 台服务器,每台服务器上都有两份 XML(一份 a.xml 存储该台服务器的信息,另外一份 b.xml 存储该局域网内所有服务器的信息) 。

    1. 当新增了一台服务器到局域网内时,该局域网内所有服务器的 b.xml 都需要更新(新增这台新服务器的信息)。
    2. 当局域网里任意一台服务器的 a.xml 进行更改时,该局域网内所有服务器的 b.xml 都需要更新为最新的全局 xml (也就是把全部服务器里面的 b.xml 里面的修改服务器的信息进行更新)。
    3. 去中心化,不需要主服务器

    请问这个需求通过什么技术实现比较好,感觉有点类似于飞秋的功能。望大佬们点拨一下呀,提供一下搜索关键字也好呀。

    8 条回复    2019-12-16 18:01:14 +08:00
    jasonyang9
        1
    jasonyang9  
       2019-12-16 15:13:31 +08:00   ❤️ 1
    无中心架构就是靠广播咯,协议大致是这样的:

    * 当新增服务器时,发送 Hello 包,内容有自己的信息(即 a.xml ),其它服务器收到后更新自己的 b.xml
    * 当服务器更改自己的 a.xml 时,广播,其它服务器收到后更新自己的 b.xml
    * 当服务器下线时发送 Byebye 包,其它服务器收到后更新自己的 b.xml
    * 如果考虑到服务器宕机的可能性,那么要定期测试(心跳)其它所有服务器,发现失效的更新自己的 b.xml

    。。。当然这都是好人模式,没有认证的,服务器傻傻的相信自己收到的所有数据包。。。
    luoqeng
        2
    luoqeng  
       2019-12-16 15:35:36 +08:00   ❤️ 1
    这是一个共识问题,如何确保 b.xml 的一致性?

    解决方法就是选个 Raft 或者 Paxos 协议选举出 leader 保存下来。

    去中心化的 区块链?
    aLife20
        3
    aLife20  
    OP
       2019-12-16 16:14:03 +08:00
    @luoqeng 问了一圈,认可你的方案。
    请问你认为用什么样的协议比较好呢,udp 或者 socket 等等。
    最后一个问题,有类似的案例或者搜索关键字推荐一下嘛,不是特别想造轮子哈哈哈哈~
    aLife20
        4
    aLife20  
    OP
       2019-12-16 16:15:37 +08:00
    @luoqeng 遵循一楼的方案,舍弃性能,完全可以解决一致性的问题。
    Delon
        5
    Delon  
       2019-12-16 16:23:29 +08:00
    mDNS
    wangyzj
        6
    wangyzj  
       2019-12-16 16:35:27 +08:00
    用 etcd 或者 zookeeper 啊
    luoqeng
        7
    luoqeng  
       2019-12-16 17:58:11 +08:00
    @aLife20 服务发现注册
    lihongjie0209
        8
    lihongjie0209  
       2019-12-16 18:01:14 +08:00
    参考一下思科的设备发现协议, 这种事情在网络层很常见
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1793 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:31 · PVG 00:31 · LAX 09:31 · JFK 12:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.