## raft学习
### 分布式系统的挑战
1. 时序性 Timing 运行再不同网络下的机器中的进程如何判断一些时间发生的顺序
2. 并发性 Concurrency 运行再不同网络下的机器中的进程如何共享资源,互不干扰
3. 健壮性 Robustness 应对网络的不稳定性以及硬件的不稳定性
4. 一致性 Consistency 如何保障无论访问哪个服务节点,都能获得相同的结果
### raft leader election
raft节点有三种状态,Leader,Candidate,Follower
节点会不断接收Leader发送的信息(heartbeat timeout),如果节点在一段时间内没能收到Leader信息(election timeout),节点状态就会变为候选人Candidate,然后向其他节点发起投票,其他节点如果term小于候选人发过来的信息,会先同步term然后参与投票,其他节点投票超过半数就会选举候选人为新的Leader。
election timeout(150ms~300ms)远远大于heartbeat timeout
term是单调递增的整数,数值越大表示越新
每个节点在每个term内只能投票一次
平票会重新选举
### raft log replication
当raft集群收到一个请求(log entry)时会告诉Leader,并加入到log entries,此时请求处于uncommit状态不会被执行。Leader会发送这个请求(Replica)到其他follower(这个过程叫Append Entry),Follower会返回他一个投票,如果过半数Leader就会commit请求,并同步到所有follower,follower接收后也会将日志apply到他们的状态机里
### 参考资料
[b站 推荐](https://www.bilibili.com/video/BV1Wy4y1K7zF?from=search&seid=4139253983763889779)
github简介及账号注册

2、(1)全球最大的代码托管网站
(2)全球最大的代码开源网站
(3)程序员交流网站
3、Your profile:自己的项目
github简介及账号注册

2、(1)全球最大的代码托管网站
(2)全球最大的代码开源网站
(3)全球最大同性交友网站
3、Your profile:自己的项目
https://github.com/LadyChatterleyLover
骆沛 <285258675@qq.com>
GitHub