这是我参与「第四届青训营 」笔记创作活动的第14天.
背景知识
-
远程过程调用(RPC)
- 分布式系统中通常将不同组件,或者不同节点的交互使用 RPC 的方式进行封装,在调用方的视角一次远程过程调用不需要关心如何对请求和响应进行编码,也不用关心具体的网络传输。
-
状态机(State Machine)
- 一种编程架构,状态机只取决于当前的状态与的输入,确定下一个状态
-
并发/并行
- 并发:多个任务可以在重叠的实践中启动、运行、完成,并发不一定意味着并行,可以通过切换的方式做到在一个执行单元上实现并发任务
- 并行:真正的多个任务同时运行,如多核CPU
-
容错
- 通常指一种软件架构,架构可以容许一定数目的节点失效,同时保证系统正常或降级运行
-
高可用
- 指系统可以达到较高的可用时间,如系统保证一年中只有若干分钟不可用,通常以 SLA(Service-level agreement) 进行描述,容错架构是实现高可用系统的一种方式
一、分布式系统
1、面临的挑战
- 易用:例如开发人员希望提供一个统一视图。
2、理想中的分布式系统
- 容错是实现高可用的一种机制。
3、从HDFS开始
4、举例-KV
二、一致性与共识算法
1、从复制开始
2、如何复制
3、如何复制操作
- FSM状态机
4、关于读操作
5、什么是一致性
6、复制协议-当失效发生
7、共识算法
三、一致性协议案例-Raft
-
Raft 是在 paxos 的基础上的基础上,着重于易于理解
- 协议接口直接暴露 Log 给用户
- 强 Leader 简化 Paxos 中的二阶段
- 使用随机事件简化选主逻辑
-
Raft 的基本工作原理
- 各个节点的角色
- Log 同步
- 失效节点如何恢复 Log
- 如何选举新 Leader
- Term 以及安全性的保证
-
Raft 在工程中的优化
- Prevote 的应用,防止离群 Leader 重加入时引发的切主
1、Paxos
-
对于分布式系统
- 拓展性:写入性能不能水平拓展
- 性能:强 Leader 的一致性协议跨地域部署时带来的额外网络开销
-
对于 KV 系统,解决方案一般是通过分片的方式水平拆组
- 引入了事务的概念
- 常见二阶段提交
发展方向
-
一致性协议作为系统
- 分布式日志:暴露日志的接口提供给上层应用,提供灵活高可用的一致性服务
-
高性能一致性协议
- 低延时:结合 RDMA 网络以及可编程交换机,实现 us 级别操作。
- LeaderLess:节点就地提交,降低 WAN 网络下 RTT 开销
-
Paxos 与 Raft 的相互关联
- 移植 Paxos 的研究到成熟
2、Raft -Leader发起
(1)角色
- 只能有一个Leader,要想成为leader流程如上。
(2)整体流程
- S2是Leader,Client向S2发起请求,S2下发RAft(Log分开给所有Failor),其他收到后落盘,同时S2反馈给Client。
- 如果没有Leader,另外节点投票选出下一个Leader。
(3)日志复制
- Raft值和内容都是一样的,但是接受时间是不一样的,所有箭头位置不同。
(4)从节点失效
(5)Raft Term
(6)Raft主节点失效
(7)Leader failure
(8)安全性-同Term
(9)安全性-跨Term
(10)安全性验证
3、复制状态机(RSM)
四、回到KV
1、案例-KV
2、回到共识算法
3、共识算法的未来
- term是一直向前递推。