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

117 阅读2分钟

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

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

一、分布式系统面临的挑战

  • 数据规模越来越大
  • 服务的可用性要求越来越高
  • 快速迭代的业务要求系统足够易用

1.1 理想的分布式系统

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

二、共识算法

2.1 什么是共识算法

  • 简而言之介绍一个值一旦确定,所有人都认同。

2.2 什么是一致性

  • 一致性是一种模型(或语义)

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

    • 经常与应用本身有关
  • Linearizability是最理想的

2.3 共识协议不等于一致性

  • 应用层面不同的一致性,都可以用共识协议来实现
    • 比如可以故意返回旧的值
  • 简单的复制协议也可以提供线性一致性 2.4 一般讨论共识协议时遇到的一致性,都指线性一致性
  • 因为弱一致性往往可以使用相对简单的复制算法实现

三、Raft

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

3.1 复制状态机(RSM)

  • RSM
    • Raft中所有的consensus都是直接使用Log作为载体
  • Commited Index
    • 一旦Raft更新Commited Index,意味着这个Index前所有的Log都可以提交给状态机了
    • Commited Index 是不持久化的,状态机也是volatile的,重启后从第一条Log开始 image.png