Hystrix工作原理及核心配置

1、熔断器模式

在这里插入图片描述

服务的健康状况=请求失败数/请求总数​

熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定的阈值比较决定的

1)当熔断器开关关闭时,请求被允许通过熔断器。如果当前健康状况高于设定阈值,开关继续保持关闭。如果当前健康状况低于设定阈值,开关则切换为打开状态

2)当熔断器开关打开时,请求被禁止通过

3)当熔断器开关处于打开状态,经过一段时间后,熔断器会自动进入半开状态,这时熔断器只允许一个请求通过。当该请求调用成功时,熔断器恢复到关闭状态。若该请求失败,熔断器继续保持打开状态,接下来的请求被禁止通过

熔断器的开关能保证服务调用者在调用异常服务时,快速返回结果,避免大量的同步等待。并且熔断器能在一段时间后继续侦测请求执行结果,提供恢复服务调用的可能

2、Hystrix工作原理

在这里插入图片描述

1)每次调用都会创建一个HystrixCommand

2)执行execute或queue做同步或异步调用

3)判断熔断器是否打开,如果打开跳到步骤8,否则进入步骤4

4)判断线程池/信号量是否跑满,如果跑满进入步骤8,否则进入步骤5

5)调用HystrixCommand的run方法,如果调用超时进入步骤8

6)判断是否调用成功,返回成功调用结果,如果失败进入步骤8

7)计算熔断器状态,所有的运行状态上报给熔断器,用于统计从而判断熔断器状态

8)如果有降级方法走降级处理逻辑,没有则抛出异常。根据上方的步骤可以得出以下四种情况会进入降级处理:熔断器打开、线程池/信号量跑满、调用超时、调用失败

9)返回执行成功结果

3、Hystrix线程和信号量隔离

在这里插入图片描述

线程池隔离:线程隔离会为每一个依赖的服务单独的创建一个线程池进行隔离,每次调用服务都发生在它对应的线程池里,通过线程池里的线程调用后台的服务

信号量隔离:当并发请求数达到阈值时,请求线程可以快速失败,执行降级

信号量隔离线程池隔离
优点轻量,无额外开销支持排队和超时;支持异步调用
缺点不支持任务排队和主动超时;不支持异步调用线程调用会产生额外的开销
适用场景受信客户;高扇出(网关);高频高速调用(缓存)不受信客户;有限扇出

4、Hystrix核心配置

Hystrix的属性存在下面4个不同优先级别的配置(优先级由低到高)

  • 全局默认值:如果没有设置下面三个级别的属性,那么这个属性就是默认值
  • 全局配置默认值:通过在配置文件中定义全局属性值
  • 实例默认值:通过代码为实例定义的默认值
  • 实例配置属性:通过配置文件来为指定的实例进行属性配置
1)、command属性

1)execution.isolation.strategy:该属性用来设置HystrixCommand.run()执行的隔离策略,有如下两个选项

  • THREAD:通过线程池隔离的策略。它在独立的线程上执行,并且它的并发限制受线程池中线程数量的限制(默认值)
  • SEMAPHORE:通过信号量隔离的策略。它在调用线程上执行,并且它的并发限制受信号量计数的限制

全局配置属性:hystrix.command.default.execution.isolation.strategy

实例默认值:

@HystrixCommand(commandProperties = {@HystrixProperty(name = "execution.isolation.strategy",value ="SEMAPHORE")})

实例配置属性:hystrix.command.HystrixCommandKey.execution.isolation.strategy

2)execution.isolation.thread.timeoutInMilliseconds:该属性用来配置HystrixCommand执行的超时时间,默认值为1000毫秒。当HystrixCommand执行时间超过该配置值之后,Hystrix会将该执行命令标记为TIMEOUT并进入服务降级处理逻辑

全局配置属性:hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds

实例默认值:

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

实例配置属性:hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds

3)execution.isolation.semaphore.maxConcurrentRequests:当HystrixCommand的隔离策略使用信号量的时候,该属性用来配置信号量的大小(并发请求数,默认为10)。当最大并发请求数达到该设置值时,后续的请求将会被拒绝

全局配置属性:hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests

实例默认值:

@HystrixCommand(commandProperties = {@HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests", value = "10")})

实例配置属性:hystrix.command.HystrixCommandKey.execution.isolation.semaphore.maxConcurrentRequests

2)、threadPool属性

1)coreSize:该参数用来设置执行命令线程池的核心线程数,该值也就是命令执行的最大并发量(默认值为10)

全局配置属性:hystrix.threadpool.default.coreSize

实例默认值:

@HystrixCommand(commandKey = "helloKey", threadPoolProperties = {@HystrixProperty(name = "coreSize", value = "10")})

实例配置属性:hystrix.threadpool.HystrixThreadPoolKey.coreSize

2)maxQueueSize:该参数用来设置线程池的最大队列大小。当设置为-1时,线程池将使用SynchronousQueue实现的队列,否则将使用LinkedBlockingQueue实现的队列(默认值为-1)

全局配置属性:hystrix.threadpool.default.maxQueueSize

实例默认值:

@HystrixCommand(commandKey = "helloKey", threadPoolProperties = {@HystrixProperty(name = "maxQueueSize", value = "-1")})

实例配置属性:hystrix.threadpool.HystrixThreadPoolKey.maxQueueSize

配置总结如下

配置项(前缀hystrix.command.*.)含义
execution.isolation.strategy线程THREAD或信号量SEMAPHORE隔离(默认值:THREAD)
execution.isolation.thread.timeoutInMillisecondsrun()方法执行超时时间(默认值:1000)
execution.isolation.semaphore.maxConcurrentRequests信号量隔离最大并发数(默认值:10)
circuitBreaker.errorThresholdPercentage熔断的错误百分比阀值(默认值:50)
circuitBreaker.requestVolumeThreshold断路器生效必须满足的流量阀值(默认值:20)
circuitBreaker.sleepWindowInMilliseconds熔断后重置断路器的时间间隔(默认值:5000)
circuitBreaker.forceOpen设true表示强制熔断器进入打开状态(默认值:false)
circuitBreaker.forceClosed设true表示强制熔断器进入关闭状态(默认值:false)
配置项(前缀hystrix.threadpool.*.)含义
coreSize使用线程池时的最大并发请求(默认值:10)
maxQueueSize最大LinkedBlockingQueue大小,-1表示用SynchronousQueue(默认值:-1)
default.queueSizeRejectionThreshold队列大小阀值,超过则拒绝(默认值:5)

推荐阅读

https://segmentfault.com/a/1190000005988895

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring Cloud Gateway是Spring Cloud生态系统中的一个核心组件,它提供了一种基于路由的方式来构建微服务架构中的边缘服务。 Spring Cloud Gateway的工作原理如下: 1. 接收请求:当客户端发起一个HTTP请求时,它会首先到达Spring Cloud Gateway。Gateway作为边缘服务,充当了客户端与后端微服务之间的交互通道。 2. 路由转发:Gateway会根据请求中的路径,使用路由规则将请求转发到不同的后端微服务实例。路由规则可以配置在一个或多个路由器函数中,这些函数通过Predicate(断言)来匹配请求,并通过Filter(过滤器)来处理请求。 3. 验证和过滤:在路由转发之前,Gateway可以执行一系列的过滤器来对请求进行验证和处理。过滤器可以用于添加认证、鉴权、日志记录、流量控制等功能。 4. 请求处理:一旦路由规则和过滤器处理完成,Gateway会将请求转发到目标微服务实例并获取结果响应。响应可以经过过滤器链再次处理后再返回给客户端。 Spring Cloud Gateway的工作原理说明了它是如何接收和处理客户端请求的。通过路由规则和过滤器的配置,我们可以灵活地定义网关的行为,并将请求转发到后端的微服务实例。这种方式使得我们能够实现统一的边缘服务管理和功能扩展,提高了系统的可维护性和扩展性。同时,Gateway还提供了一些辅助功能,如熔断、限流等,帮助我们更好地保护后端微服务,提高系统的稳定性和可用性。 ### 回答2: Spring Cloud Gateway是Spring Cloud的一个微服务网关,它提供了统一的路由和过滤器功能,用于管理和控制微服务的请求流量。 工作原理如下: 1. 定义路由规则:用户在配置文件中定义路由规则,指定请求的URL路径和微服务的目标地址。 2. 接收请求:当客户端发起一个请求时,请求首先到达Spring Cloud Gateway。 3. 匹配路由规则:Gateway会根据用户定义的路由规则进行匹配,找到与请求路径匹配的路由。 4. 转发请求:一旦找到匹配的路由,Gateway将原始请求转发到目标微服务的地址。 5. 进行过滤器处理:在请求转发之前、之后或者错误时,Gateway可以通过一系列的过滤器对请求进行处理。过滤器可以对请求进行鉴权、限流、重试等操作,同时也可以对响应进行处理。 6. 返回响应:目标微服务将处理后的结果返回给Gateway,Gateway再将结果返回给客户端。 Spring Cloud Gateway具有高性能、灵活的特点,可以替代传统的Zuul网关。它支持异步非阻塞的IO操作,能够处理大量的并发请求。同时,由于采用了Spring5和Reactor核心库,它具有更低的内存占用和更好的响应时间。 总结来说,Spring Cloud Gateway的工作原理是:根据用户定义的路由规则匹配请求,转发到目标微服务并进行过滤器处理,最终将结果返回给客户端。 ### 回答3: Spring Cloud Gateway是一个基于Spring Framework的微服务网关解决方案,用于实现API路由,请求转发,过滤和熔断等功能。它可以作为一个独立的服务,将所有的请求发送到后端的微服务集群中,并提供了强大的路由和过滤器机制。 Spring Cloud Gateway的工作原理如下: 1. 客户端发起请求到Spring Cloud Gateway。 2. Gateway首先会通过路由(Route)匹配器,根据请求URL和配置的路由规则,进行路由转发。这些路由规则可以通过YAML或Java进行配置,并且可以动态刷新。 3. 如果匹配到对应的路由规则,Gateway会将请求转发到指定的微服务实例。 4. 在进行请求转发之前,Gateway会通过过滤器(Filter)链对请求进行预处理。过滤器可以完成各种操作,如认证、鉴权、请求日志、请求转换等。可以根据具体需求,自定义过滤器。 5. 请求转发到目标微服务实例后,Gateway会等待响应,并在响应返回之后进行后续处理。 6. 在响应返回之前,Gateway可以再次通过过滤器链对响应进行处理,如响应日志、响应转换等。 7. 最终,Gateway将处理结果返回给客户端。 Spring Cloud Gateway具有以下特点: 1. 基于异步非阻塞的响应式编程模型,性能较高。 2. 支持动态路由和动态刷新。 3. 提供了多种内置的过滤器和扩展机制,可实现各种自定义功能。 4. 集成了Hystrix,可提供熔断和降级功能。 5. 支持高可用和负载均衡。 总之,Spring Cloud Gateway是一个功能强大且具有良好扩展性的微服务网关,通过路由和过滤器机制,实现了请求路由、请求过滤和熔断等功能,能够将所有的请求转发到后端的微服务集群中,并对请求和响应进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邋遢的流浪剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值