在分布式环境中,许多服务依赖项不可避免地会失败, Hystrix是一个库,它通过添加延迟容忍和容错逻辑来帮助控制这些分布式服务之间的交互。 Hystrix通过隔离服务之间的访问点、停止它们之间的级联故障以及提供后备选项来实现这一点, 所有这些都可以提高系统之间的整体弹性。通俗定义:
Hystrix是一个用于处理分布式系统的延迟和容错的开源库, 在分布式系统中,许多依赖项不可避免地会调用失败、超时、异常等, Hystrix能够保证在一个依赖出现异常的情况下, 不会导致整体服务的失败,避免级联故障(系统雪崩现象),提高分布式系统的弹性。
1.服务雪崩
在微服务之间进行服务调用时,由于某一个服务的故障,导致级联故障的现象, 称之为雪崩效应。 雪崩效用描述的是提供方不可用导致消费方不可用,并将比可用逐渐放大的过程。
雪崩图解
假设存在如下调用链路:
此时,若Service A的流量波动很大,流量突然增加,那么在这种情况下,就算Service A扛得住这么大的并发量,Service B和Service C也未必能扛得住。
假设Service C因为扛不住而变得不可用,那么请求就会阻塞堆积在Service B,随着时间的推移慢慢耗尽Service B的线程资源,直至Service B也变得不可用,这一过程如下图所示:
以上,在一条调用链路中由于一个服务不可用导致整条链路都不可用的情况就叫做服务雪崩,也叫扇出效应。
2.服务熔断–服务雪崩的解决方案
“熔断器”本身是一种开关装置,当某个服务单元发生故障之后, 通过断路器的服务监控,某个异常条件被触发,直接熔断整个服务, 向调用方法返回一个附和预期的、可处理的备选响应(FallBack),而不是长时间地等待或是抛出调用方无法处理的异常。 这就保证了服务调用方的线程不会被长时间占用,避免故障在分布式系统中蔓延,乃至雪崩。 若目标服务好转则回复调用。 服务熔断是解决服务雪崩的重要手段。
服务熔断图示:
3.服务降级
-定义
服务压力剧增时根据当前系统的业务情况及流量对一些服务和页面进行有策略的降级, 以此缓解服务器的压力,保证核心系统的正常运行,同时保证部分甚至大部分客户能够得到正确的响应。 即当前请求处理不了或者出错了,给一个默认的返回。
-通俗定义
通俗来讲,所谓服务降级即关闭系统的边缘服务,保证系统核心服务的正常运行。
服务降级图示
4.降级和熔断异同概述
共同点: -目的一致:都是为可用性、可靠性考虑,为防止系统整体缓慢甚至崩溃而采用的技术手段。 -最终实现类似:两者最终让用户体验到的结果都是某些功能的不可达或不可用。 -粒度一般相同:一般都是服务级别,当然业界也有耕细粒度的做法,如做到数据持久层(允许查询,不允许增删改)。 -自治性要求很高:熔断模式一般是基于策略的自动触发(如:在某一时刻调用服务超时或者异常就会自动触发熔断),降级虽说可以人工干预,但在微服务架构下,完全由人工处理显然不合理,开关预置、配置中心都是必要手段。 不同点: -触发原因不同:服务熔断一般是某个下游服务故障引起,而服务降级一般是从整体负荷出发考虑。 -管理目标的层级不同:熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般是要对业务有层级之分(一般是从外围边缘服务开始)。
5.总结
熔断一定会触发降级 -- 熔断之后检测到它不可用会给调用方一个默认的返回。 所以熔断也是降级的一种,是降级里的一个小分类。 区别在于熔断是对调用链路的保护,降级是对系统过载的一种保护处理。



