分布式理论 | 青训营笔记

161 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,感觉是收获最大的一节课了,重点学习了分布式系统模型,ACID、CAP理论,了解了事务、Raft协议。用空做做网上找的实验。

概述

分布式系统是计算机程序集合,这些程序跨多个独立计算节点的资源实现相同的目标。

优点

去中心化:相比单个服务器,可提升整体存储、计算能力
可靠性高:多副本冗余

挑战

  1. 网络:程序状态变为了对、错、网络未响应
  2. 安全性

系统模型

故障模型

  1. [正确性]byzantinue failure:节点篡改发给其他节点的数据(大部分分布式系统不解决)
  2. ADB(拜占庭故障特例):只篡改自己数据,不影响别人。eg,磁盘晶体管位反转。
  3. [时间性,故障和非故障中间态]performance failure: 数据处理时间不稳定,或快或慢。分布式思维:换节点,恢复不是首要目标,因为恢复时间不确定。
  4. [故障]ommision:节点收不到数据。
  5. [状态]crash failure:宕机
  6. [状态+原因]fail-stop failure:

拜占庭将军问题

共识:两将军就攻击时间达成一致。
结论:理论上永远达不到共识。
TCP工程解:增加超时机制

普遍:3m+1将军,其中m个叛徒,可增加m轮协商,最终达成一致 比特币解决拜占庭容错机制

问题

1.TCP三次握手?
引用:小林coding

  • 三次握手才可以阻止重复历史连接的初始化(主要原因)
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

2.挥手FIN丢失发生什么?
客户端->服务端FIN丢失:客户端超时重传,超过tcp_orphan_retries直接CLOSE。

服务端->客户端FIN丢失:服务端超时重传,达到了重传最大次数,于是再等待一段时间(时间为上一次超时时间的 2 倍),如果还是没能收到客户端的第四次挥手(ACK报文),那么服务端就会断开连接。

共识和一致性

最终一致性:改动期间存在不一致
线性一致性:强一致,改动后会同步消息到其他线程,同步过程会有时延,可用性受损。

Lamport 论文

Lamport L. Time, clocks, and the ordering of events in a distributed system[M]//Concurrency: the Works of Leslie Lamport. 2019: 179-196.

兰伯特逻辑时钟:逻辑时钟的值

理论基础

CAP理论

C 一致性,多副本的一致 A 可用性,请求都能收到非错的响应,但不一定是最新的数据 P 分区容错。 不能同时100%的CAP,只能CA类似单机数据库,CP用户体验强系统,AP算钱的系统。 近似方法:整一个master、其他的是backup,故障就切换,但一致性和可用性都有一些损失。

ACID

事务:数据库执行过程的逻辑单元,所有操作要么全部执行,要么全不执行。

C:

  1. CAP 的C是线性一致性[多个节点看到的数据是相同的状态],ACID的C是事务一致性[转账:双方总金额相同]。
  2. A指操作,C指状态

BASE

基本可用(功能降级),软状态(允许中间态),最终一致性

分布式事务

大部分系统避免处理分布式事务

两阶段提交

两个角色:coordinate和participants,联网通信 两个阶段1.prepare阶段,2.commit阶段

三阶段提交

prepare拆分为两部分cancommit、precommit

MVCC

并发控制方法,维护数据多个版本使得读写没有冲突,因此不会阻塞写,也不阻塞读。每个修改都可保存一个当前时间戳版本。解决了脏读问题。
重点:所有服务器的时间戳一致,可用软时间戳TSO:中心化时钟。

悲观锁:凡是操作都要锁
乐观锁:不上锁,冲突时放弃

共识模型

NWR模型

N份待备份文件,成功写要W份写入成功,成功读要R份读成功。
强一致性,需要W + R > N
CAP选择权给用户,可配置WRN值

Raft协议

概念

  1. leader主节点,负责所有的用户请求,向follower同步请求日志。
  2. follower跟随者,不发请求,接收并持久化leader的同步日志。leader故障推荐自己为candidate。
  3. candidate,leader选举过程的临时角色,获得大部分投票的当选leader。

term:单调递增,每一个term内只有一个leader。

过程

只需要写两份,读一份(leader是最新的)。

切换leader

leader失去follower响应,释放leader 双主:加等待时间(新皇帝必须等老皇帝驾崩才能当皇帝)。

Raft与Paxos

Raft必须连续修改日志,必须leader服务
Paxos没有任何一个节点有全局的信息

项目

MapReduce MapReduce--6.5840 Lab 1: MapReduce

reduce故障:重跑整个job
mapper故障:新起mapper,重新调度

raft-kv rart-kv--TiDB-talent-plan