这是我参与「第四届青训营 」笔记创作活动的第16天。
概述
了解了很多分布式系统的架构以及基本原理
为什么要分布式系统,在快速发展中对分布式提出的要求,从hdfs的namenode开始引出一个设计KV的需求 从最简单的一个单机开始把KV数据库不断打磨最终成为一个分布式系统。
最后提出什么是一致性,什么共识算法,它们之间的关系
-
什么是一致性协议
-
以 Raft 为例子了解一致性协议是如何工作的
-
了解如何使用一致性协议构建一个 KV 系统
-
了解一致性协议的发展方向
课程目录
- 分布式系统,为什么需要分布式系统,对分布式提出的要求,
- 一致性与共识算法,什么是一致性,什么共识算法
- 从Raft入手,Paxos跟Raft,了解Raft基本工作原理
- 实现细节以及未来
分布式系统
面临的挑战
-
各种各样的错误
- 网络
- 磁盘
- CPU
理想中的分布式系统
高性能:可拓展,低时延,高吞吐
正确:一致性,易于理解
可靠:容错,高可用
从HDFS开始
设计一个NameNode,实际就是一个KV
案例-KV
转化为KV服务
从最简单的单机KV开始:
考虑: 是否有容错?是否高可用?正确性?
一致性与共识算法
从复制开始
继续升级我们的KV
为了容错,我们用了两台DB,如何让两台DA保持一致,同步两台机器的状态
如果两个副本都能接受请求
这样有点复杂,不如将机器分为主从服务来设计
如何复制
如何复制操作
主副本将所有的操作打包成Log 所有的Log雪茹都是持久化的,保存在磁盘上
应用包装成状态机,只接受Log最为Input
祝福本确认Log已经成功写入到副本机器上,当状态机apply后,返回client
关于读操作
读操作
- 方案一:直接读状态机,要求写操作进入状态机后再返回client
- 方案二:写草最复制完成后直接返回,读操作Block等待所有pending log进入状态机
什么是一致性
对于KV,箱操作一台机器一样,读到最近写入的值
一致性是一种模型(或语义)
共识算法
共识协议不等于一致性
- 应用层面不同的一致性,都可以用公式协议来实现
-
- 比如故意返回旧的值
- 简单的赋值协议也可以提供线性一致性
小结
- 使用副本的方式设计了KV
- 了解了什么是一致性
- 了解了什么是共识算法
- 设计了一个正确且容错的一致性是一个难题
共识算法案例:Raft
Paxos
the part-time Parliamen bu lamport 1989
基本上就是一致性协议的同义词
该算法的正确性是经过证明的
一个异步系统无法同时做到一致性和正确性 、
Raft
2014发表
易于理解作为算法的事合集目标
- 使用了RSM,Log,RPC的概念
- 直接使用RPC对算法进行了描述
- Strong Leader-based
- 使用随机的方法减少约束
正确性:
- 形式化验证
- 拥有大量的成熟系统
复制状态机
RSM
- Raft所有的consensus都直接使用Log作为载体
Raft角色
Raft流程
客户端发送请求,leader Raft接受后,之后将Log信息传递给follower,follower接收log后发送信息给leader,当多数结点成功接收,以Log形式commit到Raft,leader保存状态到状态机
log是如何同步的?如下
Raft日志复制
leader收到新的请求K,
从结点失效
通过迭代询问log
Raft Term
Raft 主节点失效
Raft安全性- 同Term
Raft安全性- 跨Term
Raft 安全性验证
小结
- 了解了RAaft的基本工作原理
- 简单讨论Raft正确性
回到KV
利用Raft算法,重新打造我们的KV
Raft不保证一直有一个leader
- 只保证一个term中只多一个leader
- 可能存在对个term的leader
回到共识算法
共识算法的未来
总结
- 了解了一致性的定义
- 了解了什么是共识算法
- Raft的基本工作原理
- 一致性协议的未来方向
标题:浅谈分布式一致性协议 | 青训营笔记
网址:juejin.cn/