这是我参与「第五届青训营 」伴学笔记创作活动的第9天
概述
- 分布式系统的定义:跨多个节点的计算机程序的集合
- 使用分布式系统的五大优势
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
- 分布式系统的挑战
- 故障
- 网络
- 环境
- 安全
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:节点停止响应,持续性的故障
- Fail-stop failure:错误可检测,是最容易处理的故障
| 例子 | ||
|---|---|---|
| 故障 | 描述 | 可能类型 |
| 磁盘故障 | 磁头不循道、盘片不转、磁介质损伤等 | Fail-stop |
| 磁盘坏道、坏块 | 磁头划伤引起坏道 | Fail-stop、ADB |
| 服务器主板、板卡故障 | 可能是风扇故障或者灰尘引起的短路、或SCSI/RAID卡造成死机 | Crash |
| 网络故障 | 电源故障、背板故障、网卡位反转 | Byzantine、Omission |
| 网络分区 | 网络引起节点形成不同的子集、子集中网络相通、子集间网络不通 | Performance |
| 内存故障 | 内存出错造成的数据被篡改、分为UE、CE两种 | ADB |
共识和一致性
客户端A读到X=0,当客户端C正在写入时,客户端A和B可能读到0或者1,但是当C写入完成后,A和B最终能读到一致的数据,我们称这样的一致性为Eventually consistent(最终一致性)
当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1。我们称这样的一致性为Linearizability(线性一致性)
如果要保证“线性”一致性,多个节点间势必需要进行协商,以寻求一致。这样增加了延迟,系统可用性便会受损。
CAP理论
CAP分别代表一致性、可用性、分区容错性,三者无法同时到达
| CAP | |
|---|---|
| 选项 | 理论 |
| Consistence | 一致性,指数据在多个副本之间能够保持一致的特性(严格的一致性) |
| Availablity | 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应一但是不保证获取的数据为最新数据 |
| Neywork partitioning | 分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障 |
- CA系统:传统数据库的代表
- AP系统:放弃强一致性,保证高可用,不少nosql存储系统采用
- CP系统:放弃可用性,保证数据一致性