一致性协议|青训营笔记

89 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第3天

一、本堂课重点内容

  1. 一致性
  2. 共识算法
  3. Raft介绍

二、详细知识点介绍

1、分布式系统

面临的挑战:

  • 数据规模越来越大
  • 服务的可用性越来越高(宕机的可能性不断增高)
  • 快速迭代的业务要求系统足够易用

理想的分布式系统:

  • 高性能:可扩展、低延时、高吞吐
  • 正确:一致性、易于理解
  • 可靠:容错、高可用

从下图的HDFS架构图可以看出,NameNode是整个HDFS系统的中枢模块,Client通过与NameNode进行通信,比如Client端发送了读取数据的请求,NameNode会把数据对应的DataNode信息返回给Client端。因此,我们可以把NameNode看作是一个KV系统(K表示key,V表示value),Client通过发送key(文件所在路径)请求,从而获得对应的value(DataNode的位置信息,最终让Client直接与DataNode进行通信)。

image.png

2、一致性与共识算法

a) 一致性

image.png

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的更多技术细节的实现。