这是我参与「第五届青训营」笔记创作活动的第7天
一. 重点内容
-
分布式概述
-
系统模型
-
理论基础
二. 知识点介绍
1. 分布式概述
- 分布式系统:计算机程序的集合,可利用跨多个独立计算节点的计算资源来实现共同的目标,可以分为分布式计算、分布式存储、分布式数据库等
-
- 优势:去中心化;低成本;弹性;资源共享;可靠性高
-
- 挑战:普通的节点故障;不可靠的网路;异构的机器与硬件环境;安全
- 常见的分布式系统:
-
- 分布式存储:Google File System;Ceph;Hadoop HDFS;Zookeeper
-
- 分布式数据库:Google Spanner;TiDB;HBase;MongoDB
-
- 分布式计算:Hadoop;Spark;YARN
2. 系统模型
- 故障模型:
-
- Byzantime failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障
-
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
-
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
-
- Omission failure:节点收到数据的时间无限晚,即收不到数据
-
- Crash failure:节点停止响应,持续性的故障
-
- Fail-stop failure:错误可检测,是最容易处理的故障
- 拜占庭将军问题:两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识
-
- 方案一:同时发送N个信使,任何一个到达对方军队,都算成功
-
- 方案二:设置超时时间,发送后未在一定时间内返回,则加派信使
-
- TCP三次握手
-
- 当有3m+1个“将军”,其中m个“叛徒将军”时,可以增加m轮协商,最终达成一致
- 共识和一致性:
-
- 最终一致性Eventually consistent:客户端A读到x=0,客户端C正在写入x=1,客户端A和B分别都有可能读到0或者1。但当C写入完成后,A和B最终能读到一致的数据
-
- 线性一致性Linearizability:客户端读到更新后的x=1时,及时将消息同步给其他客户端,其他客户端能够立即获取到x最新的值
- 时间和事件顺序:
-
- Lamport逻辑时钟:对于每一个节点Pi定义时钟Ci为一个函数,它为任意的事件a赋值编号为Ci(a) - 如果a和b是在相同节点Pi上的两个事件,a在b之前发生,则有Ci(a) < Ci(b);如果事件a表示节点Pi发送某条消息,b表示节点Pj接受这条消息,则有Ci(a) < Ci(b)
3. 理论基础
- CAP理论:
-
- C(Consistence):一致性 | 数据在多个副本之间能够保持一致的特性(严格一致性)
-
- A(Availability):可用性 | 系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(但是不能保证获取的数据为最新数据)
-
- P(Network partitioning):分区容错性 | 分布式系统在遇到任何网络分区故障时,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障
-
- CA:放弃分区容错性,加强一致性和可用性,例如传统的单机数据库
-
- AP:放弃一致性(强一致性),追求分区容错性和可用性。例如一些注重用户体验的系统
-
- CP:放弃可用性,追求一致性和分区容错性,例如与钱财相关的系统
- ACID理论:原子性(Atomicity);一致性(Consistency);隔离性(Isolation);持久性(Durability)
- BASE理论:对于CAP中一致性和可用性权衡的结果
-
- 基本可用(Basically Available)
-
- 软状态(Soft state)
-
- 最终一致性(Eventually consistent)