Hystrix介绍

1.为什么使用Hystrix

        在分布式环境中,不可避免会造成一些服务的失败。,Hystrix 提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
  • 防止分布式系统中的级联故障
  • 快速失败和快速恢复的能力
  • 回退机制和优雅降级
  • 为服务提供近实时的监控、预警和操作控制能力

2.Hello Hystrix

2.1.Hystrix与普通代码的使用区别





    Hystrix的编程范式是基于命令模式,将行为和数据封装到继承自HystrixCommand的子类。


2.2 隔离策略

    Hystrix采用bulkhead pattern去隔离不同服务的调用,同时控制他们的并发量。

    Hystrix提供两种线程控制策略Threads、Semaphores。



Threads:
    Hystrix使用相互隔离,预先准备的单独的线程组去执行任务命令。

    线程组默认为10个线程,同时不接受任务排队。


    Threads池的优点(不多说了)。

    Threads池的缺点:就是线程系统性能消耗。

    Netflix 使用线程隔离方式每天处理100亿+次的服务调用,每个客户端节点上有40+个包含5-10个(最大10个)线程的线程池。下图是官方提供的一个每秒60次:



Semaphores:
    使用信号量将基于宿主的线程去处理任务,因此不能提供提供超时处理,但能提供并发线程的上限控制。

    设置配置 execution.isolation.strategy :SEMAPHORE 可开启该模式。

2.3 请求合并

    请求合并可以有效的降低网络连接次数。

    请求合并的作用域可以是全局作用域和Request作用域。

    请求合并的缺点:请求执行必须要等待某时间窗口的结束或达到合并处理的任务数量。



2.4 请求缓存


    默认是开启请求缓存配置的,但必须重写getCacheKey()方法,并开启context(serlvet模式或者上下文模式HystrixRequestContext context = HystrixRequestContext.initializeContext();...shutdown())。


    注意,缓存是只在单次request中生效。

2.5 流程介绍

1 构造器,生成指令
    可以extends两种指令父类,HystrixCommand / HystrixObservableCommand


2 执行指令
    execute() — 阻塞,等待结果返回
    queue() — 返回Future,execute()=queue().get()
    observe() — 请求返回一个观察者,观察者需要注册行为监听器,处理返回结果
    toObservable() — 返回一个延迟的观察者,在注册监听器的动作完成后才会触发请求。queue()=toObservable().toBlocking().toFuture()


3 判断缓存中是否已经有返回数据


4 判断断路器是否开启
    如果开启,则进入步骤8,否则进入步骤5

5 判断Thread Pool/Queue/Semaphore 是否已满
    如果并发量已满,则执行步骤8


6 执行
    如果执行超时,Hystrix将会执行走向步骤8,并抛弃最终返回的结果。
    如果执行结束,Hystrix会返回结果并提供日志和度量数据


7 计算回路健康度
    Hystrix报告成功、失败、拒绝和超时的结果给断路器(circuit breaker),circuit breaker维护一个滚动的计数器计算统计数据。circuit breaker使用这些数据去决定是否将状态置为开启


8 执行fallback
    4/5/6不满足以及超时都会进入fallback,实现HystrixCommand.getFallback()或HystrixObservableCommand.resumeWithFallback()


2.6 断路器工作原理

1 访问的请求数大于阈值数,默认10秒内大于20次。
2 错误的比率超过阈值,默认是50%。
3 开启断路器,拒绝后续请求。
4 指定时间窗口过后,根据接下来的第一个请求的结果决定是否关闭断路器。



2.7 配置方式


    主要的几个配置参考类:HystrixCommandProperties,HystrixThreadPoolProperties,HystrixCommandMetrics.HealthCounts


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值