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

2019-12-16 15:02:14 +08:00
 aLife20

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

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

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

2007 次点击
所在节点    程序员
8 条回复
jasonyang9
2019-12-16 15:13:31 +08:00
无中心架构就是靠广播咯,协议大致是这样的:

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

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

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

去中心化的 区块链?
aLife20
2019-12-16 16:14:03 +08:00
@luoqeng 问了一圈,认可你的方案。
请问你认为用什么样的协议比较好呢,udp 或者 socket 等等。
最后一个问题,有类似的案例或者搜索关键字推荐一下嘛,不是特别想造轮子哈哈哈哈~
aLife20
2019-12-16 16:15:37 +08:00
@luoqeng 遵循一楼的方案,舍弃性能,完全可以解决一致性的问题。
Delon
2019-12-16 16:23:29 +08:00
mDNS
wangyzj
2019-12-16 16:35:27 +08:00
用 etcd 或者 zookeeper 啊
luoqeng
2019-12-16 17:58:11 +08:00
@aLife20 服务发现注册
lihongjie0209
2019-12-16 18:01:14 +08:00
参考一下思科的设备发现协议, 这种事情在网络层很常见

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX