mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-20 22:17:09 +08:00
[docs]:add raft source
This commit is contained in:
parent
39fd96fe36
commit
c80a598079
@ -28,7 +28,9 @@
|
|||||||
|
|
||||||
共识算法允许一组节点像一个整体一样一起工作,即使其中的一些节点出现故障也能够继续工作下去,其正确性主要是源于复制状态机的性质:一组`Server`的状态机计算相同状态的副本,即使有一部分的`Server`宕机了它们仍然能够继续运行。
|
共识算法允许一组节点像一个整体一样一起工作,即使其中的一些节点出现故障也能够继续工作下去,其正确性主要是源于复制状态机的性质:一组`Server`的状态机计算相同状态的副本,即使有一部分的`Server`宕机了它们仍然能够继续运行。
|
||||||
|
|
||||||
`图-1:复制状态机架构 一致性算法管理来自客户端的状态机命令的复制日志。状态机处理日志中相同顺序的命令序列,因此会输出相同的结果。`
|
https://raw.githubusercontent.com/jun0315/JavaGuide/raft-pic/media/pictures/raft/rsm-architecture.png
|
||||||
|
|
||||||
|
`图-1:复制状态机架构`
|
||||||
|
|
||||||
一般通过使用复制日志来实现复制状态机。每个`Server`存储着一份包括命令序列的日志文件,状态机会按顺序执行这些命令。因为每个日志包含相同的命令,并且顺序也相同,所以每个状态机处理相同的命令序列。由于状态机是确定性的,所以处理相同的状态,得到相同的输出。
|
一般通过使用复制日志来实现复制状态机。每个`Server`存储着一份包括命令序列的日志文件,状态机会按顺序执行这些命令。因为每个日志包含相同的命令,并且顺序也相同,所以每个状态机处理相同的命令序列。由于状态机是确定性的,所以处理相同的状态,得到相同的输出。
|
||||||
|
|
||||||
@ -54,10 +56,14 @@
|
|||||||
|
|
||||||
在正常的情况下,只有一个服务器是Leader,剩下的服务器是Follower。Follower是被动的,它们不会发送任何请求,只是响应来自Leader和Candidate的请求。
|
在正常的情况下,只有一个服务器是Leader,剩下的服务器是Follower。Follower是被动的,它们不会发送任何请求,只是响应来自Leader和Candidate的请求。
|
||||||
|
|
||||||
|
https://raw.githubusercontent.com/jun0315/JavaGuide/raft-pic/media/pictures/raft/server-state.png
|
||||||
|
|
||||||
`图-2:服务器的状态`
|
`图-2:服务器的状态`
|
||||||
|
|
||||||
### 2.2 任期
|
### 2.2 任期
|
||||||
|
|
||||||
|
https://raw.githubusercontent.com/jun0315/JavaGuide/raft-pic/media/pictures/raft/term.png
|
||||||
|
|
||||||
`图-3:任期`
|
`图-3:任期`
|
||||||
|
|
||||||
如图3所示,raft算法将时间划分为任意长度的任期(term),任期用连续的数字表示,看作当前term号。每一个任期的开始都是一次选举,在选举开始时,一个或多个Candidate会尝试成为Leader。如果一个Candidate赢得了选举,它就会在该任期内担任Leader。如果没有选出Leader,将会开启另一个任期,并立刻开始下一次选举。raft算法保证在给定的一个任期最少要有一个Leader。
|
如图3所示,raft算法将时间划分为任意长度的任期(term),任期用连续的数字表示,看作当前term号。每一个任期的开始都是一次选举,在选举开始时,一个或多个Candidate会尝试成为Leader。如果一个Candidate赢得了选举,它就会在该任期内担任Leader。如果没有选出Leader,将会开启另一个任期,并立刻开始下一次选举。raft算法保证在给定的一个任期最少要有一个Leader。
|
||||||
|
Loading…
x
Reference in New Issue
Block a user