基于 Gossip,新节点加入集群如何同步集群中现有数据和同步过程收到的新数据更新?

2020-05-16 11:31:57 +08:00
 tktk
3145 次点击
所在节点    Go 编程语言
5 条回复
joesonw
2020-05-16 14:34:45 +08:00
你这个需求上 raft 呀, gossip 适合 eventually consistent.
tktk
2020-05-16 15:25:27 +08:00
@joesonw raft 的强一致性,但是新的节点进入还是必须同步之前已经存在的数据吧 ? 我选 gossip 的原因是我更看重可用性和分区性。我刚才想了一下决定不同步订阅和客户端信息了。像 redis 集群一样直接广播收到的消息,让各个节点自行检查自己是否要要处理。
Sunmxt
2020-05-17 02:01:35 +08:00
个人感觉解法是,将状态放到专门的地方( redis 等等),或自己设计一个增量同步的协议,自己保证最终一致性,后者感觉会比较多坑。memberlist 基于那篇 SWIM 的论文,其 boardcast 是用于少量事件的同步的,最初应该就不是设计用来广播大量数据的。
cqcsdzmt
2021-12-01 11:34:18 +08:00
哥们最终是怎么实现的呢?可以分享一下吗
tktk
2021-12-01 18:25:56 +08:00
@cqcsdzmt 直接用的别人的 raft 库,只要自己实现状态机就好了。https://github.com/lni/dragonboat

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

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

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

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

© 2021 V2EX