Hystrix主要通过隔离服务之间的访问点,阻止他们之间的级联故障以及提供回退选项来实现容错.
Hystrix的容错方法主要:
1 资源隔离
2 熔断
3 降级
1 资源隔离主要指对主线程的隔离,Hystrix提供了2种线程隔离的方式:线程池 和 信号量
线程池隔离
Hystrix通过命令的形式将发送请求的对象和执行请求的对象进行隔离,将不同命令的业务请求封装成对应的命令请求。并且为每个command配置一个线程池,当创建一个command时,根据一个配置创建一个线程池,并放入到ConcurrentHashMap,后续相同类型的请求创建command时,将会重用已创建的线程池。
通过将发送请求线程与执行请求的线程分离,可有效防止发生级联故障。当线程池或请求队列饱和时,Hystrix将拒绝服务,使得请求线程可以快速失败,从而避免依赖问题扩散。
优点:
- 保护应用程序以免受来自依赖故障的影响,指定依赖线程池饱和不会影响应用程序的其余部分。
- 当引入新客户端lib时,即使发生问题,也是在本lib中,并不会影响到其他内容。
- 当依赖从故障恢复正常时,应用程序会立即恢复正常的性能。
- 当应用程序一些配置参数错误时,线程池的运行状况会很快检测到这一点(通过增加错误,延迟,超时,拒绝等),同时可以通过动态属性进行实时纠正错误的参数配置。
- 如果服务的性能有变化,需要实时调整,比如增加或者减少超时时间,更改重试次数,可以通过线程池指标动态属性修改,而且不会影响到其他调用请求。
- 除了隔离优势外,hystrix拥有专门的线程池可提供内置的并发功能,使得可以在同步调用之上构建异步门面(外观模式),为异步编程提供了支持(Hystrix引入了Rxjava异步框架)
-
注意:尽管线程池提供了线程隔离,我们的客户端底层代码也必须要有超时设置或响应线程中断,不能无限制的阻塞以致线程池一直饱和。
缺点:
线程池的主要缺点是增加了计算开销。每个命令的执行都在单独的线程完成,增加了排队、调度和上下文切换的开销。因此,要使用Hystrix,就必须接受它带来的开销,以换取它所提供的好处。
通常情况下,线程池引入的开销足够小,不会有重大的成本或性能影响。但对于一些访问延迟极低的服务,如只依赖内存缓存,线程池引入的开销就比较明显了,这时候使用线程池隔离技术就不适合了,我们需要考虑更轻量级的方式,如信号量隔离
线程隔离- 信号量
上面提到了线程池隔离的缺点,当依赖延迟极低的服务时,线程池隔离技术引入的开销超过了它所带来的好处。
https://blog.csdn.net/loushuiyifan/article/details/82702522
相关推荐
在微服务架构中,Hystrix Dashboard 和 ...通过详细研究这些代码,我们可以学习到如何在微服务架构中有效地使用 Hystrix Dashboard 和 Turbine,以及如何与其他组件如 Eureka 集成,以实现高效、稳定的系统监控。
2. **Hystrix的集成**:在Feign的基础上,通过引入Hystrix,可以为每个Feign客户端方法添加Hystrix命令。当服务调用超时时,Hystrix会执行预先配置的回退逻辑,防止故障扩散。这通常通过在Feign接口方法上添加`@...
通过学习和实践这个Demo,你将掌握如何利用Hystrix实现服务的熔断和降级,提升系统的容错能力,为构建高可用的分布式系统打下坚实基础。在实践中不断优化配置,平衡服务性能和容错性,是每个开发者都需要掌握的关键...
通过深入学习和实践"learnHystrix"项目,开发者不仅能掌握Hystrix的基本用法,还能了解如何在复杂的微服务环境中有效地使用Hystrix,为构建高可用、高性能的分布式系统打下坚实的基础。在实际工作中,结合Hystrix与...
本项目提供了Eureka注册中心、服务提供方和服务消费方的原型代码,旨在帮助学习者深入理解这两个组件的工作原理及其在实际应用中的用法。 Eureka是Netflix开发的服务发现框架,它作为一个分布式服务注册与发现的...
spring高手之路23:Spring框架的学习路径和关键知识点,可以帮助你在Spring方面成为高手: 学习路径 基础知识 Java基础 ...Spring Cloud组件(Eureka、Feign、Hystrix、Zuul/Gateway) API Gateway
这个项目下的 "spring-cloud-study.zip" 文件,看起来是一个学习资源,涵盖了 Spring Cloud 的几个关键组件的实战教程,包括服务注册与发现、Feign 客户端和服务间调用以及 Hystrix 断路器的使用。 首先,让我们...
本篇文章将围绕"阶段性学习-谷粒商城-基础篇"这一主题,深入探讨在SpringCloud框架下,如何构建一个完整的谷粒商城项目,旨在为初学者提供详实的学习路径和实践指导。 一、SpringCloud概述 SpringCloud是基于Spring...
Spring Cloud集成Hystrix Spring Cloud Config Spring Cloud Sleuth https://spring.io/projects/spring-cloud-sleuth#overview 非Spring Boot Web项目 注册节点到Eureka Server并提供服务 ...
5. **熔断降级**:当断路器打开时,Hystrix会执行预先定义的降级策略,如返回默认值或者缓存数据,保证系统仍能提供基础服务。 三、Hystrix核心组件 1. **HystrixCommand**:处理同步操作的命令对象,包含execute()...
在基础部分,学习者将了解到如何设置SpringCloud环境,创建并配置微服务,如Eureka服务发现、Zuul边缘服务、Hystrix断路器等。此外,还会涉及SpringBoot的使用,它是构建微服务的基础,提供快速开发单个可执行jar的...
43.硅谷学习_SpringCloud_如何查看hystrixDashboard 44.硅谷学习_SpringCloud_Zuul是什么 45.硅谷学习_SpringCloud_Zuul路由基本配置 46.硅谷学习_SpringCloud_Zuul路由访问映射规则 47.硅谷学习_SpringCloud_...
本Java学习路线图旨在帮助Java学习者快速掌握Java基础知识点、数据库知识点、Web前端技术、JavaWeb基础、Java高级框架设计模式、分布式系统架构和工程化管理等知识点,助力Java学习者快速提高Java开发能力。
在Spring Cloud的学习过程中,Java基础知识是必不可少的一部分。Java作为Spring Cloud的基础语言,其核心概念和技术对理解Spring Cloud的实现机制至关重要。以下将详细介绍Java在Spring Cloud中的应用以及相关的知识...
综合以上信息,这份学习笔记可能涉及SpringCloud的基础知识,如服务发现(Consul或Eureka)、配置管理(Config Server)、服务调用(Feign)、服务容错(Hystrix)以及监控(Hystrix Dashboard)。每个项目都可能...
微服务基础学习项目是针对初学者设计的一套教程,涵盖了多个关键的Spring Cloud组件,旨在帮助大家快速理解和掌握微服务架构中的核心概念和技术。在这个项目中,你会接触到Eureka、ConfigServer、Zuul、Sleuth、...
本基础教程旨在帮助初学者全面理解并掌握SpringCloud的核心概念和技术,通过实践源码与配套文档,深入学习其工作原理和应用方式。 首先,我们需要了解SpringCloud的基础架构,它由多个子项目组成,如Eureka(服务...
本资料包包含了Java基础、高级部分以及Spring、Spring Boot和Spring Cloud的学习资源,旨在帮助开发者从入门到精通,掌握整个Java生态的核心技术。 Java基础部分: Java基础是所有Java开发者的起点,它涵盖了Java...
学习SpringCloud需要理解微服务架构,掌握Eureka、Zuul、Hystrix、Feign等组件的用法。 4. **实战项目**:这些资源可能包含多个实际的Java项目,如点餐系统、电商项目等,通过实践可以提升开发者解决实际问题的能力...
在这个名为 "mvcandhystrix" 的项目中,开发者可能在 MVC 框架(如 Spring MVC)的基础上,集成 Hystrix 来增强微服务的健壮性。文件列表中的 "mvcandhystrix-master" 可能包含源码、配置文件和其他资源,用于演示...