分布式系统中的CAP理论和BASE理论

目录

[CAP 理论的基础名词](#CAP 理论的基础名词)

理论的具体内容

举例

主流注册中心的比较

总结

[BASE 理论](#BASE 理论)

达到最终一致性的方法


CAP 理论的基础名词

C:一致性 所有节点访问的都是同一份最新的数据副本

A:可用性 非故障的节点能在合理的时间内返回合理的响应

P:分区容错性 分布式系统出现网路分区的时候仍然能对外提供服务

注:分布式系统中,多个节点之间的网络本来是互通的,但是由于某些故障,比如说某些节点网络出现了问题,网络不互通后,整个网络就会出现被分成几块区域的情况,这就叫网络分区

理论的具体内容

对于一个分布式系统 , 我们在设计读写操作时

只能同时满足 C A P 中的两个

当发生网络分区的时候,如果我们要继续服务,那么在一致性和可用性里面我们只能选一个

所以理论上我们是不能选择 CA 架构的

选择的是 CP 或者是 AP 架构

CP : 在分布式系统能处理分区容错性的基础上满足一致性

AP:在分布式系统能处理分区容错性的基础上满足利用性

C A 时两个冲突的 如果发生了网络分区 那么满足 C 的话 要禁止其他分布式节点 即违反了 A

举例

Dubbo

架构图

我们这边的 dubbo 注册中心 Registry 时扮演了什么样的服务呢

注册中心只负责服务地址的注册与查找 相当于一个目录服务 生产者和消费者只在启动时与注册中心交互

注册中心实际上不负责服务的转发,压力比较小

主流注册中心的比较

Zookeeper 保证的是 CAP 理论中的 CP 即在分区容错性的基础上满足一致性

我们在任意时刻对 Zookeeper 对读请求都能读取到一致的结果

但是在 Leader 选举过程中服务不可用

而且会出现半数机器不用用时服务就会挂掉

Eureka 保证的是 CAP 理论中的 AP 即在分区容错性的基础上满足可用性

不存在什么 Leader 节点 所有节点都是一样的 只不过所有节点上的数据可能会不一致

Nacos 即支持 CP 也支持 AP

总结

在进行分布式系统的设计与开发中 我们更应该考虑的是系统的拓展性,可用性

首先我们要考虑是否会发生网络分区,就是各节点网络问题

如果发生了网络分区就要想办法保证 P 结合业务 在 P 的基础上在考虑该实现 C 还是 A

C 是一致性 A 是可用性

如果未发生网络分区我们要想的是如何尽可能的保证 CA

BASE 理论

BASE 理论是对 CAP 理论的延伸和补充,更加具体的来说 BASE 理论是对 AP 方案的一个补充

AP :在保证分区容错性的基础上保证的是可用性

BA :基本可用

S:软状态

E:最终一致性

BASE 理论的精髓在于

AP 只是在系统发生网络分区的时候放弃一致性,而不是永远放弃一致性

在分区恢复后还是要满足一致性

软状态就是指的是 发生网络分区后一段时间内的状态 可能是不一致的

但我们要达到最终一致性 而并不需要实时的保证数据的强一致性

达到最终一致性的方法

  • 读时修复 : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点的副本数据不一致,系统就自动修复数据。
  • 写时修复 : 在写入数据,检测数据的不一致时,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败 就将数据缓存下来,然后定时重传,修复数据的不一致性。
  • 异步修复 : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。
相关推荐
QQ_21696290962 分钟前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
vx_Biye_Design5 分钟前
springbootNBA数据分析系统平台42434-计算机课程设计、毕业设计
java·vue.js·spring boot·python·django·课程设计·express
Q26433650235 分钟前
【有源码】基于springboot的知识产权管理系统-知识产权咨询问答管理系统-知识产权价值评估管理系统
java·spring boot·mysql·spring·毕业设计·javaweb·课程设计
大侠归来2 小时前
C 语言 | 在函数中操作数组
c语言·c++·算法
怕浪猫7 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
朝朝辞暮i8 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
7yewh8 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
Evand J8 小时前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa
leikooo9 小时前
用餐厅和盘子理解栈和堆
java·数据结构·链表·rust
weixin_3077791310 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构