面试官:你如何理解分布式cap?

简介: 面试官:你如何理解分布式cap?

1、什么是分布式


我们把所有功能集中放在一个系统,比如用户注册,登入,用户下单买东西等,全部放在一个系统部署在一台服务器上,属于集中式系统。若随着业务的增大,越来越多的用户和越来越麻烦的也无需求,为了保证高内聚低耦合,可以吧业务拆分成不同的模块,springCloud就属于分布式,吧每个功能点放在不同的系统里,在部署在不同的服务器上,保证容错性低,而集群部署可以保证高可用。

 

2、什么是CAP


Consistency(一致性):保证客户端的操作完服务端之后,每次访问的数据都是一致,比如张三和李四同事访问A、B两个不同的服务器,张三修改A服务器数据库之后,必须同步到B,保证李四在B服务器查询数据库和A服务器数据一致。

 

Availability(高可用):表示服务器正常可用,一直能响应客户端,不能因为宕机,或者解决一致性问题,而导致客户端一直显示加载中。

 

Partition Tolerance(分区容错性):表示分布式系统在某个网络分区有故障时候,系统还能正常运行,满足正常的业务需求,保证一致性和高可用,客户端感受不到有故障发生。

 

3、为什么只能满足两个


image.png

这张图网上有很多,如果你看过资料或者视频,应该看过很多遍,举个例子:


1、有两台服务器,张三在A服务器吧数据改成了金额从1改成了100;

2、A服务器吧数据同步到B服务器,数据也成为了100;

3、李四从B服务器访问获取到的数据也是100。


上面这个例子满足了cap的三个特性,这是最理想的状态。但若网络出现故障的情况下怎么办呢?当A服务器同步数据到B服务器的时候,网络出现了故障,因此李四从B服务器获取 到的数据还是1,因为数据并未从A数据库同步过来,但这时候系统也能访问,就没有一致性了,拥有了分区容错性和可用性。

正因为这三个矛盾,三者不能同时满足,既然不能一起满足,我们就要在cap里面进行取舍。

 

怎么取舍呢?


1、    选择CA without P:这时候意味着系统不是分布式,牺牲了分区容错性。因为分布式系统就是把功能分开,部署在不同的服务器。

2、    选择AP without C : 这时候就意味着不同的系统储存的数据是不一样的,客户访问A系统获取的数据是1,访问B系统获取的数据是100。

3、    选择CP without A : 这种情况意味着选择分布式系统并且保证一致性,但如果网络节点发生故障,客户端就会出现一直阻塞状态,等待网络恢复才能获取到一致性的结果。

 

如何取舍就要根据业务场景来评估,事实证明,大部分都是牺牲一致性,比如双11活动,12306抢票,抢了之后显示票不够,但并不是说牺牲一致性就是最好的,在数据要求比较严谨的方面,比如mysql数据库,是需要满足一致性和可用性的。

相关文章
|
1月前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
420 2
|
1月前
|
Java
JAVA 分布式事务 CAP 理论
【1月更文挑战第7天】JAVA 分布式事务 CAP 理论
|
1月前
|
Java 关系型数据库 数据库连接
BATJ高频面试249道题:微服务+多线程+分布式+MyBatis +Spring
本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈,希望大家都能找到适合自己的公司,开开心心的撸代码。
|
10天前
|
NoSQL Java 应用服务中间件
大厂面试必备:如何轻松实现分布式Session管理?
这篇文章介绍三种分布式Session的实现方案:基于JWT的Token、基于Tomcat的Redis和基于Spring的Redis。JWT方案通过生成Token存储用户信息,实现无状态、可扩展的会话管理,但可能增加请求负载且数据安全性较低。Tomcat与Redis结合,通过配置Tomcat和Redis,实现Session集中管理和高性能存储,但配置相对复杂。Spring整合Redis适用于SpringBoot和SpringCloud项目,集成方便,扩展性强,但同样依赖外部Redis服务。每种方法有其优缺点,适用场景不同。作者小米是一个技术爱好者,欢迎关注其微信公众号“软件求生”获取更多技术内容
19 4
|
1天前
|
存储 架构师 关系型数据库
分布式系统详解--基础知识(CAP)
分布式系统详解--基础知识(CAP)
4 0
|
1月前
|
消息中间件 缓存 算法
从ACID到BASE:分布式系统CAP理论深度解析
**CAP理论**是分布式系统设计的基础,指出一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)无法兼得。一致性确保所有节点数据相同,如ACID原则;可用性保证系统始终响应用户请求,常见优化包括BASE理论和多级缓存;分区容忍性则确保网络分区时仍能服务。设计时需根据业务需求权衡这三者。
38 4
|
1月前
|
Nacos
分布式理论:CAP理论 BASE理论
分布式理论:CAP理论 BASE理论
24 2
|
1月前
|
消息中间件 缓存 负载均衡
这些年背过的面试题——分布式篇
本文是技术人面试系列分布式篇,面试中关于分布式都需要了解哪些基础?一文带你详细了解,欢迎收藏!
390 1
这些年背过的面试题——分布式篇
|
1月前
|
存储 NoSQL Java
阿里面试官问我Redis怎么实现分布式锁
分布式锁一般有三种实现方式:
60 0
|
1月前
|
NoSQL 安全 Java
面试官:分布式锁最终解决方案是RedLock吗?为什么?
面试官:分布式锁最终解决方案是RedLock吗?为什么?
59 1