springcloud-hystrix

Hystrix简介

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

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

Hystrix 概念

服务降级

  • 服务器忙,请稍后再试,不让客户端等待并立刻返回一个友好提示,fallback
  • 哪些情况会发生降级
    • 程序运行异常
    • 超时
    • 服务熔断触发服务降级
    • 线程池/信号量打满也会导致服务降级

服务熔断:

  • 类似保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示

服务限流

  • 秒杀高并发等操作,严禁一窝蜂的过来拥挤,排队有序进行
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

降级处理

情况:

  • 大量访问服务器变慢导致超时
  • 宕机或者程序运行出错

服务端8001降级
注意:启动类@EnableCircuitBreaker

@RequestMapping("test2")
    @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})
public String test2(){
    int i = 12/0;
    return "test2";
}
public String paymentInfo_TimeOutHandler(){
    return "超时或异常处理";
}

当test2服务不可用,运行超过3秒,做服务降级,直接兜底方法paymentInfo_TimeOutHandler

客户端80降级
服务端超时时间为5秒

@RequestMapping("test2")
@HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
       @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "5000")
})
public String test2(){
   try {
       Thread.sleep(3000);
   } catch (InterruptedException e) {
       e.printStackTrace();
   }
   return "test2";
}
feign:
  hystrix:
    enabled: true

客户端超时时间为1.5秒

@RequestMapping("test2")
@HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
 })
 public String teest2(){
     return hystrixService.test2();
 }
 public String paymentInfo_TimeOutHandler(){
     return "70超时异常处理";
 }

当客户端超过1.5秒后,兜底方法

全局服务降级
OpenFeign接口,配置fallback

@Component
@FeignClient(value="hystrix-service-7001",fallback = FallbackService.class)
public interface HystrixService {
    @RequestMapping("test1")
    public String test1();

    @RequestMapping("test2")
    public String test2();
}

创建全局fallback

@Component
public class FallbackService implements  HystrixService{
    @Override
    public String test1() {
        return "--------------------------------test1fallback";
    }

    @Override
    public String test2() {
        return "--------------------------------test2fallback";
    }
}

application.yml

feign:
  hystrix:
    enabled: true

当服务端宕机时,客户端兜底方法

熔断机制

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

当检测到该节点微服务调用响应正常后,恢复调用链路。
Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制

@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
            @HystrixProperty(name="circuitBreaker.enabled",value="true"),//是否开启断路器
            @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value="1000"),//时间窗口期
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60") //失败率达到多少后跳闸
})
 @RequestMapping("paymentCircuitBreaker")
 public String paymentCircuitBreaker(@RequestParam("i") Integer i){
     if(i<5){
         throw new RuntimeException("不能小于5");
     }
     return "调用成功"+i;
 }

 public String paymentCircuitBreaker_fallback(Integer i){
     return "回调方法";
 }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值