面试官:你如何理解分布式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数据库,是需要满足一致性和可用性的。

相关文章
|
4月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
3月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
25天前
|
消息中间件 架构师 Java
阿里面试:秒杀的分布式事务, 是如何设计的?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试阿里、滴滴、极兔等一线互联网企业时,遇到了许多关于分布式事务的重要面试题。为了帮助大家更好地应对这些面试题,尼恩进行了系统化的梳理,详细介绍了Seata和RocketMQ事务消息的结合,以及如何实现强弱结合型事务。文章还提供了分布式事务的标准面试答案,并推荐了《尼恩Java面试宝典PDF》等资源,帮助大家在面试中脱颖而出。
|
2月前
|
NoSQL Java Redis
面试官:项目中如何实现分布式锁?
面试官:项目中如何实现分布式锁?
84 6
面试官:项目中如何实现分布式锁?
|
1月前
|
缓存 NoSQL 算法
面试题:Redis如何实现分布式锁!
面试题:Redis如何实现分布式锁!
|
1月前
|
缓存 Java 数据库
JAVA分布式CAP原则
JAVA分布式CAP原则
48 0
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
消息中间件 缓存 负载均衡
这些年背过的面试题——分布式篇
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
|
4月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
|
3月前
|
Go API 数据库
[go 面试] 分布式事务框架选择与实践
[go 面试] 分布式事务框架选择与实践

热门文章

最新文章