这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
分布式概述
分布式的优势:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
分布式的挑战
- 普遍的节点故障
- 不可靠的网络
- 异构的机器和硬件环境
- 安全
常见的分布式系统
- 分布式存储 Zookeeper
- 分布式数据库 MongoDB
- 分布式计算 Spark
系统模型
- Byzantine failure: 节点可以任意篡改发送给其他节点的数据
- Authentication detectable byzantine failure(ADB): Byzantine failure的特例; 节点可以篡改数据但不能伪造其他节点的数据
- Performance failure: 节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure: 节点收到数据的时间无限晚,即收不到数据
- Crash failure: 在omission failure的基础上,增加了节点停止响应的假设,也即持续性地omission failure
- Fail-stop failure: 在Crash failure的基础上增加了错误可检测的假设
拜占庭将军问题
莱斯利·兰波特在其论文中描述了如下问题:
一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
系统的问题在于,可能将军中出现叛徒,他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人投进攻,4人投撤离的情况。这时候叛徒可能故意给4名投进攻的将领送信表示投票进攻,而给4名投撤离的将领送信表示投撤离。这样一来在4名投进攻的将领看来,投票结果是5人投进攻,从而发起进攻;而在4名投撤离的将军看来则是5人投撤离。这样各支军队的一致协同就遭到了破坏。
但3将军时,只有一个叛徒的场景,增加一个将军,就可以达成一致。这里可以参考拜占庭将军问题 (The Byzantine Generals Problem) - 知乎 (zhihu.com)
进而能够证明,当有3m+1个将军,其中m个叛徒时,可以增加m轮协商,最终达成一致,但是怎么知道确切的m呢,所以还是很难解决。
一致性
最终一致性
客户端A读到x=0,当客户端C正在写入时客户端A和B可能读到0或者1。但是当C写入完成后,A和B最终能读到一致的数据。我们称这样的一致性为Eventually consistent (最终一致性)
线性一致性
当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1。我们称这样的一致性为Linearizability (线性一致性)
时间和事件顺序
Lamport逻辑时钟与tick line
理论基础
CAP理论
| 选项 | 描述 |
|---|---|
| C (Consistence) | 一致性,指数据在多个副本之间能够保持一致的特性 (严格的一致性) |
| A (Availability) | 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应--但是不保证获取的数据为最新数据。 |
| P (Network partitioning ) | 分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。 |
CA: 放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择 AP: 放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性例如一些注重用户体验的系统 CP: 放弃可用性,追求一致性和分区容错性,例如与钱财安全相关的系统
关于CAP,还参考分布式系统CAP定理中的P | 青训营笔记 - 掘金 (juejin.cn)
ACID理论
事务是数据库系统中非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全都不执行. 数据库事务拥有四个特性ACID,即分别是原子性 Atomicity) 、一致性(Consistency) 、隔离性 (lsolation) 和持久性 (Durability)
原子性 (A)。原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚 一致性(C)。一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。事务一致性,eg:账户的总和是相同的 隔离性(I)。隔离性是当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 持久性(D) 。持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
Oracle数据库不能保证I,Mysql数据库不能保证D
BASE理论
Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。其核心思想是:
- Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言: 响应时间上的损失或功能上的损失
- Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
- Eventually consistent(最终一致性) : 系统能够保证在没有其他新的更新作的情况下,数据最终一定能够达到一致的状态因此所有客户端对系统的数据访问最终都能够获取到最新的值。