这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储和分布式数据库等。
优势
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
挑战
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
分布式系统的故障模型
从上到下处理故障越容易:
- Byzantine failure: 节点可以任意篡改发送给其他节点的数据
- Authentication detectable byzantine failure(ADB): Byzantine failure的特例;节点可以篡改数据但不能伪造其他节点的数据
- Performance failure: 节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure: 节点收到数据的时间无限晚,即收不到数据
- Crash failure: 在omission failure的基础上,增加了节点停止响应的假设,也即持续性地omission failure
- Fail-stop failure: 在Crash failure的基础上增加了错误可检测的假设
出现上述故障的可能场景:
分布式理论基础
CAP理论
| 选项 | 描述 |
|---|---|
| C(Consistence) | 一致性,指数据在多个副本之间能够保持一致的特性(强一致性) |
| A(Availability) | 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应,但是不能保证获取的数据是最新的 |
| P(Network partitioning) | 分区容错性,分布式系统在遇到任何网络分区故障时,仍能对外提供服务,除非整个网络环境都发生故障 |
CA:放弃分区容错性,比如传统的单机数据库 AP:放弃强一致性,比如一些注重用户体验的系统 CP:放弃可用性,比如与钱财安全相关的系统
在网络发生分区的情况下,必须在可用性和一致性之间做选择,但并不是完全放弃一方,比如完全牺牲可用性或者一致性,而是可以做到部分可用性或是最终一致性。
BASE理论
Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 理论逐步演化而来的。其核心思想是:
Basically Available(基本可用): 假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言: 响应时间上的损失或功能上的损失。
Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
Eventually consistent(最终一致性) : 系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。