Hystrix简介&说明

- 日理万妓 2023-07-10 15:58 80阅读 0赞

文章目录

  • Hystrix简介&说明
    • Hystrix 介绍
    • Hystrix 主要作用
    • Hystrix 流程
    • Hystrix 两种命令模式
    • Hystrix 配置
      • GroupKey
      • CommandKey
    • Hystrix 请求特性
      • 请求缓存
      • 请求合并
    • Hystrix 隔离
      • Hystrix 隔离简介
        • 线程隔离
        • 信号量隔离
      • ThreadPoolKey
    • Hystrix 降级处理机制
      • 降级介绍
      • 降级触发原则
      • 快速失败
    • Hystrix 熔断机制
      • 熔断器介绍
      • 熔断器状态

Hystrix简介&说明

Hystrix 介绍

  • Hystrix 是用于处理延迟和容错的开源库
  • Hystrix 主要用于避免级联故障,提高系统弹性
  • Hystrix 解决了由于扇出导致的“雪崩效应”
  • Hystrix 的核心是“隔离”和“熔断机制”

扇出示意图:

file

Hystrix 主要作用

  • 服务隔离和服务熔断
  • 服务降级、限流和快速失败
  • 请求合并和请求缓存
  • 自带单体和集群监控

Hystrix 流程

file

  • 1、构建一个 HystrixCommand 或者 HystrixObservableCommand 对象
  • 2、执行命令

    有4种方式可以执行一个Hystrix命令。

    • execute() —该方法是阻塞的,从依赖请求中接收到单个响应(或者出错时抛出异常)。
    • queue() —从依赖请求中返回一个包含单个响应的Future对象。
    • observe()—订阅一个从依赖请求中返回的代表响应的Observable对象。
    • toObservable()—返回一个Observable对象,只有当你订阅它时,它才会执行Hystrix命令并发射响应。
  • 3、响应是否被缓存
  • 4、回路器是否打开
  • 5、线程池、队列、信号量是否已满
  • 6、HystrixObservableCommand.construct() 或者 HystrixCommand.run()
  • 7、计算回路指标[Circuit Health](业务执行成功、失败、拒绝和超时)
  • 8、获取FallBack

Hystrix 两种命令模式

  • HystrixCommand 或者 HystrixObservableCommand
  • Command会以隔离的形式完成 run() 方法的调用
  • ObservableCommand使用当前线程进行调用

Hystrix 配置

GroupKey

  • Hystrix 中 GroupKey 是唯一必填项
  • GroupKey 可以作为分组监控和报警的作用
  • GroupKey 将作为线程池的默认名称

CommandKey

  • Hystrix 可以不填写 CommandKey
  • 默认 Hystrix 会通过反射类名命名 CommandKey
  • 在 Setting 中加入 andCommandKey 进行命名

Hystrix 请求特性

请求缓存

  • Hystrix 支持将请求结果进行本地缓存
  • 通过实现 getCacheKey 方法来判断是否取出缓存
  • 请求缓存要求请求必须在同一个上下文
  • 可以通过 RequestCacheEnabled 开启请求缓存(默认开启)

请求合并

  • Hystrix 支持将多个请求合并成一次其你去
  • Hystrix 请求合并要求两次请求必须足够 “近”
  • 请求合并分为局部合并和全局合并两种
  • Collapser 可以设置相关参数

Hystrix 隔离

Hystrix 隔离简介

  • Hystrix 提供了信号量和线程两种隔离手段
  • 线程隔离会在单独的线程中执行业务逻辑
  • 信号量隔离在调用线程上执行
  • 官方推荐优先线程隔离

线程隔离

  • 应用自身完全受保护,不会受其他依赖影响
  • 有效降低接入新服务的风险
  • 依赖服务出现问题,应用自身可以快速反应问题
  • 可以通过实时刷新动态属性减少依赖问题影响

信号量隔离

  • 信号量隔离是轻量级的隔离术
  • 无网络开销的情况推荐使用信号量隔离
  • 信号量是通过计数器和请求线程比对进行限流

ThreadPoolKey

  • Hystrix 可以不填写 ThreadPoolKey
  • 默认Hystrix会使用GroupKey 命名线程池
  • 在Setting中加入andThreadOPoolKey 进行命名

Hystrix 降级处理机制

降级介绍

  • 降级是一种无奈的“选择”,俗称“备胎” (^)
  • Command 降级需要实现fallback方法
  • ObservableCommand 降级实现 resumeWithFallback方法

降级触发原则

  • HystrixBadRequestException 以外的异常
  • 运行超时或熔断器处于开启状态
  • 线程池或信号量已满

快速失败

  • Hystrix 提供了快速失败的机制
  • 当不实现fallback 方法时会将异常抛出

Hystrix 熔断机制

熔断器介绍

  • 熔断器是一种开关,用来控制流量是否执行业务逻辑
  • 熔断器核心指标

    • 快照时间窗
    • 请求总数阈值
    • 错误百分比阈值

熔断器状态

  • 熔断器开启: 所有请求都会进入fallback方法
  • 熔断器半开启: 间歇性让请求触发run方法
  • 熔断器关闭: 正常处理业务请求
  • 默认情况下熔断器开启5秒后进入半开启状态

end

如有问题,请留言或者发送邮件,感谢您的阅读

发表评论

表情:
评论列表 (有 0 条评论,80人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hystrix的配置说明

    在我们的日常开发中,有些时候需要和第三方系统进行对接操作,或者调用其他系统的 api 接口,但是我们不能保证这些第三方系统的接口一定是稳定的,当系统中产生大量的流量来访问这些第