springcloud — 微服务熔断治理之断路器Hystrix解析(一)

13 篇文章 0 订阅
13 篇文章 0 订阅

1、隔离方式

  • 线程隔离(默认):使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可将数据存储到线程池队里慢慢处理)

  • 信号隔离:使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,请求来先判断计数器的数值,若超过设置的最大线程个数则丢弃改类型的新请求,若不超过则执行计数操作请求来计数器+1,请求返回计数器-1。这种方式是严格的控制线程且立即返回模式,无法应对突发流量(流量洪峰来临时,处理的线程超过数量,其他的请求会直接返回,不继续去请求依赖的服务)

2、熔断

如果某个目标服务调用慢或者大量超时,则此时熔断该服务的调用,对于后续调用请求,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转,则恢复调用。这个过程,可以想象成保险丝的行为。行为虽然简单,但需要调节的参数却非常多。

3、使用方式

1.引入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2.配置参数
feign:
  hystrix:
#不配置或为false则不生效
    enabled: true
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
#若配置了重试则超时时间= (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout
            timeoutInMilliseconds: 60000
  threadpool:
    default:
      coreSize: 10
      maxQueueSize: 50
      queueSizeRejectionThreshold: 30
      keepAliveTimeMinutes: 3
3.配置fallback

因业务处理不同,建议每个feign client使用不同的fallback

@FeignClient(value = "spring-demo-service", fallback = ErrorHystrix.class)
public interface SpringDemoFeignService {

    @RequestMapping(value = "port", method = RequestMethod.GET)
    String hello();
}
@Component
public class ErrorHystrix implements SpringDemoFeignService {

    @Override
    public String hello() {
        return "sorry, it's error!";
    }
}
4.其他配置

hystrix到任务后,发现有的服务接口1s内就完事儿 ,还有的5s到10几秒才堪堪返回。一刀切的配置已难以管理诸多服务&接口。
想必已经有人发现,之前配置中混进了奇怪的东西——default关键词。这是对全局配置,那么对应的肯定有局部的配置。
如:对服务的,对某个接口的…

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000
  threadpool:
#全局配置
    default:
      coreSize: 10
      maxQueueSize: 50
      queueSizeRejectionThreshold: 30
      keepAliveTimeMinutes: 3
#对某个服务配置,写service-id
    base-rpc:
      coreSize: 10
      maxQueueSize: 30
      queueSizeRejectionThreshold: 20
      keepAliveTimeMinutes: 3
#对某个接口配置
    DemoService#requestMethod(Params):
      coreSize: 10
      maxQueueSize: 40
      queueSizeRejectionThreshold: 30
      keepAliveTimeMinutes: 1

另外,还可以使用@HystrixCommand注解进行配置。

5.配置的动态修改

很多情况下,不能修改个配置,特别是临时修改配置就重启下服务,能动态刷新就最好了。
于是我们盯上了hystrix使用archaius管理配置的问题。

archaius是Netflix公司开源项目之一,基于java的配置管理类库,主要用于多配置存储的动态获取。
主要功能是对apache common configuration类库的扩展。在云平台开发中可以将其用作分布式配置管理依赖构件。同时,它有如下一些特性:
动态获取属性
高效和线程安全的配置操作
配置改变时提供回调机制
可以通过jmx操作配置
复合配置

代码示例:

//捞配置
AbstractConfiguration config = ConfigurationManager.getConfigInstance();

//提取关注的部分,比如hystrix.threadpool
Iterable<String> iterable = () -> config.getKeys("hystrix.threadpool");
List<Property> result = StreamSupport.stream(iterable.spliterator(), false).map(t -> new Property(t, config.getString(t, "")))
        .sorted(Comparator.comparing(Property::getName)).collect(Collectors.toList());

//修改配置
config.setProperty("hystrix.threadpool.base-rpc.coreSize", 20);

//移除配置
config.clearProperty(hystrix.threadpool.base-rpc.coreSize");

4、可视化hystrix dashboard

引入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>

下面这张图,就是针对后台监控的一些解释:
在这里插入图片描述
配置参数说明
一、Command Properties
以下属性控制HystrixCommand,前缀hystrix.command.default
1、Execution
以下属性控制HystrixCommand.run()如何执行。
比较重要的参数,有:
execution.isolation.strategy
execution.isolation.thread.timeoutInMilliseconds
在这里插入图片描述
2、Fallback
以下属性控制HystrixCommand.getFallback()如何执行。这些属性适用于ExecutionIsolationStrategy.THREAD和ExecutionIsolationStrategy.SEMAPHORE。
在这里插入图片描述
3、Circuit Breaker
断路器属性控制HystrixCircuitBreaker。
在这里插入图片描述

4、Metrics
以下属性与从HystrixCommand和HystrixObservableCommand执行捕获指标有关。
在这里插入图片描述
5、Request Context
这些属性涉及HystrixCommand使用的HystrixRequestContext功能
在这里插入图片描述

二、Command Properties
下列属性控制HystrixCollapser行为。前缀:hystrix.collapser.default
在这里插入图片描述
三、ThreadPool Properties
以下属性控制Hystrix命令在其上执行的线程池的行为。
大多数时候,默认值为10的线程会很好(通常可以做得更小)前缀:hystrix.threadpool.default
在这里插入图片描述

参考文章:https://cloud.tencent.com/developer/article/1516822
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RachelHwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值