服务降级、熔断、限流---Hystrix

Hystrix:服务降级、熔断实战解析
本文详细介绍了如何使用Hystrix进行服务降级、熔断操作,通过Provider和Consumer Demo展示了配置步骤,包括设置超时、处理运行时异常,并探讨了全局服务降级和通配服务降级的实现。最后,还给出了服务熔断的示例,以防止服务雪崩效应,提升分布式系统的健壮性。

以前工作的公司,也是用微服务架构,使用的是很简陋的自己封装的微服务框架,Apache CXF + Eureka,但没有实现服务降级和熔点的思想。一个典型的问题是,A服务依赖B服务,B服务依赖C服务,然而C服务因为数据库或其他原因的导致请求线程卡死,这样导致B服务等待C,A服务等待B,用户看到页面空白(A服务渲染)。这还不是最糟糕的,最糟糕的是并发量上去,C拖死B,B拖死A,A、B、C都死翘翘了,最后发现是DBServer的问题。很显然需要一个服务保护的工具,来解决这种异常超时等造成的服务雪崩效应。
在这里插入图片描述

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

Github Netflix/Hystrix

1. 服务降级–Provider Demo

1.1 加入依赖到pom

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

1.2 配置application.yml

server:
  port: 8001
spring:
  application:
    name: cloud-payment-hystrix-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka

1.3 主类配置注解

@EnableCircuitBreaker

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class PaymentHystrixApplication {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(PaymentHystrixApplication.class, args);
    }
}

1.4 Controller & Service

PaymentController :

@RestController
@RequestMapping("/payment")
@Slf4j
public class PaymentController {
   
   
    @Autowired
    private PaymentService paymentService;

    @Value("${server.port}")
    private int servicePort;

    @GetMapping("/paymentInfoOK/{id}")
    public String paymentInfoOK(@PathVariable("id") Integer id) {
   
   
        String result = paymentService.paymentInfoOK(id);
        log.info("+++++++ result: " + servicePort + result);
        return result + servicePort;
    }

    @GetMapping("/paymentInfoTimeout/{id}")
    public String paymentInfoTimeout(@PathVariable("id") Integer id) {
   
   
        String result = paymentService.paymentInfoTimeout(id);
        log.info("+++++++ result: " + servicePort + result);
        return result 
### Hystrix限流熔断降级工作流程及实现 #### 一、Hystrix 基本概念 Hystrix 是一个由 Netflix 开发的库,主要用于处理分布式系统中的延迟和容错问题。其核心功能包括限流降级以及熔断机制[^1]。 #### 二、限流的工作原理与实现 限流是指控制请求流量以保护系统的稳定性。Hystrix 使用线程池隔离策略来实现限流。当某个命令执行时,如果当前线程池已满,则后续请求会被拒绝并抛出异常 `HystrixCircuitBreakerOpenException` 或者触发回退逻辑[^1]。 以下是基于 Spring Cloud 中的一个简单配置示例: ```java @Bean public HystrixCommandProperties.Setter customSetter() { return HystrixCommandProperties.Setter() .withExecutionIsolationThreadTimeoutInMilliseconds(500) // 设置超时时长为500ms .withCoreSize(10); // 设置线程池大小为10 } ``` #### 三、熔断的工作原理与实现 熔断机制的核心在于监控服务调用的状态。一旦检测到一段时间内的错误率超过设定阈值(默认情况下是5秒内有20次失败),则会打开熔断器,阻止进一步尝试访问该不稳定的服务,并立即返回 fallback 方法的结果[^2]。 下面是一个典型的 @HystrixCommand 注解使用的案例: ```java @Service public class MyService { @HystrixCommand(fallbackMethod = "fallbackMethod") public String callExternalService() { // 调用外部服务... return externalService.call(); } private String fallbackMethod() { return "Fallback response"; } } ``` 在此代码片段中,如果 `callExternalService()` 函数发生任何受支持类型的异常,那么将自动调用定义好的 `fallbackMethod()` 来提供替代响应。 #### 四、降级的工作原理与实现 服务降级通常发生在高并发场景下资源不足的情况下。为了保证核心业务不受影响,可以牺牲一些次要的功能模块。这正是通过预先编写好相应的 fallback 处理函数完成的。每当主路径上的操作出现问题或者被阻塞时,就切换至备用方案即降级方法[^1]。 例如上面提到的例子中,“Fallback response” 就是对原始请求的一种简化版回应形式作为降级措施的一部分。 #### 五、总结与发展现状 尽管 Hystrix 提供了一套完善的解决方案应对复杂的网络环境挑战,但由于官方于几年前停止对其维护更新计划,因此对于新项目而言可能更倾向于选择像 Sentinel 这样仍在积极迭代改进的新一代工具[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值