1、什么是服务雪崩?
服务雪崩是指在分布式系统中,当一个或多个服务出现延迟或故障时,这些故障会逐渐扩大,并导致整个系统出现大规模的故障,从而导致系统无法正常运行。
即一个服务失败,导致整条链路的服务都失败的情形。
2、 服务雪崩发生时的各阶段及直接原因?
服务雪崩的三个阶段:
阶段一:服务不可用(硬件故障、程序BUG、缓存击穿、用户大量请求)
阶段二:调用端重试加大流量(用户重试、代码逻辑重试)
阶段三:服务调用者不可用(同步代码造成的资源耗尽)
3、应对服务雪崩的解决方案?
1、应用扩容(增加机器数量、升级硬件)
2、流控(限流【信号量】、关闭重试)
3、缓存(缓存预加载)
4、服务降级(服务接口拒绝服务、页面拒绝服务、延迟持久化、随机拒绝服务)
5、服务熔断
4、什么是限流?
限流是一种控制系统资源消耗的策略,用于限制对某个服务或系统的并发请求或访问次数。通过限制请求的速率或总数,可以避免系统被过度请求而导致性能下降、资源耗尽或系统崩溃。
即提前对各个类型的请求设置最高的QPS(Queries Per Second,每秒查询率)阈值,如高于设置的阈值,则对该请求直接返回,不再调用后续资源。
常见的限流策略包括:
1、令牌桶算法:基于令牌的发放速率来控制请求的通过速率,每个请求需要消耗一个令牌。当令牌桶中没有足够的令牌时,新的请求将被暂时拒绝。
2、漏桶算法:类似于一个固定容量的漏桶,请求按照固定的速率进入漏桶,当漏桶已满时,新的请求将被拒绝。这种方式可以平滑请求的处理,但无法处理突发的高并发请求。
5、什么是服务熔断?
在互联网系统中,当下游服务因访问压力过大或其他某种原因突然变得不可用或响应过慢时,上游服务为了保证系统整体服务的可用性,可以暂时切断对下游服务的调用,不再继续访问目标服务,直接返回,快速释放资源,该过程称为服务熔断。如果目标范围情况好转则恢复调用。
解决服务熔断的通用模型是断路器模式(Circuit Breaker Pattern)。断路器模式是一种用于处理分布式系统中服务故障的设计模式,其核心思想是在服务出现故障时,快速失败并返回错误响应,而不是无限制地等待响应超时。此外,断路器将监视所有对远程资源的调用,如对某一个远程资源的调用失败次数足够多,那么断路器会出现并采取快速失败,阻止将来调用失败的远程资源.。这样可以避免故障的扩大和影响到整个系统的可用性。
6、什么是服务降级?
服务降级有两种场景:
1、当下游服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放服务器资源,增减响应速度
2、当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户
服务熔断可视为服务降级的一种。
7、什么是职责链设计模式?
职责链设计模式(Chain of Responsibility Pattern)是一种行为型设计模式,通过将请求的发送者和接收者解耦,使多个对象都有机会处理请求。此模式构建了一个对象链,每个对象都有机会处理请求,或将其传递给链中的下一个对象,直到请求被处理为止。
职责链模式的工作流程:
1、客户端创建处理者对象,并将它们按照特定的顺序串联成链
2、客户端将请求发送到链的起始点的处理者
3、每个处理者根据自己的逻辑判断是否能够处理请求。如果能够处理,则处理请求并结束。如果不能处理,则将请求传递给链中的下一个处理者
4、重复步骤3,直到请求被处理或者整个链被遍历完毕
8、什么是热点数据?
热点数据即在某个时间段内频繁被访问或操作的数据。
解决热点数据的访问问题常见的策略有LRU、LFU、 FIFO。
LRU:Least Recently Used,淘汰最长时间未被使用的数据,以时间作为参考。如果数据最近被访问过,那么将来被访问的几率更高。
LFU:Least Frequently Used,淘汰一定时期内被访问次数最少的数据,以次数作为参考。如果数据过去被访问多次,那么将来被访问的频率更高。
FIFO:First In First Out,先进先出,淘汰最早被缓存的对象。如果一个数据最先进入缓存中,则应该最早淘汰掉。