sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.62k stars 1.15k forks source link

(feat) Read-only member(learner) #8

Closed yangl closed 5 years ago

fengjiachun commented 5 years ago

两种方式: 1、Leader 像给 followers 发送日志一样给 learner 发送日志 优点:逻辑清晰简单,几乎不需要增加什么新功能,代码中处理一下 learner 角色即可 缺点:节点数量巨大时 leader 压力大并且带宽可能成为瓶颈 2、Learner 启动后避开 leader 向地址列表中的任意 follower 发送 拉取 日志请求 优点:不给 leader 增加压力,follower 的选择可以随机可以复杂最低可以机房就近等等 缺点:新增拉取日志逻辑,类似 kafka

看起来 2 好一些

其他: 1、Learner 默认不应用 log 到状态机,但要有从 learner 变为 follower/leader 的能力

killme2008 commented 5 years ago

I am working on this feature right now.

killme2008 commented 5 years ago

@fengjiachun 从实现角度,我偏向于 1 的方式, configuration 的 peer 列表增加一个 learner 集合,专门用于管理 learner, learner 跟普通的节点没有差异,也应用状态机,也做 snapshot,只是不参与选举,不计入 quorum

killme2008 commented 5 years ago

第 2 种方式可以作为未来功能的扩展。

fengjiachun commented 5 years ago

@fengjiachun 从实现角度,我偏向于 1 的方式, configuration 的 peer 列表增加一个 learner 集合,专门用于管理 learner, learner 跟普通的节点没有差异,也应用状态机,也做 snapshot,只是不参与选举,不计入 quorum

恩,2 可以未来持续优化

edtbl76 commented 5 years ago

@fengjiachun 从实现角度,我偏向于 1 的方式, configuration 的 peer 列表增加一个 learner 集合,专门用于管理 learner, learner 跟普通的节点没有差异,也应用状态机,也做 snapshot,只是不参与选举,不计入 quorum

恩,2 可以未来持续优化

我同意情况1。在更改配置(即追赶)期间,该逻辑已成为筏规范的一部分。无投票权的跟随者/学习者还启用跨区域筏的非多主机用例。有可用性时间表吗? PS:我很抱歉的语法。使用Google翻译从英语翻译。 Wǒ tóngyì qíngkuàng 1. Zài gēnggǎi pèizhì (jí zhuīgǎn) qíjiān, gāi luójí yǐ chéngwéi fá guīfàn de yībùfèn. Wú tóupiào quán de gēnsuí zhě/xuéxí zhě hái qǐyòng kuà qūyù fá de fēi duō zhǔjī yònglì. Yǒu kěyòngxìng shíjiān biǎo ma? PS: Wǒ hěn bàoqiàn de yǔfǎ. Shǐyòng Google fānyì cóng yīngyǔ fānyì.

killme2008 commented 5 years ago

@edtbl76 It will be ready in 1.3.0 version, should be delivered in one month.