开发者社区> 问答> 正文

关于Hystrix超时设置粒度的问题

遇到一个问题
1.定义一个fegin,里面提供了方法A和方法B。
2.在并发的时候,方法A调动超时了,然后触发了熔断;
3.这时候调用方法B也会出现同样的问题,但实际上方法B是可用的,而在微服务中应该是认为的是整个fegin的服务是暂时不可用了(fegin定义都是同一个服务,同一个服务提供了多个接口。服务中其中一个接口不可用或者超时的时候,就认为整个这个fegin服务不可用了。),是hystrix起到了作用。
4.这种场景下要怎么隔离A和B两个方法呢? Hystrix会报告成功、失败、拒绝和超时的指标给回路器,回路器包含了一系列的滑动窗口数据,并通过该数据进行统计。它使用这些统计数据来决定回路器是否应该熔断,如果需要熔断,将在一定的时间内不在请求依赖[短路请求] 也就相当于是说,后续的其他接口服务就直接走fallback了。回路器打开和关闭有如下几种情况:
假设回路中的请求满足了一定的阈值
(HystrixCommandProperties.circuitBreakerRequestVolumeThreshold())
假设错误发生的百分比超过了设定的错误发生的阈值HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()
回路器状态由CLOSE变换成OPEN
如果回路器打开,所有的请求都会被回路器所熔断。 一定时间之后
HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds(),下一个的请求会被通过(处于半打开状态),如果该请求执行失败,回路器会在睡眠窗口期间返回OPEN,如果请求成功,回路器会被置为关闭状态,重新开启1步骤的逻辑。
来源:云原生后端社区
https://www.yuque.com/server_mind/answer

展开
收起
Atom 2020-04-25 15:54:13 1278 0
1 条回答
写回答
取消 提交回答
  • 你得解决造成问题的根本原因,和hystrix没关系
    以API维度太细了,而且很多接口包含 PathVariable,没必要管控到这个粒度,且细到API维度,你一个接口出问题,基本上把hystrix的线程池都耗尽了,其他接口一样没有线程可用,所有接口共用线程池的,某服务任意接口有瓶颈,线程池基本就耗尽了
    来源:云原生后端社区
    https://www.yuque.com/server_mind/answer

    2020-04-25 15:56:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载