Hystrix简介&说明

Posted 痴乙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix简介&说明相关的知识,希望对你有一定的参考价值。

Hystrix 介绍

  • Hystrix 是用于处理延迟和容错的开源库

  • Hystrix 主要用于避免级联故障,提高系统弹性

  • Hystrix 解决了由于扇出导致的“雪崩效应”

  • Hystrix 的核心是“隔离”和“熔断机制”

扇出示意图:

Hystrix 主要作用

  • 服务隔离和服务熔断

  • 服务降级、限流和快速失败

  • 请求合并和请求缓存

  • 自带单体和集群监控

Hystrix 流程


  • 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秒后进入半开启状态


以上是关于Hystrix简介&说明的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构之spring cloud hystrix&hystrix dashboard

重学SpringCloud系列七之服务熔断降级hystrix

微服务熔断限流Hystrix之流聚合

Spring Cloud 学习 Hystrix & Hystrix Dashboard & Turbine

hystrix 配置项说明

0502-Hystrix保护应用-简介,使用,健康指标等