目录
2.1、Hystrix 命令(HystrixCommand)
2.2、Hystrix 线程池(HystrixThreadPool)
2.3、Hystrix 熔断器(HystrixCircuitBreaker)
3.3.1、在应用程序中添加 Hystrix Dashboard 依赖包
3.3.3、在主类中启动 Hystrix Dashboard:
一、什么是 Hystrix?
官网地址:https://github.com/Netflix/Hystrix.git
我的dashboard地址:https://github.com/woyouyitouchenfeijv/Hystrix.git
1.1、Hystrix 的背景和目的
当下的微服务架构中,一个重要的问题就是服务之间的调用会产生大量的延迟和错误,从而影响整个应用程序的性能和可靠性。为了解决这个问题,Netflix公司开发了一个名为Hystrix的库,它提供了一种实现容错的机制,可以在分布式系统中帮助处理不可避免的延迟和故障。Hystrix通过使用隔离技术、断路器模式、资源池等技术,为分布式系统提供了高可用、高性能的解决方案。
1.2、Hystrix 的特点和优势
Hystrix 是一个开源的容错框架,主要应用于分布式系统中的服务熔断、服务降级、线程池隔离等方面。下面是 Hystrix 的特点和优势:
服务熔断:Hystrix 可以根据请求的失败率和请求的总数来自动熔断不可用的服务,防止服务雪崩。
服务降级:Hystrix 可以在服务不可用的情况下,通过 fallback 方法返回一个备选结果,保证系统的可用性。
线程池隔离:Hystrix 为每个服务使用一个独立的线程池来处理请求,防止因一个服务的超时或错误而影响整个应用程序的稳定性。
实时监控:Hystrix 提供了实时的监控和报告功能,可以方便地监控服务的调用情况和失败情况。
自适应控制:Hystrix 可以自适应地控制服务的流量和并发数,防止系统的负载过高。
可插拔性:Hystrix 可以与其他开源框架和技术集成,比如 Spring Cloud、Netflix Eureka 等,提供更丰富的功能和更高的性能。
二、Hystrix 的基本概念
2.1、Hystrix 命令(HystrixCommand)
它提供了丰富的服务调用控制和管理功能,使得我们可以更加方便地实现服务调用的可靠性和稳定性;是Hystrix提供的一个用于封装服务调用逻辑的类。它的主要作用是将一个服务调用请求包装成一个HystrixCommand对象,并提供以下特性:
超时控制:HystrixCommand允许设置超时时间,当服务调用时间超过指定时间时,Hystrix会中断服务调用并返回fallback响应。
熔断控制:HystrixCommand可以对服务调用进行熔断控制,当服务调用失败率超过指定阈值时,Hystrix会开启熔断保护,将服务调用请求转发到fallback逻辑,并暂时停止服务调用请求。
降级控制:HystrixCommand提供了fallback逻辑,当服务调用失败或超时时,Hystrix会自动调用fallback逻辑返回响应,避免将失败或超时的服务调用请求转发到下游服务,导致雪崩效应。
统计信息:HystrixCommand可以统计服务调用请求的成功率、响应时间、错误率等信息,方便开发人员分析服务调用请求的性能和稳定性。
请求缓存:HystrixCommand可以对服务调用请求进行缓存,避免重复的服务调用请求,提高系统性能和响应速度。
2.2、Hystrix 线程池(HystrixThreadPool)
它为每个 Hystrix 命令实例提供了一个独立的线程池来执行命令。在 Hystrix 中,命令执行的线程和命令调用的线程是分离的,因此 Hystrix 线程池的作用是为命令执行提供一个隔离的线程池。
Hystrix 线程池的配置可以通过 HystrixThreadPoolProperties 进行配置,其中包括线程池大小、队列大小、线程存活时间等参数。线程池大小决定了同时能够执行的最大命令数,如果达到了最大数目,则后续的命令将被拒绝。队列大小则是指当线程池中的所有线程都在执行命令时,新的命令将会被放入一个队列中等待执行。如果队列已满,则后续的命令将被拒绝。线程存活时间则决定了空闲线程的最长存活时间。
使用 Hystrix 线程池的好处是可以对命令进行更细粒度的隔离和控制,避免了线程池耗尽和资源争用的问题。同时,通过对线程池大小和队列大小的调整,可以在保证服务质量的前提下,提高系统的吞吐量和性能。
2.3、Hystrix 熔断器(HystrixCircuitBreaker)
用于实现熔断器模式,以保护服务调用方和被调用方之间的通信。熔断器是一种防止应用程序连锁故障的机制,当一定时间内发生某个错误或异常达到一定的阈值时,熔断器会自动跳闸,直接拒绝后续请求,并在一段时间内直接返回一个预设的错误响应,避免大量无效请求对服务的影响。
HystrixCircuitBreaker 可以监控 Hystrix 命令的执行情况,并根据一定的策略判断是否需要打开熔断器。当熔断器打开时,Hystrix 会短路请求,不再发起调用,直接返回预设的错误响应。当熔断器关闭时,Hystrix 会恢复正常调用流程。
HystrixCircuitBreaker 的实现依赖于 HystrixCommand 和 HystrixThreadPool,它会根据这两个组件的执行情况来动态地调整熔断器的状态。当 HystrixCommand 执行失败的次数超过阈值时,熔断器就会打开;当 HystrixCommand 执行成功的次数超过阈值时,熔断器就会关闭。
HystrixCircuitBreaker 提供了多种配置参数,可以用于自定义熔断器的行为。例如,我们可以设置熔断器打开时的休眠时间、错误率阈值、窗口期等等。这些参数可以通过 HystrixCommand 和 HystrixThreadPool 的注解进行配置,也可以通过配置文件进行配置。