这是我参与「第四届青训营」笔记创作活动的第3天
一、本堂课重点内容
- 一致性
- 共识算法
- Raft介绍
二、详细知识点介绍
1、分布式系统
面临的挑战:
- 数据规模越来越大
- 服务的可用性越来越高(宕机的可能性不断增高)
- 快速迭代的业务要求系统足够易用
理想的分布式系统:
- 高性能:可扩展、低延时、高吞吐
- 正确:一致性、易于理解
- 可靠:容错、高可用
从下图的HDFS架构图可以看出,NameNode是整个HDFS系统的中枢模块,Client通过与NameNode进行通信,比如Client端发送了读取数据的请求,NameNode会把数据对应的DataNode信息返回给Client端。因此,我们可以把NameNode看作是一个KV系统(K表示key,V表示value),Client通过发送key(文件所在路径)请求,从而获得对应的value(DataNode的位置信息,最终让Client直接与DataNode进行通信)。
2、一致性与共识算法
a) 一致性
KV中常见的一致性主要有以下两种:
- 最终一致性:往DB Engine写入新值后,client可能暂时读不到,但最终一定会读到
- 线性一致性:往DB Engine写入新值后,client马上就能读到
b) 共识算法
The consensus problem requires agreement among a number of processes (or agents) for a single data value. Some of the processes (agents) may fail or be unreliable in other ways, so concensus protocols must be fault tolerant or resilient.
通俗来讲,就是一个值一旦确定,所有人都认同。
经典案例:Raft
- 使用了RSM(复制状态机)、Log(日志,可以理解为是一条条对DB Engine的操作)和RPC(节点与节点之间的通信)的概念
- 直接使用了RPC对算法进行了描述
- Strong Leader-based
- 使用了随机的方法减少约束
Raft的特性:
- 领导者选举
- 日志复制
- 从节点失效恢复
- 主节点失效恢复
三、课后个人总结
通过本次课程,初步了解了一致性和共识算法的有关概念,可用于实现分布式存储中的NameNode的一致性,从而达到NameNode单点故障的无感切换。后续会继续学习有关Raft的更多技术细节的实现。