分布式系统中的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 集群的节点之间远程写数据的时候,如果写失败 就将数据缓存下来,然后定时重传,修复数据的不一致性。
  • 异步修复 : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。
相关推荐
写后端的胖头鱼7 小时前
【高频面试题】spring事物失效场景(带原理 + 代码示例)
java·后端·spring·事务·事物失效
小孩玩什么7 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
长谷深风1117 小时前
Agent执行系统中的身份与版本设计
java·大数据·人工智能·ai·大模型·task·aiagent
Wang's Blog7 小时前
Java框架快速入门: Spring Security+OAuth2之UserDetails与JDBC认证实践
java·网络·spring
爱从未走散7 小时前
面试八股题
java·面试·职场和发展
jsjzsl27 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法
艺杯羹7 小时前
AI编程时代软件工程怎么学:从底层思维认知到驱动智能体的架构跃迁
java·人工智能·ai·架构·软件工程·ai编程
土司大王7 小时前
LeetCode hot100——51.N 皇后:Java 回溯模板、列与对角线剪枝、O(n!) 复杂度分析
java·leetcode·剪枝
重生之小比特7 小时前
【Java SE】IDEA 调试 Debug 案例完整分析
java·ide·intellij-idea
晴天167 小时前
JavaScript 与 Java 垃圾回收机制对比
java·开发语言·javascript