• Jmater中的参数

循环次数是,12个线程同时发送请求,每个线程发送2次,第二次发送时要在第一次返回之后再发送。
Ramp-Up时间,是几秒内把线程启动,例如设置成36 ,则36秒启动12个线程,每3秒启动一个。

1.熔断线程能极大减轻业务线程压力
2.httpclient只提供连接池功能,没有线程池
3.熔断的信号量方式,用的是业务线程,没法控制超时时间,没法控制超时熔断时间,只能通过控制链接超时时间控制

  • tomcat配置
server:
  port: 8082
  tomcat:
    max-connections: 0  #最大链接数,这个数值要大于等于max-threads+accept-count
    max-threads: 1  #最大工作线程数,业务处理都放在这个线程上
    accept-count: 100  #等待队列,在线程不够用时用到

accept-count   :设置200以上按200计算,默认100,如设置150 ,会把链接放到队列中,消耗很小的CPU资源
max-connections :  可以接收的最大链接数,如设置500   ,会把链接放到select的队列上,相对会消耗CPU一些
最终能和服务建立链接的请求数为:accept-count +  max-connections   ,处于“ESTABLISHED”的连接数是500+150 =650 个,链接没有设置超时时间,会一直存在,直到有一份退出。
其他请求被拒绝  failed: Connection refused: connect

max-threads  :最大工作线程数,决定了服务器的处理能力

  • 关于熔断

1.如果没有熔断,任务都压在tomcat的工作线程上,会一直等待后台系统返回。
没有隔离,会被服务(包括优先级低)挤占满。

2.信号量的隔离方式,只能控制服务接入数量,占用的线程是tomcat工作线程。但是无法控制熔断超时间,只能靠通讯超时处理。

3.如果是线程隔离方式,也会占用tomcat工作线程,但是熔断超时后就会释放tomcat工作线程,不会导致占用时间过长的情况。

4.
#ribbon的超时时间

ribbon:
  OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false,这个时候只针对get请求进行重试,当为true时,对put请求重试,注意幂等问题
  ReadTimeout: 10000   #负载均衡超时时间,默认值5000
  ConnectTimeout: 2000 #ribbon请求连接的超时时间,默认值2000
  MaxAutoRetries: 0     #对当前实例的重试次数,默认0
  MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1

#hystrix的

hystrix:
  #threadpool:
  #  default:
   #   coreSize: 20 # THREAD 模式 线程数
  command:
    default:  #default全局有效,service id指定应用有效
      execution:
        timeout:
          #是否开启超时熔断
          enabled: true
        isolation:
          #熔断模式 THREAD SEMAPHORE
          strategy: SEMAPHORE
          #semaphore熔断模式 参数 begin
          semaphore:
            maxConcurrentRequests: 10
          #semaphore熔断模式 参数 end
          thread:
            timeoutInMilliseconds: 15000 #断路器超时时间,默认1000ms,信号量的情况下这个参数也起作用,同时通过hystix-timer线程实现的

信号量方式时
timeoutInMilliseconds时间大于ReadTimeout时间时,按读超时抛出异常,进入熔断
即使timeoutInMilliseconds时间小于ReadTimeout时间,熔断发生的tomcat的工作线程也不会释放掉,直到readTimeout为止,才会释放线程,释放链接资源

线程方式时,tomcat的工作线程处于阻塞状态,不能去干其他的事情
timeoutInMilliseconds时间小于ReadTimeout时间,精确的熔断时间点,链接会直接关闭,释放链接资源
timeoutInMilliseconds时间大于ReadTimeout时间,按读超时抛出异常,进入熔断

#hystrix的

circuitBreaker:
  requestVolumeThreshold: 10 #当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
  sleepWindowInMilliseconds: 5 #短路多久以后开始尝试是否恢复,默认5s
  errorThresholdPercentage: 50% #出错百分比阈值,当达到此阈值后,开始短路。默认50%

以上参数只用于线程模式时
十个熔断回调之后,开关打开,之后所有的请求都会报异常:java.lang.RuntimeException: Hystrix circuit short-circuited and is OPEN
5秒后开关处于半关闭,每次只放行一个请求,直到有成功的出现后才会关闭

当信号模式时
10个熔断回调之后,开关打开,之后所有的请求都会报异常:java.lang.RuntimeException: Hystrix circuit short-circuited and is OPEN
5秒后开关处于半关闭,每次只放行一批(信号量总数量)请求,然后进入打开状态,再5秒后开关处于半关闭,每次只放行一批
直到有成功的出现后才会关闭状态

熔断降级主要解决服务雪崩效应,主要支持如下机制:
    隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。
    降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
    熔断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。
    缓存:提供请求缓存、请求合并实现。
    支持实时监控、报警、控制