Go 分布式 | 青训营笔记

69 阅读4分钟

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

1.分布式概述

(1)什么是分布式

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

(2)Why-How-What

使用者视角: Why: 1.数据爆炸,对存储和计算有大规模运用的述求 2.成本低,构建在廉价服务器之上 How: 1.分布式框架 2.成熟的分布式系统 What: 1.理清规模,负载,一致性要求等 2.明确稳定性要求,制定技术方案

学习者视角: Why: 1.后端开发必备技能 2.帮助理解后台服务器之间协作的机理 How: 1.掌握分布式理论 2.了解一致性协议 What: 1.把要点深入展开,针对难点搜索互联网资料进行学习 2.将所学知识运用于实践

(3)常见的分布式系统

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

2.系统模型

(1)故障模型

image-20230203232334673.png

Byzantine failure: 节点可以任意算改发送给其他节点的数据 Authentication detectable byzantine failure(ADB): Byzantine failure的特例 Performance failure: 节点未在特定时间段内收到数据,即时间太早或太晚 Omission failure: 节点收到数据的时间无限晚,即收不到数据 Crash failure: 在omission failure的基础上,增加了节点停止响应的假设,也即持续性地omission failure:节点可以算改数据但不能伪造其他节点的数据 Fail-stop failure: 在Crash failure的基础上增加了错误可检测的假设

(2)拜占庭将军问题

(3)共识和一致性

(4)时间和事件顺序

3.理论基础

(1) CAP理论

C (Consistence) -致性,指数据在多个副本之间能够保持一致的特性 (严格的一致性) 。

A (Availability)

可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应一-但是不保证获取的数据为最新数据。

P(Network partitioning)

分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障

(2) ACID理论

事务是数据库系统中非常重要的概念,它是数据库管理系统执行过程中的一个逻捐单元,它能够保证一个事务中的所有操作要么全部执行,要么全都不执行。 数据库事务拥有四个特性ACID,即分别是原子性 (Atomicity) 、一致性 (Consistency) 、隔离性 (lsolation) 和持久性 (Durability)

4.分布式事务

(1)两阶段提交

二阶段提交(Two-phase Commit): 为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法

(2)三阶段提交

将两阶段提交中的Prepare阶段,拆成两部分CanCommit和PreCommit机制 解决了两个问题 1.单点故障问题 2.阻塞问题

(3)MVCC

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

5.共识协议

(1)Quorum NWR模型

N: 在分布式存储系统中,有多少份备份数据

w: 代表一次成功的更新操作要求至少有w份数据写入成功

R: 代表一次成功的读数据操作要求至少有R份数据成功读取

(2)RAFT协议

Ra优协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。一定意义上进,RAFT也使用了Quorum机制

(3)Paxos协议

6.分布式实践

(1) MapReduce

(2)分布式KV

架构:

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

容错:

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

弹性:

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