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

133 阅读3分钟
ec2a29b9073b45b49bdcac1499f40baf_tplv-k3u1fbpfcp-zoom-crop-mark_3024_3024_3024_1702.webp

这是我参与「第四届青训营」笔记创作活动的第2天,笔记的内容是关于青训营课程中的《浅谈分布式一致性协议

笔记的主要内容是:

  • 分布式系统
  • 一致性与共识算法
  • 从Raft入手
  • 实现细节以及未来

一、分布式系统

分布式系统是一个建立在网络之上的软件系统,正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

1.1 分布式系统面临的挑战:

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

1.2 理想中的分布式系统:

  • 高性能:可扩展、低时延、高吞吐(能否灵活的扩展处理容量、同时兼顾低时延和高吞吐)
  • 正确:一致性、易于理解
  • 可靠:容错(一种架构上的操作)、高可用

二、一致性与共识算法

因为现如今对分布式系统的要求越来越高,所以一台机器是负担不了巨大的需求。

2.1 复制

这是一台机器的处理过程,于是就通过复制操作,如果两个副本都能接受请求。 image.png

那么主副本会定期拷贝全量数据到从副本 主副本也会拷贝操作到从副本 image.png

2.2 复制操作

  • 主副本把所有的操作打包成Log(Log的写入都是持久化的,保存在磁盘上)
  • 应用包装成状态机,只接受Log作为Input
  • 主副本确认Log已经成功写u到副本机器上,当状态机apply后,返回客户端

2.3 读操作

  • 直接读状态机,写操作进入状态机后再返回client或者写操作复制完成后直接返回,读操作black等待所有pending log 进入状态机
image.png

2.4 共识算法

共识算法就是所有人都认同的算法。

  • 应用层面不同的一致性,都可以用共识协议来实现
  • 简单的复制协议也可以提供线性一致性
  • 弱一致性往往可以使用相对简单的复制算法实现

三、一致性协议案例:Raft

3.1 背景

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

3.12 Raft日志复制和从节点失效

image.png

以上是日志复制,以下是从节点失效

image.png #### 3.9 Raft Leader failure - Leader定期的发送 AppendEntries RPCs 给其余所有节点 - 如果Follower有一段时间没有收到Leader的AppendEntries,则转换身份成为Candidate - Candidate自增自己的term,同时使用RequestVote RPCs向剩余节点请求请求投票 - 如果多数派节点投给它,则成为该term的leader

四、总结

这一节课中了解到了

  • Raft如何应用在KV中
  • 单一的共识算法有其局限性
  • 在工程实践中,需要对其进行一定的优化
  • 一致性协议当前的研究热点