Hystrix

Hystrix
基于线程池技术实现资源隔离
基于Hystrix信号量机制实现资源隔离
Hystrix资源隔离策略细粒度控制
    HystrixCommandProperties.Setter()
        //资源隔离策略 -> 线程池
        .withExecutionIsolationStrategy(ExecutionIsolationStrategy.THREAD)
        //commandGroupKey
        .withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
        //commandKey
        .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld"))
        //threadPoolKey
        .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("HelloWorldPool"));
        //coreSize
        .withCoreSize(int value)
        //queueSizeRejectionThreshold
        .withQueueSizeRejectionThreshold(int value);
    HystrixCommandProperties.Setter()
        //资源隔离策略 -> 信号量
        .withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)
        //semaphoreMaxConcurrentRequests
        .withExecutionIsolationSemaphoreMaxConcurrentRequests(int value);
        
内部原理
    步骤一:创建 command
        // 返回一个结果
        HystrixCommand hystrixCommand = new HystrixCommand(arg1, arg2);
        // 返回多条结果
        HystrixObservableCommand hystrixObservableCommand = new HystrixObservableCommand(arg1, arg2);
    步骤二:调用 command 执行方法
        //execute():调用后直接 block 住,属于同步调用,直到依赖服务返回单条结果,或者抛出异常
        K value = hystrixCommand.execute();//queue().get()
        //queue():返回一个 Future,属于异步调用,后面可以通过 Future 获取单条结果
        Future<K> fValue   = hystrixCommand.queue();//toObservable().toBlocking().toFuture()
        //observe():订阅一个 Observable 对象,Observable 代表的是依赖服务返回的结果,获取到一个那个代表结果的 Observable 对象的拷贝对象
        Observable<K> oValue   = hystrixObservableCommand.observe();
        //toObservable():返回一个 Observable 对象,如果我们订阅这个对象,就会执行 command 并且获取返回结果
        Observable<K> toOValue = hystrixObservableCommand.toObservable();
    步骤三:检查是否开启缓存
        如果这个 command 开启了请求缓存 Request Cache,而且这个调用的结果在缓存中存在,那么直接从缓存中返回结果。否则,继续往后的步骤
    步骤四:检查是否开启了断路器
        检查这个 command 对应的依赖服务是否开启了断路器。如果断路器被打开了,那么 Hystrix 就不会执行这个 command,而是直接去执行 fallback 降级机制,返回降级结果。
    步骤五:检查线程池/队列/信号量是否已满
        如果这个 command 线程池和队列已满,或者 semaphore 信号量已满,那么也不会执行 command,而是直接去调用 fallback 降级机制,同时发送 reject 信息给断路器统计。
    步骤六:执行 command
    步骤七:断路健康检查
    步骤八:调用 fallback 降级机制
    
不同的执行方式
    execute(),获取一个 Future.get(),然后拿到单个结果。
    queue(),返回一个 Future。
    observe(),立即订阅 Observable,然后启动 8 大执行步骤,返回一个拷贝的 Observable,订阅时立即回调给你结果。
    toObservable(),返回一个原始的 Observable,必须手动订阅才会去执行 8 大步骤。
    
基于 request cache 请求缓存技术优化批量商品数据查询接口
    https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-availability/hystrix-request-cache.md
    
基于本地缓存的 fallback 降级机制
    https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-availability/hystrix-fallback.md
    
深入 Hystrix 断路器执行原理
    https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-availability/hystrix-circuit-breaker.md
    
深入 Hystrix 线程池隔离与接口限流
    https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-availability/hystrix-thread-pool-current-limiting.md
    
基于 timeout 机制为服务接口调用超时提供安全保护
    https://gitee.com/shishan100/Java-Interview-Advanced/blob/master/docs/high-availability/hystrix-timeout.md

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值