这是我参与「第五届青训营」笔记创作活动的第7天。
上一节课中初步认识了架构的演变,不断垂直水平切分,其中许多都涉及到分布式。本课中学习了分布式基本理论和一些功能的实现。
概述
概念:分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
优势:
- 去中心化
- 低成本(多台廉价服务器替代一台昂贵的,但可以达到相同性能)
- 弹性(可扩容可缩容,需要时扩展,不需要时释放节省资源)
- 资源共享
- 可靠性高(容灾备份)
挑战:
- 普遍的节点故障(服务器变多,概率上必然出问题)
- 不可靠的网络(不同服务器间依赖网络连接)
- 异构的机器与硬件环境(CPU、内存、硬盘等规格不同,性能参差不齐)
- 安全问题
常见的分布式系统有:分布式存储、分布式计算、分布式数据库
系统模型
故障模型
一共六种故障,图中,由内向外处理难度增加
-
Byzantine failure:拜占庭故障,节点可以任意篡改发送给其他节点的数据,是最难处理的故障。节点处于混乱状态,同一个请求时而返回结果A时而返回结果B,如内存故障、网络故障等。一般的分布式系统可以容忍此类问题,少数如比特币会解决此问题
-
ADB(Authentication detectable byzantine failure):特殊的拜占庭故障,可检测的拜占庭故障,节点可以篡改数据,但不能伪造其他节点的数据
-
Response failure: ADB的特例,节点可以返回错误数据,但只能返回受限的错误数据
-
Performance failure:响应数据正确,但由于网络之类的原因,节点收到数据时间太早或太晚
-
Omission failure:节点收不到数据
-
Crash failure:持续性的Omission failure,节点crash,停止响应
-
Fail-stop failure:错误可检测,是最容易处理的故障。服务进程崩溃且被其他正常服务检测到
共识和一致性
最终一致性(弱一致性):读请求和写请求并发时可能读到旧值,但写完之后再读会是新值
线性一致性(强一致性):一个客户端读到新值则通知所有客户端返回新值,增加了延迟,损伤可用性
时间和事件顺序
Lamport逻辑时钟:按照同个进程上执行的先后顺序和不同进程间的调用先后关系决定逻辑顺序,进而利用逻辑时钟对所有事件排序
理论基础
CAP理论
C(Consistence)一致性:多副本上,数据严格一致
A(Availability)可用性:系统一直可用,但不保证一直是最新数据
P(Network Partitioning)分区容错性:任何局部网络分区出现故障时,仍然能提供一致可用的服务
三者最多取其二
ACID理论
数据库课程中曾经学过,数据库具有ACID特性
A(Atomicity)原子性:全或无,事务要么全部成功,要么回滚(银行转账必须一边扣款,另一边收款成功才算成功,不能只扣或只增加)
C(Consistency)一致性:数据库从一个一致性状态转到另一个一致性状态(转账后总和不变)
I(Isolation)隔离性:事务之间互相隔离,不干扰
D(Durability)持久性:事务提交后数据不变,即使故障也不会变
BASE理论
由CAP理论演变而来,核心思想:
Basically Available 基本可用:出现故障后可能有时间或功能上损失,但是依然可用
Soft State 软状态:允许中间状态,副本间数据延迟,不影响可用性
Eventually Consistent 最终一致性:没有其他更新操作时,所有客户端最终能获取到一致的值