专栏名称: 爬蜥
目录
相关文章推荐
51好读  ›  专栏  ›  爬蜥

一文入门分布式服务高容错优雅解决利器 Hystrix

爬蜥  · 掘金  ·  · 2019-06-15 15:06

正文

阅读 27

一文入门分布式服务高容错优雅解决利器 Hystrix

在一个复杂的分布式应用中,一定会存在非常多的依赖,每一个依赖不可避免的总会存在调用失败的情况

如上图所示,假若依赖I出现问题,用户的请求失败。另外在高并发的场景下,不仅仅是服务调用失败,更有可能导致队列、线程等等其他系统资源被占用,进而引发级联错误

更要命的是如果依赖I是一个非核心业务,其余的是核心的,这种阻塞是不值当的

hystrix的目标

  • 对需要调用依赖服务而产生的失败和时延做控制,保护链路
  • 阻止复杂分布式系统中级联错误的产生
  • 能够快速失败(比如超时设置)同时迅速从错误中恢复
  • 可降级的时候,优雅的执行降级方法
  • 能够做实时监控、提醒和选择性的控制

hystrix 使用方式

  1. 新建1个自己的“命令类”,它继承 HystrixCommand,用来“包装”最终要掉依赖的方法
    class DefaultSettingCommand extends HystrixCommand<String>
    复制代码
  2. DefaultSettingCommand 中实现 hystrix 的声明周期的一些方法,包括当前命令的配置、指定run方法以及fallback方法
    • 配置:主要包括两大块线程池配置和命令执行的配置 。 配置信息详解戳这里
      //构造函数中指定配置,线程池包括最大线程数等,命令配置包括超时时间等
       super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("defaultCommand"))
          .andCommandPropertiesDefaults(Setting.DEFAULT_PROPERTIES_SETTER)
          .andThreadPoolPropertiesDefaults(Setting.DEFAULT_THREAD_SETTER));
      复制代码
    • run方法:指定要执行远程调用的方法
    • fallback:当run执行失败或者达到用户自己配置的情况,需要执行的备选方法
  3. 在目标方法执行的地方,改为每次使用新建的命令来执行
    //logicService即原本打算要执行的方法,在这里word是logicService执行方法时的参数
    DefaultSettingCommand defaultCommand = new DefaultSettingCommand(logicService,word);
            defaultCommand.execute();
    复制代码

继承HystrixCommand完整可执行的实例请戳这里

另一种使用 Hystrix 的方式是继承 HystrixObservableCommand ,不过使用它之前需要对 rxjava1 略微了解, HystrixObservableCommand感兴趣的同学可以戳这里

怎么对Hystrix做监控

  1. 使用HystrixDashboardStream。HystrixDashboardStream的实现就是按一定的时间间隔固定的去轮询所有自己存储的指标,用户可以选择自己感兴趣的数据做持久化







请到「今天看啥」查看全文