随笔分类
服务雪崩
# *服务雪崩
- *在微服务之间进行服务调用时由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应;雪崩效应描述的是提供方不可用,导致消费方不可用并且将不可用逐渐放大的过程
- 根本原因:在服务调用链中某个服务因为执行业务时间过程,或者说是因为大规模出现异常导致自身服务不可用,并把这种不可用放大的一个过程
图解雪崩效应:如存在如下调用链路:
- *而此时,Service A的服务流量波动很大,流量经常会突然性增加,就算 Service A能扛得住请求,Service B和 Service C未必扛得住这突发的请求;此时,如果 Service C因为扛不住请求而变得不可用,那么 Service B的请求会被阻塞,这会慢慢耗尽 Service B的资源,这会导致 Service B的不可用;紧接着,Service A也会不可用,如下图所示:
服务熔断
# *如何解决微服务系统中服务雪崩问题 ? - 服务熔断 Hystrix组件
- *作用:防止在微服务系统中服务雪崩现象的发生
- "熔断器"本身就是一个开关装置,有点类似 "保险丝",当某个服务单元发生故障之后,通过熔断器的故障监控,某个异常条件被出发时,直接去熔断整个服务(此时,熔断器开启);向调用方返回一个"符合预期的"、"可处理的备选响应(FallBack)",而不是长时间的等待或者抛出调用方法无法处理的异常,这就保证了服务调用方自身线程不会长时间被占用,从而避免故障在分布式系统中蔓延,乃至雪崩;
如果目标服务情况好转则恢复调用(此时,熔断器关闭);服务熔断是解决服务雪崩的重要手段
- *断路器打开后,过了 5s断路器会处于 "半开"状态,此时放行一个请求,如果此请求处理成功,那么断路器将关闭,否则则是继续打开,处于循环状态
服务降级
# *服务降级
- *当网站|服务流量突然增加时,有策略关闭某系统中的边缘服务(当然,通常也会伴随着核心服务对应的节点的增加部署),以来确保核心服务的正确运行;但需保证用户能够得到正确的响应,即当请求无法得到处理时,需返回用户一个默认响应
- 服务降级是系统层面的人为干涉的行为
# *对比服务熔断与服务降级
- *same:目的一致,都是从服务可用性上出发,为了防止系统整体缓慢甚至崩溃,采用的技术手段
- 最终表示类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用
- *differ:熔断模式一般是基于策略的自动触发,降级虽说可人为干预,但完全人为显然不可能,因此开关预置、配置中心都是必要手段:如 Sentinel
- 二者触发的原因不一样:服务熔断一般是下游服务不可以触发,服务降级是出于系统整体负荷的考虑
- 二者管理目标层次也不同:熔断是框架级别的处理,每个微服务都需要进行处理且无层次之分;降级一般需要对业务有层级之分(比如降级一般是从最外围边缘服务开始)
# *Summary:服务熔断必然会导致服务降级,熔断其实是降级的一种;区别在于熔断是对调用链路的保护,降级是对系统过载的一种保护处理.