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
相关推荐
Spring Cloud集成Hystrix Spring Cloud Config Spring Cloud Sleuth https://spring.io/projects/spring-cloud-sleuth#overview 非Spring Boot Web项目 注册节点到Eureka Server并提供服务 ...
43.硅谷学习_SpringCloud_如何查看hystrixDashboard 44.硅谷学习_SpringCloud_Zuul是什么 45.硅谷学习_SpringCloud_Zuul路由基本配置 46.硅谷学习_SpringCloud_Zuul路由访问映射规则 47.硅谷学习_SpringCloud_...
FCat是基于Angular4+SpringCloud的企业级基础功能框架(户权限管理、区域管理、GIS地图、......),其核心设计目标是分离前后端、开发快速、学习简单、功能强大、不重复造轮子,其目标是帮助企业搭建一套基础功能框架...
一、Hystrix Dashboard简介 在微服务架构中为例保证程序的可用性,...本文的的来源于第一篇文章的栗子,在它的基础上进行改造。 三、开始改造service-hi 在pom的工程文件引入相应的依赖: org.springframework.cloud
基于SpringBoot2.0以上版本作为基础框架,搭建SpringCloud微服务脚手架,学习SpringCloud微服务整合nginx、zuul gateway、Hystrix、Robbin、eureka、zipkin、stream、feign、config、redis、fastdfs、elk等组件,...
基于Angular4+SpringCloud的企业级基础功能框架(户权限管理、区域管理、GIS地图、......),其核心设计目标是分离前后端、开发快速、学习简单、功能强大、不重复造轮子,其目标是帮助企业搭建一套基础功能框架;...
服务容错:Spring Cloud Hystrix 服务调用:Spring Cloud OpenFeign 文档管理:Swagger2 服务监控:Spring Boot Admin 日志管理:ES + Kibana、Zipkin ## 项目备注 1、该资源内项目代码都经过测试运行成功,...
系统后端接口部分,使用目前流行的SpringBoot+SpringCloud进行微服务架构,使用Feign、Gateway、Hystrix,以及阿里巴巴的Nacos等组件搭建了项目的基础环境。 项目中还使用MyBatisPlus进行持久层的操作,使用了OAuth2...
java毕业设计 基于SpringCloud+Vue微服务前后端分离的阅读类APP,涉及 SpringCloud-Gateway、Nacos、OpenFeign、Hystrix、Jwt、ElasticSearch 等技术前后端分离的应用源码+详细文档+全部资料(优秀项目) ...
Spring For All社区:Spring Boot基础教程:Spring Cloud基础教程:公益调试Eureka:优惠云服务推荐本项目教程因做了版本更新,所以对目录结构做了调整,根目录下的各个章节为了博文链接兼容暂时保留。教程列表...
FCat是基于Angular4+SpringCloud的企业级基础功能框架(户权限管理、区域管理、GIS地图、......),其核心设计目标是分离前后端、开发快速、学习简单、功能强大、不重复造轮子,其目标是帮助企业搭建一套基础功能框架...
该系统涉及 分销商、供应商、平台管理员等多种分销角色,技术采用spring-cloud 2.0微服务化框架、eureka注册中心、ribbon负载均衡、hystrix限流降级、spring security权限控制、redis缓存 elasticsearch索引等主流...
本门课程围绕电商项目大觅网的业务场景,基于微服务原则设计电商项目,使用多种诸如Eureka、Feign、Hystrix、Ribbon、Zuul、Config等技术,另外基于虚拟化技术Docker+Jenkins实现程序自动发布、基于Mycat实现第三方...
# ZEN-SCAFFOLD ## 概述 ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块...
Spring Boot基础配置 Spring Boot中使用MyBatis Spring Boot中使用JdbcTemplate Spring Boot MyBatis配置Druid多数据源 Spring Boot JdbcTemplate配置Druid多数据源 Spring Boot AOP记录用户操作日志 Spring Boot中...
适合人群:具备一定编程基础,工作1-3年的研发人员,或者已学习过基本的Java及Spring Boot的学生 能学到什么:1. 快速掌握Spring Cloud的开发;2.了解Spring的面试中常见问题的真实应用 阅读建议:此资源是视频...
它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有...
微服务一般分为无业务基础服务(如全局配置、ID自增器、短链接服务、文件存储服务、身份验证、邮件短信平台、语言回拨...)和业务型基础服务(如:用户中心、账户中心、支付中心、信审系统、信息抓取系统、消息中心...
FCat是基于Angular4+SpringCloud的企业级基础功能框架(户权限管理、区域管理、GIS地图、......),其核心设计目标是分离前后端、开发快速、学习简单、功能强大、不重复造轮子,其目标是帮助企业搭建一套基础功能框架...