微服务——springgateway及Hystrix——服务降级与熔断

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

spring cloud gateway 的核心就是一系列的过滤器,可以将客户端的请求转到不同的服务器,即可简要的称为过滤和路由。

gateway核心功能

路由(route)

路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配。

断言(Predicate)

Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息比如请求头和参数。

过滤器(Filter)

一个标准的Spring WebFilter。 Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。

微服务——springgateway及Hystrix——服务降级与熔断_第1张图片

 微服务——springgateway及Hystrix——服务降级与熔断_第2张图片微服务——springgateway及Hystrix——服务降级与熔断_第3张图片

gateway工作流程

微服务——springgateway及Hystrix——服务降级与熔断_第4张图片

网关作用

    (1)反向代理:为保护内网服务的安全,通常不会暴露内网服务ip,而是通过暴露网关ip,通过网关ip代理内网服务ip。

    (2)流量控制:当系统处于高峰期时,为防止系统应访问量过大而崩溃,网关可以限制访问数量。

    (3)熔断:当系统中的服务出现故障,网关可以将服务降级,有请求访问时,直接访问事先准备好的降级方法,等到服务修复后,用户即可继续访问;

    (4)负载均衡:可以按照不同负载均衡策略,将请求分发到不同服务上。


Hystrix——服务降级与熔断

Hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。

熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。

在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand。

这种牺牲局部,保全整体的措施就叫做熔断

hystrix是一个库,通过延迟容忍和容错逻辑,控制分布式服务之间的交互。它通过隔离服务间的访问点、防止级联失败和提供回退选项,保证系统的整体弹性。

Hystrix作用

hystrix被设计的目标是:

1.对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。

2.在复杂的分布式系统汇中阻止级联故障。

3.快速失败,快速恢复。

4.回退,尽可能优雅的降级。

5.启用近实时监控、警报和操作控制。

Hystrix使用场景

1.调用超时时间比你自己定义的阈值要长。

2.线程池满了,该以来应该立即拒绝请求,而不是排队

3.在一段时间内,如果服务的错误百分比超过了一个阈值,就会触发一个断路器来停止对特定服务的所有请求,无论是手动还是自动的

Hystrix如何解决依赖隔离

1.Hystrix使用命令模式HystrixCommand(Command)包装依赖调用逻辑,每个命令在单独线程中/信号授权下执行。

2.可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时,直接返回或执行fallback逻辑。

3.为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。

4.依赖调用结果分:成功,失败(抛出异常),超时,线程拒绝,短路。 请求失败(异常,拒绝,超时,短路)时执行fallback(降级)逻辑。

5.提供熔断器组件,可以自动运行或手动调用,停止当前依赖一段时间(10秒),熔断器默认错误率阈值为50%,超过将自动运行。

6.提供近实时依赖的统计和监控

熔断状态

熔断有三种状态:
1.Closed:关闭状态,所有请求都正常访问。

2.Open:打开状态,所有请求都会被降级。Hystix会对请求情况计数,当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。

3.Half Open:半开状态,open状态不是永久的,打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全关闭断路器,否则继续保持打开,再次进行休眠计时

服务降级

使用方法:
(1)添加pom文件

    
        org.springframework.cloud
        spring-cloud-starter-netflix-hystrix
    

(2)启动类加@EnableCircuitBreaker注解

微服务——springgateway及Hystrix——服务降级与熔断_第5张图片

(3)使用RestTemplate请求数据 加上@HystrixCommand(fallbackMethod=“fallback”)

微服务——springgateway及Hystrix——服务降级与熔断_第6张图片

(4)fallback是方法 在方法中保持传参和返回值相同。

微服务——springgateway及Hystrix——服务降级与熔断_第7张图片

微服务——springgateway及Hystrix——服务降级与熔断_第8张图片

微服务——springgateway及Hystrix——服务降级与熔断_第9张图片

(5)修改超时时间
默认超时时间是1000ms,可通过以下进行设置单位为ms

    @HystrixCommand(fallbackMethod = "fallback2",
    commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})

服务熔断

(1)服务在高并发的情况下出现进程阻塞,导致当前线程不可用,慢慢的全部线程阻塞 ,导致服务器雪崩。这时直接熔断整个服务,而不是一直等到服务器超时。

(2)断路器全开时:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务
半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭
关闭:当服务一直处于正常状态 能正常调用

(3)服务熔断使用:

微服务——springgateway及Hystrix——服务降级与熔断_第10张图片

circuitBreaker.enabled :true 打开熔断 默认开启
circuitBreaker.requestVolumeThreshold: 当在配置时间窗口内达到此数量的失败后,进行短路。
circuitBreaker.sleepWindowInMilliseconds:短路多久以后开始尝试是否恢复
circuitBreaker.errorThresholdPercentage:出错百分比阈值,当达到此阈值后,开始短路。

服务熔断监控

    
        org.springframework.cloud
        spring-cloud-starter-netflix-hystrix-dashboard
    
    
        org.springframework.boot
        spring-boot-starter-actuator
    

2.启动类添加注解 @EnableHystrixDashboard //断路器可视化
微服务——springgateway及Hystrix——服务降级与熔断_第11张图片
点击Monitor Stream进入

微服务——springgateway及Hystrix——服务降级与熔断_第12张图片


Circuit为熔断器的开启状态 默认是Closed 关闭,当出现多个fallback时会出现Open打开熔断器 再次访问则直接fallback,当服务慢慢的恢复再变为closed。

你可能感兴趣的:(微服务,网关,微服务,spring,cloud,java)