您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关什么是Hystrix,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Hystrix协调分布式系统中各个服务高可用的框架,SpringCloud体系重要的一员。Hystrix主要解决了服务雪崩问题、服务监控问题等。
主要在于预防依赖服务崩溃影响到自己服务资源被耗光,使用隔离的方式限制调用依赖服务所能使用的最大线程资源。如果一个服务崩溃,不控制好资源隔离的话,会引发服务雪崩,众多上游服务集体崩溃。
另外在并发量很大的情况下,也可以降低对依赖服务请求的流量,避免依赖服务过度负载。
Hystrix将对外部服务的调用和一系列处理封装为一个Commond对象,具体分为HystrixCommand(直接调用命令),HystrixObservableCommand(观察者订阅命令),后者可以注册回调事件。两者都可以以异步或同步的方式调用(异步返回Future,后续可以调用get阻塞获取结果)。
Commond对象对资源隔离进行隔离有两种方式,一种是使用线程池(常用),第二种是使用信号量。两者都是对Commond被调用的线程并发数量进行限制,区别在于信号量只是对command被调用并发许可的一个线程,不能记录超时信息等等。
选择Commond资源隔离的策略,线程池(常用)或信号量
指定command名称、组。名称默认为类名(一个command通常对应一个依赖服务的接口调用),group下的所有command默认情况下共用一个线程池或用一个信号量隔离(group一般对应一个依赖服务)。
指定command线程池,HystrixThreadPool的key默认为组名称,也可以手动指定使用的HystrixThreadPool。
指定线程池核心线程数大小,默认为10。
指定线程池队列长度,默认-1 无界队列,设置值之后超过则拒绝请求。
指定线程池拒绝阀值,默认5,超过就拒绝请求。
信号量隔离下可设置最大并发访问量,默认10。
在一个web调用主线程中,为该主线程调用服务的command建立缓存,使得调用依赖服务相同参数的情况下直接从内存中获取结果,由于本人认为其作用不是很大,所以就不多介绍了,主要是在拦截器中初始化HytrixRequestContext(这个缓存数据目测应该是在线程本地变量里面),然后Command中实现getCacheKey方法返回cache的key,当key一样时,直接尝试获取之前调用后返回相同key的结果。
通过Command实现getFallBack方法(HystrixCommand)或resumeWithFallback方法(HystrixObservableCommand),实现降级逻辑,本地返回降级之后的结果。
线程池或信号量拒绝
调用超时
执行报错
断路器被开启
取本地缓存中较老的数据
返回默认值
调用超时达到一定比例
执行报错达到一定比例
线程池或信号量拒绝达到一定比例
一定时间之后会切换到半开状态,让1个请求通过,看是否能够正常返回
如果半开状态允许通过的请求成功了,就关闭断路器
是否打开断路器(默认打开)
断路器时间滚动窗中最小的请求数(默认20)
多少异常(包括超时、报错、拒绝)比例(默认50%)打开断路器
多长时间进入半开状态(默认5000毫秒)
是否强制打开断路器
是否强制关闭断路器
超时时长配置(默认1000毫秒)
是否打开超时机制(默认打开)
关于什么是Hystrix就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。