zoukankan      html  css  js  c++  java
  • 小D课堂

    笔记

    6、高级篇幅之深入源码剖析Hystrix降级策略和调整
        简介:源码分析Hystrix降级策略和调整

        1、查看默认讲解策略 HystrixCommandProperties
            1)execution.isolation.strategy   隔离策略
                THREAD 线程池隔离 (默认)
                SEMAPHORE 信号量
                    信号量适用于接口并发量高的情况,如每秒数千次调用的情况,导致的线程开销过高,通常只适用于非网络调用,执行速度快

            2)execution.isolation.thread.timeoutInMilliseconds  超时时间
                默认 1000毫秒

            3)execution.timeout.enabled 是否开启超时限制 (一定不要禁用)


            4)execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10


        官方文档:
            https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy

        2、调整策略
            超时时间调整

        hystrix:
          command:
            default:
              execution:
                isolation:
                  thread:
                    timeoutInMilliseconds: 4000
     

    开始

    模拟商品服务响应慢。sleep2秒


    orderService调用商品服务
    服务都启动正常为什么还超时了呢???这是因为feign默认的超时机制

    hystrix里面本身有一个熔断降级。这里把readTimeout设置为4秒

    重新调用,一样还是会出问题

    光靠设置feign的超时时间是不行的,因为我们用了熔断。就需要分析hyxtrix的超时策略。
    点进去@HystrixCommand这个注解



    点击后左边就有对应的列表

    找到HystrixCommandProperties

    默认的注解的配置

    构造函数里面有很多的配置项。这里我们参考官方文档
    https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy
    execution.isolation.strategy:隔离策略


    下面看的是这个官方文档、:https://github.com/Netflix/Hystrix/wiki
    一个服务调用其他关联的服务

    如果某一天I服务特别慢,那么所有的请求都堆积到这里了

    tomcat是有线程池的,所有的线程都会在这里卡主,别的请求进不来。导致整个系统不可用

    1千个线程池平均分配没个请求250个 ,当有请求卡主的服务最多只能调用250个线程。其他的线程还可以使用。不会都卡在这一个服务里面,这样就是线程池隔离。

    回到HystrixCommandProperties


    默认策略点进去:Default_executionIsolationsStrategy




    默认的策略是线程。

    一个是线程一个是信号量

    超时时间

    execution.timeout.enabled 
    搜索关键字

    对应的值在这里。默认是1000毫秒,也就是1秒。


    execution.timeout.enabled 是否开启超时限制 (一定不要禁用)
    任何一个服务一定不要关闭超时时间,一定要设置一个超时时间。
    默认是开启的。任何一个服务肯定有出问题的时候,肯定不能无限的链接。链接会被耗尽

    execution.isolation.semaphore.maxConcurrentRequests 隔离策略为 信号量的时候,如果达到最大并发数时,后续请求会被拒绝,默认是10

    官方文档搜索关键字都有对应的说明

    设置

    可以在入口类里面,注解上加属性CommandProperties里面设置。但是这么设置不友好。这里不用这种方式、

    我们使用配置文件的方式去设置,为了解决刚才调用超时的问题
    有几种方式,第一种可以直接关闭超时时间

    这里的配置没什么提示,笔记内写好了直接复制过去就可以了




    再次调用,超时时间已经关闭,所以这里没问题。

    另外一种方式-修改超时时间


    超时时间设置为4秒

    测试

    请求耗时2秒多

     

  • 相关阅读:
    join函数——Gevent源码分析
    代理上网(ssh 动态端口转发)
    内核热patch
    技术债
    mysql 隔离级别与间隙锁等
    python type
    django : related_name and related_query_name
    ssh 卡主
    logistics regression
    __new__ 和 __init__
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/11449501.html
Copyright © 2011-2022 走看看