`
huangyongxing310
  • 浏览: 496431 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Hystrix

 
阅读更多
Hystrix


Hystrix的设计原则包括:
资源隔离
熔断器
命令模式



服务雪崩效应是一种因 服务提供者 的不可用导致 服务调用者 的不可用,并将不可用 逐渐放大 的过程


资源隔离
如果一个服务依懒于其他多个服务,服务的线程数是有限的(无限会引起内存、CPU出现问题),如果一个依懒的服务出现过慢或不能处理,那么服务的线程就会被阻塞,当所有的线程都被这个依懒的服务阻塞了,就会引起整个服务不能使用了,但如果每个依懒的服务只使有限的线程进行调用就不会出现全部线程被同一个依懒的服务阻塞,从而造成服务雪崩..



熔断器模式
Hystrix依赖隔离分为线程隔离和信号量隔离。

同一个HystrixCommand类的对象共享线程池,因此不同场景需要不同的HystrixCommand实现类
对象只能被调用一次,调用第二次会报错

熔断器模式定义了熔断器开关相互转换的逻辑:
1.当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
2.当熔断器开关打开时, 请求被禁止通过.
3.当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.

熔断器的开关能保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待. 并且熔断器能在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能.


命令模式
Hystrix使用命令模式(继承HystrixCommand类)来包裹具体的服务调用逻辑(run方法), 并在命令模式中添加了服务调用失败后的降级逻辑(getFallback).
同时我们在Command的构造方法中可以定义当前服务线程池和熔断器的相关参数.

在使用了Command模式构建了服务对象之后, 服务便拥有了熔断器和线程池的功能.

1.构建Hystrix的Command对象, 调用执行方法.
2.Hystrix检查当前服务的熔断器开关是否开启, 若开启, 则执行降级服务getFallback方法.
3.若熔断器开关关闭, 则Hystrix检查当前服务的线程池是否能接收新的请求, 若超过线程池已满, 则执行降级服务getFallback方法.
4.若线程池接受请求, 则Hystrix开始执行服务调用具体逻辑run方法.
5.若服务执行失败, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
6.若服务执行超时, 则执行降级服务getFallback方法, 并将执行结果上报Metrics更新服务健康状况.
7.若服务执行成功, 返回正常结果.
8.若服务降级方法getFallback执行成功, 则返回降级结果.
9.若服务降级方法getFallback执行失败, 则抛出异常.


Hystrix Metrics的实现
Hystrix的Metrics中保存了当前服务的健康状况, 包括服务调用总次数和服务调用失败次数等. 根据Metrics的计数, 熔断器从而能计算出当前服务的调用失败率, 用来和设定的阈值比较从而决定熔断器的状态切换逻辑. 因此Metrics的实现非常重要.



属性配置:
1 HystrixCommandKey
Hystrix使用单例模式存储HystrixCommand,熔断机制就是根据单实例上的调用情况统计实现的,所以每个HystrixCommand要有自己的名字,用于区分,同时用于依赖调用的隔离。HystrixCommandKey就是用于定义这个名字,如果没有定义这个名字,Hystrix会使用其类名作为其名字,可以使用HystrixCommandKey.Factory.asKey(String name)方法定义一个名称。
2 HystrixThreadPoolKey
HystrixThreadPoolKey是HystrixCommand所在的线程池,如果该参数不设置则使用HystrixCommandGroupKey作为HystrixThreadPoolKey,这种情况下同一个HystrixCommandGroupKey下的依赖调用共用同一个线程池内,如果不想共用同一个线程池,则需要设置该参数。可以使用HystrixThreadPoolKey.Factory.asKey(String name)方法设置。
3 HystrixCommandGroupKey
Hystrix需要对HystrixCommand进行分组,便于统计、管理,所以需要一个分组名称,HystrixCommandGroupKey就是用于定义分组名称,可以使用HystrixCommandGroupKey.Factory.asKey(String name)方法定义一个分组名。每个HystrixCommand必须要配置一个分组名,一个是用于分组,还有如果没有配置HystrixThreadPoolKey,这个分组名将会用于线程池名。
4 HystrixThreadPoolProperties
从名称上可以看出这是线程池的属性配置,可以通过它设置核心线程数大小、最大线程数、任务队列大小等,当然它也又一些默认的配置参数。
5 HystrixCommandProperties
这个就是HystrixCommand的属性配置,它可以设置熔断器是否可用、熔断器熔断的错误百分比、依赖调用超时时间等,它有一些默认的配置参数,如熔断器熔断的错误百分比默认值是50%、依赖调用超时时间默认值是1000毫秒。


如果命令A的线程池潜在并且饱和,它就不应该阻止命令B访问资源,因为他们互相命中不同的后端资源。因此,我们在逻辑上希望这些命令组合在一起,但希望它们以不同的方式隔离,并使用 HystrixThreadPoolKey 来给它们每个线程池提供一个不同的线程池。
https://blog.csdn.net/an88411980/article/details/80552969(一起学习Hystrix--Hystrix命令名称、分组、线程池)


就是说组名字一样,如果HystrixThreadPoolKey也一样(不设置就是HystrixCommandGroupKey),那么线程池就是同一个,如果HystrixThreadPoolKey不同就是不同的线程池


可以在拦截器里实现接口的Hystrix,从而实现客户端的限流处理



https://segmentfault.com/a/1190000005988895(熔断器 Hystrix 的原理与使用)
https://segmentfault.com/a/1190000014272568(Hystrix相关属性说明)
https://www.jianshu.com/p/f49b5628e8e7(Hystrix实现自动降级与依赖隔离)
https://blog.csdn.net/xiaoyi52/article/details/82844370(Hystrix-介绍与使用)
https://www.cnblogs.com/yepei/p/7169127.html(Hystrix使用详解)

https://blog.csdn.net/chenxyz707/article/details/80913725(Hystrix实现原理)











分享到:
评论

相关推荐

    hystrix-dashboar1.5.12

    《Hystrix Dashboard 1.5.12:构建弹性微服务的重要工具》 Hystrix Dashboard 是 Netflix 开源的一款强大的监控工具,主要用于监控微服务架构中的 Hystrix 库的性能和健康状况。在标题提到的 "hystrix-dashboar...

    spring-cloud-netflix-hystrix应用

    《深入理解Spring Cloud Netflix Hystrix:构建弹性微服务架构》 在当今的软件开发领域,微服务架构已经成为主流,而Spring Cloud作为Java生态中的微服务解决方案,深受开发者喜爱。其中,Spring Cloud Netflix ...

    hystrix公司内部分享ppt

    Hystrix是一个由Netflix开源的延迟和容错库,旨在隔离远程系统、服务和第三方库的访问点,停止级联失败,提供后备选项,并实现优雅降级。它在高并发的分布式系统中尤为重要,可以在复杂的系统中保证服务调用的稳定性...

    spring cloud hystrix原理介绍及使用

    Spring Cloud Hystrix是一个由Netflix开源的Java框架,用于在分布式系统中提供延迟和容错功能,特别适用于对微服务架构中的远程过程调用(RPC)进行控制。其核心目标是通过添加一个延迟容忍层来隔离各个微服务之间的...

    spring cloud eureka zuul ribbon hystrix feign config 示例

    在给定的标题和描述中,我们看到了几个关键组件:Eureka、Zuul、Ribbon、Hystrix 和 Feign,这些都是Spring Cloud生态中的重要组成部分。下面将详细阐述这些组件及其在实际应用中的作用。 1. **Eureka**:它是...

    15.Spring Cloud中使用Hystrix

    在Spring Cloud生态系统中,Hystrix是一个至关重要的组件,它主要负责实现服务容错和断路器模式,以增强系统的稳定性和健壮性。本文将深入探讨如何在Spring Cloud项目中集成并使用Hystrix,以及如何将其与Feign...

    spring cloud hystrix &&dashboard源码解读

    ### Spring Cloud Hystrix & Dashboard 源码解读 #### 一、加载、初始化概要 ##### 1.1 @EnableCircuitBreaker 的生效 `@EnableCircuitBreaker` 注解是 Spring Cloud Hystrix 提供的一个关键注解,用于启动熔断器...

    springcloud hystrix 断路由

    在分布式系统中,服务间的调用异常处理是至关重要的,Spring Cloud Hystrix 就是为了解决这一问题而设计的。Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离服务间的调用,防止因某个服务的不稳定导致整个系统...

    spring cloud gateway配置Hystrix 熔断、限流、后台调用注意点.pdf

    Spring Cloud Gateway 配置 Hystrix 熔断、限流、后台调用注意点 Spring Cloud Gateway 是一种基于 Spring Boot 框架的 API 网关解决方案,提供了许多实用的功能来管理和保护微服务架构中的 API。其中,Hystrix ...

    Hystrix监控异常处理集.zip

    《Hystrix监控异常处理全解析》 在分布式系统中,Spring Cloud Hystrix是一款非常重要的断路器框架,它能够有效地防止服务雪崩,保护系统稳定。然而,在实际使用过程中,我们可能会遇到Hystrix监控台报错的情况。...

    断路器hystrix实现.rar

    2. **创建Hystrix命令**:Hystrix的核心是命令(Command)模式,我们需要为每个服务调用创建一个HystrixCommand子类。在命令类中,定义执行业务逻辑的`run()`方法和备用的`fallback()`方法。`run()`方法是正常的业务...

    Hystrix源码_可以跑起来

    Hystrix是一款由Netflix开发的开源库,主要目标是实现服务间的容错管理,通过提供断路器模式来防止服务雪崩,确保系统的稳定性和弹性。在这个“Hystrix源码_可以跑起来”的主题中,我们将深入探讨Hystrix的工作原理...

    hystrix-dashboard.zip

    【标题】"hystrix-dashboard.zip" 是一个包含示例代码的压缩包,与Spring Cloud相关的Hystrix Dashboard集成有关。Hystrix Dashboard是Netflix开源的一款监控工具,它能够帮助我们实时监控微服务架构中的断路器状态...

    Hystrix 熔断、降级实例

    《Hystrix熔断与降级实战解析》 在分布式系统中,服务间的依赖性使得一个服务的问题可能会引发连锁反应,导致整个系统的瘫痪。为了解决这个问题,Netflix开源了Hystrix,一个用于处理服务间调用失败、延迟和过载的...

    14.Netflix之Hystrix详细分析

    Hystrix是Netflix开源的一个用于构建弹性微服务架构的库,它主要目标是提供容错机制,防止服务雪崩,确保系统的稳定性和高可用性。在本篇文章中,我们将深入剖析Hystrix的工作原理,理解其执行流程,并探讨其中的...

    Hystrix降级和熔断

    ### Hystrix降级与熔断机制详解 #### 一、引言 Hystrix作为Netflix开源的一个容错管理库,旨在为复杂分布式系统中的延迟和故障提供更强的容错能力。它通过隔离并控制对远程系统、服务及第三方库的访问点,有效地...

    Hystrix-dashboard+turbine-web+说明文档

    在微服务架构中,Hystrix 和 Turbine 是两个非常重要的工具,它们为分布式系统提供了弹性和监控能力。本文将详细介绍这两个组件以及如何通过 `Hystrix-dashboard` 和 `turbine-web` 来实现有效的监控和聚合监控。 *...

    Hystrix组件学习笔记及debug调试截图

    《深入理解Hystrix:资源隔离与跨线程数据传递》 Hystrix,作为Netflix开源的一款容错管理工具,其主要目标是提供熔断、降级和隔离机制,以防止服务雪崩,保证系统的稳定性和高可用性。本文将重点讲解Hystrix中的...

    spring-cloud-netflix-hystrix原理.rar

    《Spring Cloud Netflix Hystrix:理解其核心原理与应用》 Spring Cloud Netflix Hystrix 是一个强大的熔断器和断路器库,旨在帮助开发者构建弹性、容错的服务架构,以应对分布式系统中的延迟和故障。Hystrix 的...

    Hystrix Dashboard的使用-代码部分.zip

    在微服务架构中,Hystrix Dashboard 和 Turbine 是两个重要的工具,用于监控服务的健康状态和性能。本文将深入探讨这两个组件,并结合提供的源代码,解析它们在实际项目中的应用。 **Hystrix Dashboard** Hystrix ...

Global site tag (gtag.js) - Google Analytics