这是我参与「第四届青训营」笔记创作活动的第2天,笔记的内容是关于青训营课程中的《浅谈分布式一致性协议
笔记的主要内容是:
- 分布式系统
- 一致性与共识算法
- 从Raft入手
- 实现细节以及未来
一、分布式系统
分布式系统是一个建立在网络之上的软件系统,正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
1.1 分布式系统面临的挑战:
- 数据规模越来越大
- 服务的可用性要求越来越高
- 快速迭代的业务要求系统足够易用
1.2 理想中的分布式系统:
- 高性能:可扩展、低时延、高吞吐(能否灵活的扩展处理容量、同时兼顾低时延和高吞吐)
- 正确:一致性、易于理解
- 可靠:容错(一种架构上的操作)、高可用
二、一致性与共识算法
因为现如今对分布式系统的要求越来越高,所以一台机器是负担不了巨大的需求。
2.1 复制
这是一台机器的处理过程,于是就通过复制操作,如果两个副本都能接受请求。
那么主副本会定期拷贝全量数据到从副本
主副本也会拷贝操作到从副本
2.2 复制操作
- 主副本把所有的操作打包成Log(Log的写入都是持久化的,保存在磁盘上)
- 应用包装成状态机,只接受Log作为Input
- 主副本确认Log已经成功写u到副本机器上,当状态机apply后,返回客户端
2.3 读操作
- 直接读状态机,写操作进入状态机后再返回client或者写操作复制完成后直接返回,读操作black等待所有pending log 进入状态机
2.4 共识算法
共识算法就是所有人都认同的算法。
- 应用层面不同的一致性,都可以用共识协议来实现
- 简单的复制协议也可以提供线性一致性
- 弱一致性往往可以使用相对简单的复制算法实现
三、一致性协议案例:Raft
3.1 背景
- 2014年发表
- 易于理解作为算法的设计目标
- 使用了RSM、Log、RPC
- 直接使用RPC对算法进行了描述
- Strong Leader-based
- 使用了随机的方法减少约束
- 正确性
- 形式化验证
- 拥有大量成熟系统
3.12 Raft日志复制和从节点失效
以上是日志复制,以下是从节点失效
四、总结
这一节课中了解到了
- Raft如何应用在KV中
- 单一的共识算法有其局限性
- 在工程实践中,需要对其进行一定的优化
- 一致性协议当前的研究热点