Hystrix

Hystrix

概述

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

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

工作流程

  1. 构造HystrixCommand或者HystrixObservableCommand对象
  2. 执行Command命令。
  3. 查看Command命令的响应缓存。
  4. 判断熔断是否打开。
  5. 看看线程池、队列、信号池是否满了。
  6. 构建或执行。
  7. 计算熔断器的健康状态。
  8. 进行降级处理。
  9. 正常返回。

Hystrix主要作用

主要有四个作用

  1. 服务降级
  2. 服务熔断
  3. 接近实时的监控
  4. 限流、隔离等

服务降级

fallback:当服务不可用的时候,向调用放返回一个符合预期的,可处理的备选响应。类似于默认结果。

触发服务降级的条件
  • 程序运异常行
  • 超时
  • 服务熔断触发服务降级
  • 线程池/信号量打满也会导致服务降级

服务熔断

break:类比保险丝,达到最大服务访问量后,直接拒绝访问,拉闸先点,然后调用服务降级的方法并返回友好结果。

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

service使用服务熔断
@HystrixCommand(fallbackMethod = "paymentCircuitBreakerFallback",commandProperties = {
		@HystrixProperty(name="circuitBreaker.enabled",value="true"), // 是否开启断路器
		@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="10"), // 请求次数
		@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="10000"),  // 时间窗口期
		@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="60")}) // 失败率达到多少后熔断

@HystrixProperty参数说明:

参数名作用例子
circuitBreaker.enabled是否开启断路器true
circuitBreaker.requestVolumeThreshold请求次数10
circuitBreaker.errorThresholdPercentage失败率达到多少熔断60
circuitBreaker.sleepWindowInMilliseconds时间窗口期10000

服务的降级->进而熔断->恢复调用链路

服务限流

flowlimit:秒杀高并发等操作,严禁一窝蜂地过来拥挤,大家排队,有序进行。

mave依赖

 <!-- hystrix -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
	</dependency>

yml配置

server:
  port: 8001
spring:
  application:
    name: eureka-order-feign-hystrix
eureka:
  client:

#表示将自己注册进EurekaServer,默认为true

    register-with-eureka: false

#是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须配置为true

    fetch-registry: true
    service-url:

#单机注册

      defaultZone: http://localhost:7001/eureka

#设置OpenFeign的客户端超时时间(OpenFeign底层是Ribbon)

ribbon:

#读取超时时间,建立连接后服务器取到可用资源所用的时间

  ReadTimeout: 5000

#连接所用的时间,适用于网络正常情况下,两端连接所用的时间

  ConnectTimeout: 5000

Hystrix的降级配置

使用@HystrixCommand注解

服务端改进

服务端自身改进(8001):设置自身调用超时时间的峰值,峰值内可以正常运行,超过了需要有兜底的方法处理,做服务降级(fallback)。返回一个预期的可处理的备选结果。

实现步骤:

  1. 在业务逻辑类的方法上加上@HystrixCommand注解

    fallbackMethod:一旦调用方法失败并抛出了错误信息后,会自动调用该属性所指定的方法。注意需要与原方法的输入参数和输出参数一致。

    commandProperties:服务降级参数,参数类型:@HystrixProperty。

  2. @HystrixProperty注解:@HystrixCommand的一个属性参数。

    execution.isolation.thread.timeoutInMilliseconds:自身调用超时时间峰值,峰值内正常运行,如果超过峰值,那么进入到fallbackMethod方法兜底,单位毫秒。

  3. 此时8001的Service业务层代码(注意超时逻辑睡眠5秒钟了,但熔断降级是3秒钟):

  4. 主启动类加上@EnableCircuitBreaker注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值