分布式理论 | 青训营笔记

255 阅读8分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

一、本堂课重点内容

  • 概述
  • 系统模型
  • 理论基础
  • 分布式事务
  • 共识协议
  • 分布式实践

二、详细知识点介绍

概述

什么是分布式

分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。

优势:

  1. 去中心化
  2. 低成本
  3. 弹性
  4. 资源共享
  5. 可靠性高

挑战:

  1. 普遍的节点故障
  2. 不可靠的网络
  3. 异构的机器与硬件环境
  4. 安全

常见分布式系统

  • 分布式存储
  • 分布式数据库
  • 分布式计算

系统模型

故障模型

image.png

  • Byzantine
  • Authentication-detectable Byzantine
  • Performance
  • Omission
  • Crash
  • Fail-stop

拜占庭将军问题

image.png 引入:两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。

结论是,两将军问题是被证实无解的电脑诵信问题,两支军队理论上永沅无法达成共识

拜占庭将军考虑更加普适的场景,例如3个将军ABC互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”时,整个系统无法达成一致。

当有3m+1个将军,其中m个“叛徒”时,可以增加m轮协商,最终达成一致

共识和一致性

客户端A读到x=0,当客户端C正在写入时,客户端A和B可能读到0或者1。但是当C写入完成后,A和B最终能读到一致的数据。我们称这样的一致性为Eventuallyconsistent(最终一致性) 当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1。我们称这样的一致性为Linearizability (线性─致性)

时间和事件顺序

我们定义“happened before”关系,记为"→"。其满足如下三个条件:

  • 如果a和b是在相同节点上的两个事件,a在b之前发生,则定义:a→b
  • 如果事件a表示某个节点发送某条消息,b是另一个节点接受这条消息则有a→b
  • 如果有a→b 且b→c,则有a→c
  • 当且仅当a推不出b 且b推不出a时,我们称两个事件为并发的(concurrent)。

Lamport逻辑时钟:对于每一个节点Pi我们定义时钟Ci为一个函数,它为任意的事件a赋值编号

理论基础

CAP理论

image.png

指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):保证每个请求不管成功或者失败都有响应。
  • 分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。

ACID理论

ACID,是指数据库管理系统在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation),又称独立性)、持久性(durability)。

  • Atomicity(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
  • Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
  • Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
  • Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

BASE理论

image.png BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

分布式事务

两阶段提交

二阶段提交(Two-phase Commit)是为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的—种演算法。在分布式系统中引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交。因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。

image.png

三阶段提交

将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制。

解决了两个问题:1.单点故障问题2.阻塞问题。

另外引入超时机制,在等待超时之后,会继续进行事务的提交。

image.png

MVCC

MVCC是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。MVCC为每个修改保存一个版本,和事务的时间戳相关联。可以提高并发性能,解决脏读的问题。

共识协议

Quorum NWR模型

Quorum NWR三要素

  • N:在分布式存储系统中,有多少份备份数据
  • W:代表一次成功的更新操作要求至少有w份数据写入成功
  • R:代表一次成功的读数据操作要求至少有R份数据成功读取
  • 为了保证强─致性,需要保证W+R>N

Quorum NWR模型将CAP的选择交给用户,是一种简化版的一致性模型。

RAFT协议

Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。一定意义上讲,RAFT也使用了Quorum机制。 raft协议中,一个节点任一时刻处于以下三个状态之一:

  • leader
  • follower
  • candidate

image.png

需要了解的内容:

  • Leader选举过程
  • Replication过程
  • 切主
  • Stale读

Paxos协议

Paxos算法与RAFT算法区别:

  1. Multi-Paxos可以并发修改日志,而Raft写日志操作必须是连续的
  2. Multi-Paxos可以随机选主,不必最新最全的节点当选Leader

Paxos优势:写入并发性能高,所有节点都能写入

Paxos劣势:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录

image.png

三、实践练习例子

MapReduce

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统fromModule=lemma_inlink)上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

分布式KV

架构

将海量结构化数据根据Key分成不同的Region,每个Region构建一个单机KV数据库,Region之间形成Raft Groups,做到强一致

容错

当Node故障时,通过Raft Learner模式进行数据修复

弹性

当出现局部Key热点或数据膨胀时,Region可以进行Split操作,分成两个子Region,反之收缩时进行Merge操作

四、课后个人总结

本节课所学习的内容极富挑战性,由于没有系统学习过分布式,很多数概念都是第一次听说,其中拜占庭将军问题、Raft协议、Paxos算法等知识点都需要进一步学习巩固,课程所提出的两个实践例子也有难度,希望能够争取完成。