微服务之Hystrix熔断器

Hystrix是Netflix的开源项目,用于在分布式系统中防止服务雪崩效应,通过熔断器机制隔离服务依赖,确保系统弹性。本文介绍了Hystrix的设计原则,如防止资源耗尽、快速失败、回退方案和监控。同时,通过示例详细展示了在RestTemplate+Ribbon以及Feign上如何启用和配置Hystrix熔断器,以实现服务的高可用性和容错能力。
摘要由CSDN通过智能技术生成

分布式系统中,服务与服务之间的依赖错综复杂,不可避免,其中一些服务会出现故障 ,导致依赖他们的其他服务出现远程调度的线程问题(雪崩效应)。而Hystrix提供的熔断器,通过隔离服务的访问点,能阻止这种分布式系统中出现的联动故障,并提供故障的解决方案,从而提高了整个分布式系统的弹性。


什么是Hystrix

Hystrix是Netflix公司的开源项目,它提供熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix是通过隔离服务的访问点阻止联动故障的,并提供故障的解决方案,从而提高整个分布式系统的弹性
Hystrix设计原则

  1. 防止单个服务的故障耗尽整个servlet的资源
  2. 快速失败机制,如果某个服务出现故障,则调用该服务的请求快速失败,而不是等待
  3. 提供回退方案fallback,请求故障时,提供设计好的回退方案
  4. 使用熔断机制,防止扩散到其他服务去
  5. 提供熔断器的监控机制Hystrix Dashboard,可以实时监控熔断器状态

工作机制

  1. 当某个API接口失败的次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,该API正常提供服务。
  2. 当失败次数大于设定的阀值的时候,Hystrix判定改API接口出现故障,打开熔断器,这时候该请求API接口会执行快速失败的逻辑(fallback回退的逻辑)而不执行业务逻辑,请求的线程不会处于阻塞状态。
  3. 处于打开状态的熔断器,一段时间后会处于半打开状态,并将一定数量的请求执行业务逻辑,剩余的请求会执行快速失败。若执行的业务逻辑请求失败,则熔断器继续打开,若成功则熔断器关闭。

RestTemplate+Ribbon上使用熔断器

  1. 引入依赖starter-hystrix后,在启动类加上@EnableHystrix注解就可以开启熔断器功能
  2. 在方法上添加@HystrixCommand注解,设置fallBackMethod属性,指定fallback回调,最好返回一些静态字符串,不需要处理复杂逻辑什么的,这样可以方便执行快速失败,释放线程资源。

小demo(注:代码接微服务之Sring Cloud使用Feign实现负载均衡&Feign简介一期博客:

 基本步骤:

  1. 创建Hystrix模块
  2. 配置pom.xml
  3. 创建application.yml配置文件
  4. 创建ProductClientService接口、ProductClientServiceImpl实现类
  5. 创建ProductMapper接口
  6. 创建ProductController类
  7. 配置mybatis
  8. 创建ProductProvider_8002_hystrix主启动类
  9. 测试

细节实现:

  1. 创建名为microService-provider-hystrix-8002的Maven项目

  2. 配置pom.xml文件

    <dependencies>
        <!--依赖关系-->
        <dependency>
            <groupId>cn.zf</groupId>
            <artifactId>microService-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--添加Eureka客户端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--springboot web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- mybatis 启动器-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值