博客
关于我
【SpringCloud】Hystrix熔断器
阅读量:413 次
发布时间:2019-03-06

本文共 3128 字,大约阅读时间需要 10 分钟。

Hystrix熔断器技术解读

概述

Hystrix是一款开源的延迟和容错库,专注于处理分布式系统中的依赖故障。它通过熔断机制,防止单点故障对整个系统造成连锁崩溃,提升系统的弹性和容错能力。

分布式系统面临的问题

在复杂的分布式体系中,多个服务之间存在数十个依赖关系。这些依赖关系在某些时候不可避免地会失败,例如超时、异常等。这种情况会导致服务链路的“雪崩效应”,即多个微服务同时出现故障,导致系统资源被迅速占满,最终引发系统崩溃。

雪崩效应的典型表现是:

  • 单一依赖故障导致多个服务被占用,系统资源耗尽
  • 延迟增加、队列积压、线程耗尽等
  • 级联故障,使得整个系统陷入停滞
  • Hystrix的功能

    Hystrix通过以下方式解决分布式系统的依赖问题:

  • 服务降级:在依赖不可用或超时时,自动切换到一个友好的兜底响应,避免长时间等待或异常抛出。
  • 服务熔断:类似保险丝,当依赖达到阈值时,直接拒绝访问,切换到兜底逻辑,减少系统资源消耗。
  • 监控:提供实时的调用监控,帮助开发人员快速发现问题。
  • Hystrix的核心概念

    服务降级

    服务降级是Hystrix的核心功能之一。当调用目标服务出现问题时,Hystrix会自动触发降级逻辑,返回一个预定义的友好响应。

    降级触发条件

    • 依赖超时
    • 依赖运行异常
    • 线程池资源耗尽

    降级优点

    • 避免长时间等待
    • 保持系统资源可用
    • 提供友好提示给调用方

    服务熔断

    熔断机制是Hystrix防雪崩效应的关键功能。当依赖服务在一定时间内出现多次失败或超时时,Hystrix会开启熔断机制,停止向该服务发起请求,切换到降级逻辑。

    熔断参数

    • circuitBreaker.requestVolumeThreshold:请求总数阀值,默认为20次
    • circuitBreaker.sleepWindowInMilliseconds:熔断后暂停的时间,默认为10秒
    • circuitBreaker.errorThresholdPercentage:错误率阀值,默认为50%

    服务限流

    Hystrix也支持服务限流功能,通过限制请求数量,防止高并发下系统资源被过度占用。常用于秒杀等高并发场景。

    Hystrix的案例

    构建Hystrix服务

    1. 创建服务提供者

    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix

    2. 配置服务发现

    eureka:  client:    register-with-eureka: true    fetch-registry: true    service-url:      defaultZone: http://eureka7001.com:7001/eureka

    3. 主启动类

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

    4. 业务逻辑

    @Servicepublic class PaymentService {    @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback")    public String paymentCircuitBreaker(@PathVariable("id") Integer id) {        if (id < 0) {            throw new RuntimeException("id 不能为负数");        }        String serialNumber = IdUtil.simpleUUID();        return Thread.currentThread().getName() + "\t" + "调用成功,流水号:" + serialNumber;    }    public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) {        return "id 不能为负数,请稍后再试, o(╥﹏╥)o id: " + id;    }}

    高并发测试

    在高并发场景下,单一依赖可能导致系统资源被迅速占满。通过Hystrix的熔断和降级功能,可以避免级联故障。

    测试压力

    使用JMeter进行压力测试,发送20000个并发请求:

    http://localhost:8001/payment/hystrix/timeout/31

    当服务端8001出现故障时,消费者80会自动触发服务降级,返回友好的提示,而不是长时间等待或报错。

    故障与解决方案

    故障现象

    在高并发下,单一依赖可能导致:

  • 服务端线程池被挤占
  • 客户端长时间等待
  • 级联故障
  • 解决方案

  • 超时处理:避免因超时导致服务器变慢
  • 错误处理:确保程序运行异常时有兜底
  • 服务降级:在依赖故障时自动切换到降级逻辑
  • 服务降级配置

    在服务提供者配置中,设置Hystrix命令属性:

    @HystrixCommand(    fallbackMethod = "paymentCircuitBreaker_fallback",    commandProperties = {        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")    })public String paymentCircuitBreaker(@PathVariable("id") Integer id) {    int timeNumber = 5;    try {        TimeUnit.SECONDS.sleep(timeNumber);    } catch (InterruptedException e) {        e.printStackTrace();    }    return "线程池:" + Thread.currentThread().getName() + " paymentCircuitBreaker,id:" + id + " 耗时(秒):" + timeNumber;}public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) {    return "我是消费者80,对方支付系统繁忙请10秒种后再试或者自己运行出错请检查自己,o(╥﹏╥)o";}

    服务监控

    通过Hystrix Dashboard,监控服务的依赖状态和性能指标。配置如下:

    server:  port: 9001feign:  hystrix:    enabled: true

    总结

    Hystrix通过服务降级、熔断和监控等功能,有效防止分布式系统中的依赖故障对整体系统造成连锁崩溃。在高并发场景下,Hystrix能够帮助系统快速恢复弹性,避免雪崩效应。

    转载地址:http://lntkz.baihongyu.com/

    你可能感兴趣的文章
    php之aop实践
    查看>>
    PHP之APC缓存详细介绍(转)
    查看>>
    php之memcache,memcached
    查看>>
    php之引用
    查看>>
    PHP之数组和函数的基本教程
    查看>>
    UVa 10465 - Homer Simpson
    查看>>
    php九九乘法表加粗,PHP九九乘法表
    查看>>
    PHP二维数组将重复键值合并重组成三维数组
    查看>>
    PHP二维数组转换为一维数组
    查看>>
    PHP二维数组重组
    查看>>
    PHP交换两个变量值
    查看>>
    php代码执行完整流程介绍
    查看>>
    PHP代码格式化工具phpcf常见问题解决方案
    查看>>
    PHP使用3DES算法加密解密字符串
    查看>>
    PHP使用curl multi要注意的问题:每次使用curl multi同时并发多少请求合适
    查看>>
    php使用memcached扩展的一个BUG
    查看>>
    PHP入门part1
    查看>>
    PHP兼容性检查,PHP升级语法检查(PHPCompatibility+PHP_CodeSniffer)
    查看>>
    PHP内核介绍及扩展开发指南—基础知识
    查看>>
    php内核基础说明
    查看>>