天天看点

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

1.Hystrix断路器

1.1.分布式系统面临的问题

复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.

示例:

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

什么是灾难性的雪崩效应?我们通过结构图来说明,如下

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

正常情况下各个节点相互配置,完成用户请求的处理工作

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

当某种请求增多,造成"服务T"故障的情况时,会延伸的造成"服务U"不可用,及继续扩展,如下

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

最终造成下面这种所有服务不可用的情况

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

这就是我们讲的灾难性雪崩!

造成雪崩的原因可以归纳为以下三个:

服务提供者不可用(硬件故障,程序Bug,缓存击穿,用户大量请求)
重试加大流量(用户重试,代码逻辑重试)
服务调用者不可用(同步等待造成的资源耗尽)      

最终的结果就是一个服务不可用,导致一系列服务的不可用,而往往这种后果是无法预料的。

1.2.Hystrix概述

​Hystrix​

​ [hɪst’rɪks]的中文含义是豪猪,因其背上长满了刺而拥有自我保护能力。

Hystix,即熔断器。类似保险丝角色!

主页:https://github.com/Netflix/Hystrix/

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

1.3.熔断器的工作机制:

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

正常工作的情况下,客户端请求调用服务API接口:

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

当有服务出现异常时,直接进行失败回滚,服务降级处理:

玩转SpringCloud专题(十三)-SpringCloud之Hystrix入门

当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果。

1.4.Hystrix主要功能

- 服务降级
- 服务熔断
- 服务限流
- 接近实时的监控
- ......      

继续阅读