河北做it的网站,深圳网站开发ucreator,做网站建设需要做哪些工作室,百度快速收录账号购买目录
1 基于Raft算法实现的分布式键值对存储系统
1.1 模块
2 Raft 算法
2 .1 概念
2.2 raft角色#xff08;先简单了解#xff0c;方便后续阅读#xff09;
2.3 raft想解决什么问题#xff1f;
2.4 选举领导
2.5 领导者故障
附录#xff1a;
参考文献#xff1…目录
1 基于Raft算法实现的分布式键值对存储系统
1.1 模块
2 Raft 算法
2 .1 概念
2.2 raft角色先简单了解方便后续阅读
2.3 raft想解决什么问题
2.4 选举领导
2.5 领导者故障
附录
参考文献 ▐ 核心要解决的问题 个人学习Raft 算法要解决的问题以及算法机制通过项目理解如何实现raft算法。项目深入理解 Raft 算法深刻理解分布式环境下数据强一致性该如何实现。 ▐ 有哪些典型业务场景 在绝大部分场景可以保证数据强一致性比如分布式配置系统系统、分布式 NoSQL 存储等等轻松突破系统的单机限制。 ▐ 使用到的技术 蚂蚁金服网络通信框架 SOFA-Bolt基于 Netty因为TCP长连接 RocksDB是一个高性能、可扩展、嵌入式、持久化的键值存储引擎广泛应用于大数据领域。 1 基于Raft算法实现的分布式键值对存储系统
1.1 模块
一致性模块是 Raft 算法的核心实现。重点开发RPC 通信可以使用 HTTP 短连接也可以直接使用 TCP 长连接考虑到集群各个节点频繁通信同时节点通常都在一个局域网内因此我们选用 TCP 长连接。长连接框架首选Netty选用蚂蚁金服网络通信框架 SOFA-Bolt基于 Netty便于快速开发。日志模块Raft 算法中日志实现是基础考虑到时间因素我们选用 RocksDB 作为日志存储。状态机可以是任何实现其实质就是将日志中的内容进行处理。可以理解为 Mysql binlog 中的具体数据。由于我们是要实现一个 KV 存储那么可以直接使用日志模块的 RocksDB 组件。 2 Raft 算法
2 .1 概念
Raft 算法是通过一切以领导者为准的方式实现一系列值的共识和各节点日志的一致。Raft 算法是分布式系统开发首选的共识算法。 总结通过以下几种方式来进行领导选举保证了一个任期只有一位领导极大减少了选举失败的情况。 任期领导者心跳信息随机选举超时时间先来先服务的投票原则大多数选票原则 2.2 raft角色先简单了解方便后续阅读
跟随者Follower普通群众默默接收和来自领导者的消息当领导者心跳信息超时的时候就主动站出来推荐自己当候选人。
候选人Candidate候选人 将向其他节点请求投票 RPC 消息通知其他节点来投票如果赢得了大多数投票选票就晋升当领导者。
领导者Leader霸道总裁一切以我为准。处理写请求、管理日志复制和不断地发送心跳信息通知其他节点“我是领导者我还活着你们不要”发起新的选举不用找新领导来替代我。
2.3 raft想解决什么问题
情况一只有一个服务器客户端向单节点服务器发送了一条更新操作一致性非常容易保证。
情况二如果有多个服务器节点如何保证一致性就成为问题假设客户端对三个服务器节点也可以叫数据库集群进行更新操作如何保证三个节点中存的值一致
上述问题就是分布式一致问题Raft 算法就是来解决这个问题的。在多节点集群中在节点故障、分区错误等异常情况下Raft 算法如何保证在同一个时间集群中只有一个领导者呢
2.4 选举领导
1初始状态集群中所有节点都是跟随者Term表示任期一开始都是0。
2成为候选者Raft 算法具有随机超时时间特性每个节点等待领导者节点心跳信息的超时时间间隔是随机的可能一个50ms节点a一个200ms节点b一个300ms(节点c),先超时的人成为候选者a节点成为候选者并增加自己的任期编号把Term 值从0 更新为 1并给自己投了一票。bc节点的Term都等于0。
3投票Leader 选举 第一步节点 A 成为候选者后向其他节点发送请求投票 RPC 信息请它们选举自己为领导者。第二步节点 B 和 节点 C 接收到节点 A 发送的请求投票信息后在编号为 1 的这届任期内还没投票就把选票投给节点 A并增加自己的任期编号Term B,C 1。第三步节点 A 收到 3 次投票得到了大多数节点的投票从候选者成为本届任期内的新的领导者。第四步节点 A 作为领导者固定的时间间隔给 节点 B 和节点 C 发送心跳信息告诉节点 B 和 C我是领导者组织其他跟随者发起新的选举。第五步节点 B 和节点 C 发送响应信息给节点 A告诉节点 A 我是正常的。 4任期领导者是有任期的 自动增加跟随者在等待领导者心跳信息超时后推荐自己成为候选人会增加自己的任期号Term 1如上图所示节点 A 任期为 0推举自己为候选人时任期编号增加为 1。更新为较大值当节点发现自己的任期编号比其他节点小时会更新到较大的编号值。比如节点 A 的任期为 1请求投票投票消息中包含了节点 A 的任期编号且编号为 1节点 B 收到消息后会将自己的任期编号更新为 1。恢复为跟随者如果一个候选人或者领导者发现自己的任期编号比其他节点小那么它会立即恢复成跟随者状态。这种场景出现在分区错误恢复后任期为 3 的领导者受到任期编号为 4 的心跳消息那么前者将立即恢复成跟随者状态。拒绝消息如果一个节点接收到较小的任期编号值的请求那么它会直接拒绝这个请求比如任期编号为 6 的节点 A收到任期编号为 5 的节点 B 的请求投票 RPC 消息那么节点 A 会拒绝这个消息。 (5)选举规则 一个任期内领导者一直都会领导者直到自身出现问题如宕机或者网络问题延迟其他节点发起一轮新的选举。在一次选举中每一个服务器节点最多会对一个任期编号投出一张选票投完了就没了。 (6) 大多数票才行
假设一个集群由 N 个节点组成那么大多数就是至少 N/21。例如3 个节点的集群大多数就是 2。4个也是2.
7心跳超时
为了防止多个节点同时发起投票会给每个节点分配一个随机的选举超时时间。这个时间内节点不能成为候选者只能等到超时。比如上述例子节点 A 先超时先成为了候选者。这种巧妙的设计在大多数情况下只有一个服务器节点先发起选举而不是同时发起选举减少了因选票瓜分导致选举失败的情况。
2.5 领导者故障
如果领导者节点出现故障则会触发新的一轮选举。如下图所示领导者节点 A 发生故障节点 B 和 节点 C 就会重新选举 Leader。 第一步 节点 A 发生故障节点 B 和节点 C 没有收到领导者节点 A 的心跳信息等待超时。第二步节点 C 先发生超时节点 C 成为候选人。第三步节点 C 向节点 A 和节点 B 发起请求投票信息。第四步节点 C 响应投票将票投给了 C而节点 A 因为发生故障了无法响应 C 的投票请求。第五步节点 C 收到两票大多数票数成为领导者。第六步节点 C 向节点 A 和 B 发送心跳信息节点 B 响应心跳信息节点 A 不响应心跳信息因为 A 故障了。 附录
无状态服务和有状态服务区别
造轮子含义“造轮子”一词在软件开发领域中通常指的是重复开发已有解决方案的行为即当面对一个问题时明明已经有现成的、成熟的解决方案或库可以使用但开发者仍然选择从头开始编写自己的解决方案。
RocksDB是一个高性能、可扩展、嵌入式、持久化的键值存储引擎广泛应用于大数据领域。
Mysql binlog 记录所有更改数据库数据的二进制日志文件。
状态机
组件的生命周期组件从被创建到挂载到页面中运行再到组件不用时卸载的过程。
为什么要管理理以上组件的生命周期有助于理解组件的运行方式完成对更复杂的组件功能分析组件的错误原因 参考文献
图示分布式系统必须知道的一个共识算法Raft-腾讯云开发者社区-腾讯云
编写你的第一个 Java 版 Raft 分布式 KV 存储 - 莫那·鲁道的技术博客
https://github.com/stateIs0/lu-raft-kv