定义分布式
- 单机瓶颈 - 多机器部署
- 单系统运维瓶颈 - 拆服务
分布式系统面临的问题:
- 通信异常
- 成功 / 失败 / 超时
- 节点故障
分布式带来的事务问题
- 分布式事务的特性
- 原子性
- 一致性
- 隔离性
- 持久性 —— 只相信DB = 落库
CAP理论
分布式系统最基本的理论是CAP理论,即一致性、可用性和分区容错性只能同时满足其中两个。
- Consistency(一致性):多个副本之间数据的一致性。如果在一个副本上写入,其他副本上立即可读,那么这样的系统就具有强一致性。
- Availability(可用性):在有限的时间内返回对应的处理结果。”有限的时间”是系统设计之初就设定好的系统指标。·
- Partition tolerance(分区容错性):如果有部分网络节点出现了异常,分布式系统应仍可以对外提供一致性和可用性保证。
:::info
简单理解:
理解CAP理论最简单的方式是想象两个副本处于分区两侧,即两个副本之间的网络断开,不能通信。
- 如果允许其中一个副本更新,则会导致数据不一致,即丧失了C性质。
- 如果为了保证一致性,将分区某一侧的副本设置为不可用,那么又丧失了A性质。
- 除非两个副本可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。
一般来说使用网络通信的分布式系统,无法舍弃P性质,那么就只能在一致性和可用性上做一个艰难的选择。
CAP理论的表述很好地服务了它的目的,开阔了分布式系统设计者的思路,在多样化的取舍方案下设计出多样化的系统。在过去的十几年里确实涌现了不计其数的新系统,也随之在一致性和可用性的相对关系上产生了相当多的争论。
深度理解:
在CAP理论提出十二年之后,其作者又出来辟谣。“三选二”的公式一直存在着误导性,它会过分简单化各性质之间的相互关系:
- 首先,由于分区很少发生,那么在系统不存在分区的情况下没什么理由牺牲C或A。
- 其次,C与A之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同。
- 最后,这三种性质都可以在程度上衡量,并不是非黑即白的有或无。可用性显然是在0%到100%之间连续变化的,一致性分很多级别,连分区也可以细分为不同含义,如系统内的不同部分对于是否存在分区可以有不一样的认知。
所以一致性和可用性并不是水火不容,非此即彼的。Paxos、Raft等分布式一致性算法就是在一致性和可用性之间做到了很好的平衡的见证。 :::