CAP理论/AP架构/CP架构

作者因公司使用Zookeeper而非Spring Cloud Eureka,探究二者区别。Zookeeper为CP设计,Eureka为AP设计。还对比了Eureka与Dubbo服务治理机制,介绍了CAP理论,指出在分布式环境中P必选,需在A和C中抉择,并举例说明选择A或C的情况。

最近有时间研究分布式架构,因为公司使用的Zookeeper,并没有使用Spring Cloud Eureka,所以想探究一下他们之间的区别,于是看到简书里的文章:Spring Cloud Eureka简介及与Zookeeper对比,明显的区别可能就是Zookeeper为CP设计,而Eureka为AP设计,但是对CAP/AP/CP很不理解,于是查阅资料,做一个简单的了解。

Eureka服务治理机制与Dubbo服务治理机制的比较

Feature    Eureka    Zookeeper
服务健康检查    可配支持    (弱)长连接,keepalive
CAP    AP    CP
watch支持(客户端观察到服务提供者变化)    支持 long polling/大部分增量    支持
自我保护    支持    -
客户端缓存    支持    -
自身集群的监控    metrics    -
Eureka支持健康检查,自我保护等

Zookeeper为CP设计,Eureka为AP设计。作为服务发现产品,可用性优先级较高,一致性的特点并不重要,宁可返回错误的数据,也比不反回结果要好得多。

服务列表变更Zookeeper服务端会有通知,Eureka则通过长轮询来实现,Eureka未来会实现watch机制

CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的。
P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(partition),也就是由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的。
因为P是必须的,那么我们需要选择的就是A和C。
大家知道,在分布式环境下,为了保证系统可用性,通常都采取了复制的方式,避免一个节点损坏,导致系统不可用。那么就出现了每个节点上的数据出现了很多个副本的情况,而数据从一个节点复制到另外的节点时需要时间和要求网络畅通的,所以,当P发生时,也就是无法向某个节点复制数据时,这时候你有两个选择:
选择可用性 A(Availability),此时,那个失去联系的节点依然可以向系统提供服务,不过它的数据就不能保证是同步的了(失去了C属性)。
选择一致性C(Consistency),为了保证数据库的一致性,我们必须等待失去联系的节点恢复过来,在这个过程中,那个节点是不允许对外提供服务的,这时候系统处于不可用状态(失去了A属性)。

最常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其它节点,其它节点提供读取的服务,当两个节点出现通信问题时,你就面临着选择A(继续提供服务,但是数据不保证准确),C(用户处于等待状态,一直等到数据同步完成)。
--------------------- 
作者:丨微凉丨 
来源:优快云 
原文:https://blog.youkuaiyun.com/u013058742/article/details/83541905 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think> 嗯,用户想了解Redis架构是属于AP还是CP架构。之前系统级指令要求回答结构化,还要用正确的中文和LaTeX格式,最后还得生成相关问题。 首先看看用户提供的几个引用内容。引用[1]明确指出单机Redis没有分布式问题,属于CP系统;引用[2][3]讨论Redis Cluster偏向AP架构;引用[3]特别详细,提到Redis Sentinel总体偏向APCAP理论中P必须存在,而C和A需要权衡;引用[4][5]补充了主从复制和节点故障对一致性的影响。看来需要分场景讨论:单机Redis属于CA系统,Redis Cluster是典型AP架构,而Redis Sentinel则介于APCP之间可以配置。 用户可能是个开发者或架构师,需要根据业务场景选择Redis部署模式。回复时要强调三点:CAP理论中P是必须存在的分布式前提;不同Redis部署模式对应不同CAP特性;实际选择需考虑业务容忍度。格式方面要注意数学变量用$包围,比如$C$表示一致性。 最后准备生成相关问题时,考虑围绕CAP理论应用、Redis架构差异、业务选型建议等方向设计,帮助用户深入理解。 </think> 根据Redis的具体架构配置,其CAP特性有所不同,需分场景讨论: ### 一、核心结论 1. **单机Redis** - 无分布式特性(不涉及分区容忍性$P$),属于**CA系统** - 强一致性(所有操作原子执行) - 节点宕机则服务完全不可用(牺牲$A$) 2. **Redis Cluster(集群模式)** - **典型AP架构** - 网络分区发生时优先保证可用性($A$) - 采用异步复制,可能返回旧数据(牺牲$C$)[^3][^5] 3. **Redis Sentinel(哨兵模式)** - **偏向AP架构**,但可配置增强$C$ - 主从切换期间存在短暂数据不一致 - 通过`WAIT`命令或配置同步复制可提升一致性[^3] ```mermaid graph LR A[Redis部署模式] --> B[单机] A --> C[Cluster集群] A --> D[Sentinel哨兵] B --> E[CA系统] C --> F[AP系统] D --> G[AP为主 可调向CP] ``` ### 二、关键机制解析 1. **数据一致性保障** - 单机:强一致性($ \forall \text{操作原子性} $) - 集群:最终一致性($ \text{同步延迟} \Delta t > 0 $) - Redlock分布式锁提供**近似强一致**(非绝对)[^3] 2. **可用性设计** - Cluster通过分片($ \text{16384 slots} $)实现节点故障转移 - 网络分区时允许客户端访问本地分区节点(满足$A$)[^2][^5] 3. **配置调优方向** ```redis # 增强CP特性(需权衡性能) min-replicas-to-write 1 # 至少1个副本写入成功 min-replicas-max-lag 10 # 副本延迟≤10秒 ``` ### 三、CAP理论在Redis中的实践 | 架构模式 | CAP倾向 | 一致性模型 | 适用场景 | |----------------|----------|-----------------|------------------------| | 单机Redis | CA | 强一致性 | 单节点缓存/计数器 | | Redis Cluster | **AP** | 最终一致性 | 分布式会话/热点缓存 | | ZooKeeper | CP | 顺序一致性 | 分布式锁/配置管理 | > **关键结论**:Redis在分布式场景下选择牺牲部分一致性($C$)换取高可用性($A$),这是由其缓存定位和异步复制机制决定的[^3][^5]。 --- ### 相关问题 1. Redis Cluster的槽位迁移如何影响服务可用性?[^2] 2. 如何通过`WAIT`命令增强Redis主从复制的一致性?[^3] 3. Redlock算法在哪些场景下可能失效?其争议点是什么? 4. 对比Redis Cluster与ZooKeeper在分布式锁实现上的CAP差异?[^3] 5. 为什么金融支付场景需谨慎选择Redis作为核心存储?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值