10道经典分布式面试题
,指的是在一个分布式系统中,最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。(三选二),数据在多个副本中保持一致,可以理解成两个用户访问两个系统A和B,当A系统数据有变化时,及时同步给B系统,让两个用户看到的数据是一致的。,系统对外提供服务必须一直处于可用状态,在任何故障下,客户端都能在合理时
1、什么是CAP、Base理论?
CAP定理,指的是在一个分布式系统中,最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。(三选二)
C:一致性(Consistency),数据在多个副本中保持一致,可以理解成两个用户访问两个系统A和B,当A系统数据有变化时,及时同步给B系统,让两个用户看到的数据是一致的。
A:可用性(Availabiity),系统对外提供服务必须一直处于可用状态,在任何故障下,客户端都能在合理时间内获得服务端非错误的响应。
P:分区容错性\(Partition tolerance),在分布式系统中遇到任何网络分区故障,系统仍然能对外提供服务网络分区,可以这样理解,在分布式系统中,不同的节点分布在不同的子网络中,有可能子网络中只有一个节点,在所有网络正常的情况下,由于某些原因导致这些子节点之间的网络出现故障,导致整个节点环境被切分成了不同的独立区域,这就是网络分区。
如图所示。

注意点:
1、网络分区
2、CP和AP智能满足其一
3、注册中心Eureka是AP,Zookeeper是CP
2、谈谈你对分布式事务的理解?
附加:
-
什么是两阶段提交、三阶段提交?
-
什么是补偿性事务?
-
如何使用消息队列和事件表实现分布式事务?
-
RocketMQ在分布式事务中的应用?
3、分布式幂等性如何设计?
4、分布式ID生成有哪些方案?
常用的有以下几种:

5、如何处理数据库中大数据量?
对数据库进行:分区、分库分表,主从架构(读写分离)
1. 分区: 数据隔离

2. 分库分表
-
水平分库/表,各个库和表的结构一模一样。
-
垂直分库/表,各个库和表的结构不一样。

图片来源于网络
关于分库分表相关,可参考:
3. 读写分离
主机负责写,从机负责读。

6、常见的负载均衡算法有哪些?
1. 轮询负载均衡算法
RR ,Round Robin,如果有两个服务器,你一下,我一下。
2. 加权轮询算法
weighted round robin ,wrr,按照权重不同来分发,基本上是基于配置。
比如:两个服务权重分别是6和4,我们的方法,在1-10之间取 随机数,比如取到 1-6,就走6的权重,取到710,就走4权重的服务。
3. 随机轮询算法
Random
最少链接:Least connections,记录每个服务器正在处理的 连接数(请求数),将新的请求分发到最少连接的服务器上,这是最符合负载均衡的算法。
如:放到redis里,做hash,可以用:incr。
7、熔断和降级的区别?
1. 相同点
-
都是从
高可用着想,为防止系统的整体响应缓慢甚至崩溃,而采用的技术手段。最终让用户体验到的是某些功能暂时不可达或不可用。 -
都是
服务级别的。 -
自治性很高 : 熔断一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,预置开关、配置中心都是必要手段。
2. 区别
-
服务熔断一般是某个服务(下游服务)故障引起;服务降级一般是从整体负荷考虑。

-
熔断时一个框架级的处理,每个服务都需要;降级一般在服务调用的上层处理。

使用时,根据业务情况在服务层面处理。
8、如何进行服务划分?
依据系统业务的边界划分。
一般按功能域拆分。如:

9、如何提高系统并发能力?
10、了解那些常用的限流算法,说说原理?
-
滑动时间窗口算法
滑动时间窗口算(也叫计数器算法),是指在指定的时间周期内,累加访问的次数,达到设定的值时,触发限流策略。下一个时间周期进行访问时,访问次数清零。计算器算法如图所示。

从上图看出,
-
设置一分钟的阈值是100,在0:00到1:00内请求数是60,
-
当到1:00时,请求数清零,从0开始计算这时在1:00到2:00之间能处理的最大的请求为100,超过100个的请求,系统都拒绝。
-
存在临界问题,图中,在0:00到1:00内,只在0:50有60个请求,而在1:00到2:00之间,只在1:10有60个请求,虽然在两个一分钟的时间内,都没有超过100个请求,但是在0:50到1:10这20秒内,确有120个请求,虽然在每个周期内,都没超过阈值,但是在这20秒内,已经远远超过了原来设置的1分钟内100个请求的阈值。
-
漏桶算法
漏桶算法的原理就像它的名字一样,维持一个漏斗,它有恒定的流出速度,不管水流流入的速度有多快,漏斗出水的速度始终保持不变,类似于消息中间件,不管消息的生产者请求量有多大,消息的处理能力取决于消费者。

在漏桶限流算法中,存在下面几种情况:
(1)当请求速度大于漏桶的流出速度时,也就是请求量大于当前服务所能处理的最大极限值时,触发限流策略。
(2)请求速度小于或等于漏桶的流出速度时,也就是服务的处理能力大于或等于请求量时,正常执行。
漏桶算法有一个缺点,当系统在短时间内有突发的大流量时,桶算法处理不了。
-
令牌桶算法
1、令牌桶算法,指系统以恒定的速率向令牌桶中放入令牌,如果有客户端来请求,先需要从令牌桶中拿一个令牌,拿到令牌,才有资格访问系统,这时令牌桶中少一个令牌。当令牌桶满的时候,再向令牌桶生成令牌时,令牌会被抛弃。

2、在令牌桶算法中,存在以下几种情况。
(1)请求速度大于令牌的生成速度:那么令牌桶中的令牌会被取完,后续再进来的请求,由于拿不到令牌,会被限流。
(2)请求速度等于令牌的生成速度:那么此时系统处于平稳状态,
(3)请求速度小于令牌的生成速度:那么此时系统的访问量远远低于系统的并发能力,请求可以被正常处理。
令牌桶算法,可以处理短时间大流量的场景。
更多推荐



所有评论(0)