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

97 阅读2分钟

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

概述

理想中的分布式系统

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

分布式系统

从打造KV开始

image.png

image.png

一致性模型

  • 线性一致性(时间轴上的线性)
  • 最终一致性(最终总会读到)

复制协议小结

image.png

共识算法

(对一个值达成共识,值本身没有顺序,但日常使用时常常打log,而log有顺序)

共识算法与一致性

  • 共识协议不等于一致性
    • 应用层面不同的一致性,都可用共识协议实现
    • 简单的复制协议也可以提供线性一致性
  • 一般讨论共识协议提到的一致性指的都是线性一致性

Raft

RSM(复制状态机)

image.png

我上完课程之后对Raft机制的整体理解(不一定正确)

  • 如何保证(最终)一致性?client无法同时与多个节点对接,所以在节点之中要有一个leader,其他都是follower.leader不断将消息再同步传达给follower。

出了错误怎么办?

  • 由于leader也会定时向各个follower发送heartbeat(证明leader还在),所以如果leader挂了,其他follower发现leader没了,会成为candidate,并自发vote出一个新leader继续工作,保证了少数结点挂了不影响多数结点(类似于人类的群体组织方式)

  • 关于vote多数选举制,某个candidate向其他follower发出请求,获得多数同意即成为leader。 原则上是选择term最新的那个结点,因为它同步的消息是最新的。

  • 如果是某个follower挂了或没跟上进度,就类似于这样:(注:图源于老师ppt)

image.png

leader可以通过term和index确认它掉队的地方,并且从那里开始使得它重新同步,不需要知道确切的value。

关于term

  • 我认为term就是字面意思,时期(类似于古代的王朝)。将所有的行为理解为是随着时间轴而推演就很合理了。一个时期只需要一个leader,比如说这个leader在的时候term标记为1,换了个leader就标记为2。

现实远比理论要复杂得多得多得多

  • (类似于人类社会的争权夺利)

image.png

共识算法的未来

  • 多数分布式系统的底座
  • delo中的虚拟共识
    • 对外暴露一致的log作为接口,内部对于log可以有不同的实现