Hystrix服务降级熔断基本概念+实操

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

——概念

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

服务降级

服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好的提示,Fallback
触发条件

  • 程序异常
  • 超时
  • 服务熔断触发降级
  • 线程池 / 信号量满

服务熔断

  • 类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示
  • 服务的降级->进而熔断->恢复调用链路

服务限流

秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行

——实操

  • pom依赖
        <!--hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
  • yml
#开启feign和hystrix
feign:
  hystrix:
    enabled: true
  • 主启动增加@EnableHystrix注解

服务降级

// 调用当前方法等待响应时间不超过3s,超过3s后调用getTimeoutHandle方法处理
    @HystrixCommand(fallbackMethod = "getTimeoutHandle", commandProperties =
            {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")})
//	注意:修改 @HystrixCommand建议重启微服务,热部署可能不生效

每个方法配置一个对应的服务降级方法,技术上可行,实际上代码冗余

// Hystrix全局降级处理
@DefaultProperties(defaultFallback = "globalFallbackHandle") 
……
@HystrixCommand

服务熔断

  • 达到最大访问后,直接拒绝访问,调用服务降级的方式返回友好提示
  • 服务降级——>进而熔断——>恢复调用链路
// 断路器配置
    @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"),    // 失败率达到多少后跳闸
    })
  • 失败率达到一定的比率后,再调用原本成功的页面也依然显示失败,调用次数超过该失败率,即可调用成功

服务限流

  • 秒杀高并发等操作,严禁一窝蜂进行拥挤,排队一秒钟N个,有序进行(利用JMeter工具进行压力测试)
  • 同一层次的其他接口服务被困死,此时客户端再进行调用时,响应缓慢,持续等待

工作流程

在这里插入图片描述

  1. 包装请求
  2. 发起请求
  3. 缓存处理
  4. 判断断路器是否打开(熔断)
  5. 判断是否进行业务请求(请求是否需要隔离或降级)
  6. 执行业务请求
  7. 健康监测
  8. 响应失败或成功的处理结果

图形化仪表盘

微服务提供类需要监控依赖配置(spring-boot-starter-actuator)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序少年不秃头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值