CAP理论
2023年4月8日大约 4 分钟
分布式和微服务什么意思
单机系统就是程序部署到一台机器,所有的服务由这一台机器提供
分布式系统相对而言,是一组为了完成共同任务而协调工作的计算机节点组成,它们通过网络进行通讯的系统;
分布式系统是多个机器共同提供服务
分布式系统拆分模式
水平切分:水平切分是指将同一个系统部署到多台机器上
垂直切分:垂直切分是按照业务的维度进行拆分,将各个业务独立出来,单独开发和维护
混合切分:混合切分是将水平切分和垂直切分结合起来的一种切分方法
微服务架构 - 大部分都是采用混合切分
所以说微服务是分布式的一个子集,微服务是将服务拆分,并且分布式部署
分布式系统面临的问题
1. 分布式计算的八大谬论
2. 通讯异常,网络分区,三态,节点故障
分布式系统的设计原则
- CAP原则
- BASE理论
CAP 一致 可用 容错
容错通常是必须要有的
- Consistency 一致性
分布式系统每个副本数据,用户读取数据都是最新的值
- Aviability 可用性 (及时可用)
重点在于系统对客户端请求的响应能力
系统能够及时响应客户端请求的能力,注意是及时。
- 分区容错性 Partition tolerance (故障发生可用)
重点在于系统在面对网络分区这种故障情况时的生存能力
网络故障,各节点继续运行,网络恢复后能够重新整合。
# 分区容错性的实现
1. 数据复制:任一节点故障,其他节点还有副本
2. 异步通信:节点之间非实时同步,所以任一节点故障系统可以继续提供服务。
3. 故障检测和恢复:节点故障和恢复有心跳检测等机制自动处理
对于一个分布式系统来说,P 是一个基本要求
对于一个分布式系统来说,P 是一个基本要求
对于一个分布式系统来说,P 是一个基本要求
分布式系统的三种模式
- AP
1.保证服务可用(当某一个副本网络故障不影响)
2.某一个信息丢失不影响系统继续运行
Redis的集群就是这样,多个副本在同一个时刻不保证数据强一致
- CP
1. 强一致性(每个时刻每个副本数据一致)
2. 消息丢失也正常提供服务
为什么没办法有Aviability可用性,因为为了满足强一致性,请求服务时候需要阻塞等待副本同步
- AC
1. 可用性
2. 一致性
要任何时刻都立刻响应,且数据多个副本一致,就无法达到 Partition tolerance,因为消息丢失就无法提供服务了(数据一致性不可能)
- Zookeeper 保证的是 CP 也就是强一致性,但是有时候服务会阻塞一下延迟响应
- Redis集群 是AP,也就是每个时刻都是服务立即可用但是不保证每个副本数据都是最新的
为什么CAP不能兼得
p指的是分区容错性,就是指网络异常等系统被分成多个分区时候,满足P,指的是。
- 有CP不能有A
保证一致性(C),那么在网络分区(P容忍网络分区)的情况下,系统可能需要暂停服务,以确保所有节点的数据一致,这就降低了可用性(A)
- 有AC不能有P
如果保证一致性(C),在保证及时可用性(A)的情况下,是不能接受出现网络分区(P容忍网络分区)的,因为一旦出现网络分区数据没法同步数据就是不一致的。
- 有AP不能有C
如果要保证及时可用性(A),那么在网络分区(P容忍网络分区)的情况下,系统可能无法保证所有节点的数据一致,这就降低了一致性(C)
BASE理论
BASE理论中,一致性分为强一致性和弱一致性
强一致性:当用户更新数据之后,必须保证后续线程或者节点都能马上访问到最新的值
弱一致性:当用户更新数据之后,并不能保证后续线程或者节点都能马上访问到最新的值,它只能通过某种方法来保证最后的一致性