分布式一致性协议 | 青训营笔记

78 阅读2分钟

分布式一致性协议 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的第5天。

一、分布式系统

  1. 分布式系统面临的挑战

    • 数据规模越来越大

    • 服务的可用性要求越来越高

    • 快速迭代的业务要求系统足够易用

  2. 分布式系统理想状态

    • 高性能:可拓展、低时延、高吞吐
    • 正确:一致性、易于理解
    • 可靠:容错、高可用

二、一致性与共识看法

  • 一致性

    • —致性是一种模型(或语义)
    • 来约定一个分布式系统如何向外界(应用)提供服务
    • KV中常见的一致性模型
    • 最终一致性:读取可能暂时读不到但是总会读到
    • 线性一致性:最严格,线性执行
  • 共识看法

2a470585-48be-4fdf-b1a3-f0d9b27389d5.png

  • 什么是共识算法 "The consensus problem requires agreement among a number of processes (or agents) fora single data value. Some of the processes (agents) may fail or be unreliable in other ways,so consensus protocols must be fault tolerant or resilient" 简而言之一个值一旦确定,所有人都认同。(不可能完成的任务)
  • 共识协议不等于一致性
    • 应用层面不同的一致性,都可以用共识协议来实现
      • 比如可以故意返回旧的值
    • 简单的复制协议也可以提供线性—致性
  • 一般讨论共识协议时提到的一致性,都指线性一致性
    • 因为弱一致性往往可以使用相对简单的复制算法实现

三、Raft协议

  • 特点

    • 易于理解作为算法的设计目标
    • 使用了RSM、Log、RPC的概念.直接使用RPC对算法进行了描述Strong Leader-based
    • 使用了随机的方法减少约束正确性
    • 形式化验证
    • 拥有大量成熟系统
  • Raft基本工作原理

    • Raft角色及选举过程

5be0a7dc-800c-40cd-bf33-c99ae109bf94.png

  • 如果Raft主节点失效
    • Leader定期的发送AppendEntries RPCs给其余所有节点
    • 如果Follower有一段时间没有收到Leader的AppendEntries,则转换身份成为Candidate
    • Candidate自增自己的term,同时使用 RequestVote RPCs向剩余节点请求投票
    • raft在检查是否可以投票时,会检查log是否outdated,至少不比本身旧才会投给对应的Candidate
    • 如果多数派节点投给它,则成为该term的 leader