加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

蚂蚁金服开源 SOFAJRaft:出产级 Java Raft 算法库

发布时间:2019-03-19 05:01:40 所属栏目:建站 来源:佚名
导读:什么是 SOFAJRaft? SOFAJRaft 是一个基于Raft同等性算法的出产级高机能 Java 实现,支持 MULTI-RAFT-GROUP,合用于高负载低耽误的场景。 行使 SOFAJRaft 你可以专注于本身的营业规模,由 SOFAJRaft 认真处理赏罚全部与 Raft 相干的技能困难,而且 SOFAJRaft
副问题[/!--empirenews.page--]

什么是 SOFAJRaft?

SOFAJRaft 是一个基于 Raft 同等性算法的出产级高机能 Java 实现,支持 MULTI-RAFT-GROUP,合用于高负载低耽误的场景。 行使 SOFAJRaft 你可以专注于本身的营业规模,由 SOFAJRaft 认真处理赏罚全部与 Raft 相干的技能困难,而且 SOFAJRaft 很是易于行使,你可以通过几个示例在很短的时刻内把握它。

https://raft.github.io

SOFAJRaft 是从百度的 braft 移植而来,做了一些优化和改造,感激百度 braft 团队开源了云云优越的 C++ Raft 实现。

https://github.com/brpc/braft

基本常识:漫衍式共鸣算法 (Consensus Algorithm)

怎样领略漫衍式共鸣?

  • 多个参加者某一件事同等 :一件事,一个结论
  • 已告竣同等的结论,不行颠覆

有哪些漫衍式共鸣算法?

  • Paxos:被以为是漫衍式共鸣算法的基础,其他都是其变种,可是 Paxos 论文中只给出了单个提案的进程,并没有给出复制状态机中必要的 multi-paxos 的相干细节的描写,实现 Paxos 具有很高的工程伟大度(如多点可写,应承日记朴陋等)。
  • Zab:被应用在 Zookeeper 中,业界行使普及,但没有抽象成通用的 library。
  • Raft:以轻易领略著称,业界也涌现出许多 Raft 实现,好比台甫鼎鼎的 etcd, braft, tikv 等。
什么是 Raft?

Raft 是一种更易于领略的漫衍式共鸣算法,焦点协议本质上照旧师承 Paxos 的精华,差异的是依赖 Raft 模块化的拆分以及越发简化的计划,Raft 协议相对更轻易实现。

https://raft.github.io/

模块化的拆分首要表此刻:Raft 把同等性协议分别为 Leader 推举、MemberShip 改观、日记复制、Snapshot 等几个险些完全解耦的模块。

越发简化的计划则表此刻:Raft 不应承相同 Paxos 中的乱序提交、简化体系中的脚色状态(只有 Leader、Follower、Candidate 三种脚色)、限定仅 Leader 可写入、行使随机化的超时时刻来计划 Leader Election 等等。

特点:Strong Leader

  1. 体系中必需存在且统一时候只能有一个 Leader,只有 Leader 可以接管 Clients 发过来的哀求;
  2. Leader 认真主动与全部 Followers 通讯,认真将“提案”发送给全部 Followers,同时网络大都派的 Followers 应答;
  3. Leader 还需向全部 Followers 主动发送心跳维持率领职位(保持存在感)。

一句话总结 Strong Leader: "你们不要 BB! 按我说的做,做完了向我讲述!"。

其它,身为 Leader 必需保持一向 BB(heartbeat) 的状态,不然就会有别人跳出来想要 BB 。

蚂蚁金服开源 SOFAJRaft:出产级 Java Raft 算法库

Raft 中的根基观念

篇幅有限,这里只对 Raft 中的几个观念做一个简朴先容,具体请参考 Raft paper。

https://raft.github.io/raft.pdf

Raft-node 的 3 种脚色/状态

蚂蚁金服开源 SOFAJRaft:出产级 Java Raft 算法库
  1. Follower:完全被动,不能发送任何哀求,只接管并相应来自 Leader 和 Candidate 的 Message,每个节点启动后的初始状态必然是 Follower;
  2. Leader:处理赏罚全部来自客户端的哀求,以及复制 Log 到全部 Followers;
  3. Candidate:用来竞选一个新 Leader (Candidate 由 Follower 触发超时而来)。

Message 的 3 种范例

  1. RequestVote RPC:由 Candidate 发出,用于发送投票哀求;
  2. AppendEntries (Heartbeat) RPC:由 Leader 发出,用于 Leader 向 Followers 复制日记条目,也会用作 Heartbeat (日记条目为空即为 Heartbeat);
  3. InstallSnapshot RPC:由 Leader 发出,用于快照传输,固然大都环境都是每个处事器独立建设快照,可是Leader 偶然辰必需发送快照给一些落伍太多的 Follower,这凡是产生在 Leader 已经扬弃了下一条要发给该Follower 的日记条目(Log Compaction 时破除去了) 的环境下。

任期逻辑时钟

  1. 时刻被分别为一个个任期 (term),term id 定时刻轴单调递增;
  2. 每一个任期的开始都是 Leader 推举,推举乐成之后,Leader 在任期内打点整个集群,也就是 “推举 + 通例操纵”;
  3. 每个任期最多一个 Leader,也许没有 Leader (spilt-vote 导致)。
蚂蚁金服开源 SOFAJRaft:出产级 Java Raft 算法库

本图出自《Raft: A Consensus Algorithm for Replicated Logs》

什么是 SOFAJRaft?

SOFAJRaft 是一个基于 Raft 同等性算法的出产级高机能 Java 实现,支持 MULTI-RAFT-GROUP,合用于高负载低耽误的场景。 行使 SOFAJRaft 你可以专注于本身的营业规模,由 SOFAJRaft 认真处理赏罚全部与 Raft 相干的技能困难,而且 SOFAJRaft 很是易于行使,你可以通过几个示例在很短的时刻内把握它。

https://github.com/brpc/braft

SOFAJRaft 是从百度的 braft 移植而来,做了一些优化和改造,感激百度 braft 团队开源了云云优越的 C++ Raft 实现。

SOFAJRaft 整体成果&机能优化 蚂蚁金服开源 SOFAJRaft:出产级 Java Raft 算法库

成果支持

1.Leader election:Leader 推举,这个不多说,上面已先容过 Raft 中的 Leader 机制。

2.Log replication and recovery:日记复制和日记规复。

1)Log replication 就是要担保已经被 commit 的数据必然不会丢失,即必然要乐成复制到大都派。

2)Log recovery 包括两个方面:

3)Current term 日记规复:首要针对一些 Follower 节点重启插手集群可能是新增 Follower 节点后怎样追日记;

4)Prev term 日记规复:首要针对 Leader 切换前后的日记同等性。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读