• 分布式系统学习(一)—— Raft算法


    CAP定理

    一致性

    对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

    可用性

    非故障的节点在合理的时间内返回合理的响应。

    分区容忍性

    当出现网络分区后,系统能够继续“履行职责”。

    CAP关注的粒度是数据,而不是整个系统。

    Raft算法

    一、拜占庭将军问题

    在很久很久以前,拜占庭是东罗马帝国的首都。那个时候罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信使传递消息。

    在打仗的时候,拜占庭军队内所有将军必需达成一致的共识,才能更好地赢得胜利。但是,在军队内有可能存有叛徒,扰乱将军们的决定。

    这时候,在已知有成员不可靠的情况下,其余忠诚的将军需要在不受叛徒或间谍的影响下达成一致的协议。

    拜占庭将军问题是计算机科学家莱斯利·兰伯特提出的有关计算机网络中所存在的一致性问题的问题。

    二、Raft算法流程

    Raft算法依靠状态机主从同步的方式,在各个节点之间实现数据的一致性。

    Raft算法的两个核心要点:

    • 选举主节点
      • 多个节点之间投票竞争
    • 同步数据(Log Replication)

    选举主节点

    三种角色、状态:

    • Leader 主节点
    • Follower 从节点
    • Candidate 参与投票竞争的节点

    选举流程:

    1. 所有节点的初始状态都是Follower,如果Follower超过一段时间没有接收到Leader的心跳,就会成为Candidate 。
    2. Candidate 会向Follower发起投票,让Follower将票投给自己
    3. Follower将会投出它们的票(如果有3个Candidate,那这个Follower要投给谁?)
    4. 得到票数最多的Candidate 成为主节点

    同步数据

    所有的修改操作都要经过Leader,Leader会等待,直到majority(大多数)节点都被修改,Leader会commit这个修改。

    三、Raft算法细节

    两个超时时间:

    • 选举超时
    • 心跳超时

    选举超时

    1. Follower等待,直到成为Candidate的时间,选举超时为150ms-300ms之间的任意值
    2. Follower超时之后,成为Candidate,开始选举流程,给它自己投票,并发送投票请求给其他节点
    3. 其他节点投票给Candidate,并reset自己的选举超时时间
    4. 当Candidate有majority(大多数)选票,就成为Leader

    心跳超时

    1. Leader会发送Append Entries(追加条目)给Follower
    2. 这些Append Entries(追加条目)信息会按特定的时间间隔发送给Follower,这个时间间隔叫心跳超时
    3. Follower也会响应Append Entries(追加条目),Follower每次接收到Leader的Append Entries(追加条目),都会reset自己的选举超时时间
    4. 直到Follower没有接收到Leader的心跳,然后开始选举过程,成为Candidate
  • 相关阅读:
    php解析xml文件的方法
    while倒数阶乘的和
    菱形代码
    0929课堂随记
    0929作业
    0928练习作业
    HelloJava
    Java例题
    Hello World(本博客启程篇)
    vue 如何实现在函数中触发路由跳转
  • 原文地址:https://www.cnblogs.com/fonxian/p/10930635.html
Copyright © 2020-2023  润新知