您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    蚂蚁金服开源 SOFAJRaft:消费级 Java Raft 算法库
    时间:2019-03-18 12:01 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    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

    系统中必须存在且同一时辰只能有一个 Leader,只要 Leader 可以接受 Clients 发过去的央求;

    Leader 担任自动与一切 Followers 通讯,担任将“提案”发送给一切 Followers,同时搜集少数派的 Followers 应对;

    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 种角色/形状

    Follower:完全被动,不能发送任何央求,只接受并照应来自 Leader 和 Candidate 的 Message,每个节点启动后的初始形状一定是 Follower;

    Leader:处置一切来自客户端的央求,以及复制 Log 到一切 Followers;

    Candidate:用来竞选一个新 Leader (Candidate 由 Follower 触发超时而来)。

    Message 的 3 种类型

    RequestVote RPC:由 Candidate 收回,用于发送投票央求;

    AppendEntries (Heartbeat) RPC:由 Leader 收回,用于 Leader 向 Followers 复制日志条目,也会用作 Heartbeat (日志条目为空即为 Heartbeat);

    InstallSnapshot RPC:由 Leader 收回,用于快照传输,虽然少数状况都是每个效劳器独立创立快照,但是Leader 有时分必须发送快照给一些落后太多的 Follower,这通常发作在 Leader 曾经丢弃了下一条要发给该Follower 的日志条目(Log Compaction 时肃清掉了) 的状况下。

    任期逻辑时钟

    时间被划分为一个个任期 (term),term id 按时间轴单调递增;

    每一个任期的末尾都是 Leader 选举,选举成功之后,Leader 在任期内管理整个集群,也就是 “选举 + 常规操作”

    每个任期最多一个 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 全体功用&功用优化

    功用支持

    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 切换前后的日志分歧性。

    3.Snapshot and log compaction:定时生成 snapshot,完成 log compaction 减速启动和恢复,以及 InstallSnapshot 给 Followers 拷贝数据,如下图:

    本图出自《In Search of an Understandable Consensus Algorithm》

    4.Membership change:用于集群线上配置变更,比如添加节点、删除节点、交流节点等。

    5.Transfer leader:自动变更 leader,用于重启维护,leader 负载平衡等。

    6.Symmetric network partition tolerance:对称网络分区容忍性。

    (责任编辑:admin)