博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud的Hystrix(一) 一个消费者内的两个服务监控
阅读量:5934 次
发布时间:2019-06-19

本文共 3709 字,大约阅读时间需要 12 分钟。

一、概念与定义

1、服务雪崩

在微服务架构中,整个系统按业务拆分出一个个服务,这些服务之间可以相互调用(RPC),为了保证服务的高可用,单个服务通常会集群部署。

但是由于网络原因或自身原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,服务器线程资源很快就会被消耗殆尽,最终会导致服务瘫痪。

同时,由于服务与服务之间的依赖性,故障会扩散传播,导致整个微服务系统的灾难性后果,这就是服务故障引起的“雪崩”效应。

2、断路器

3、SpringCloud的实现

SpringCloud整合了Netflix开源的Hystrix组件,实现了断路器模式。

在微服务架构中,一个请求需要调用多个服务是非常常见的,当较底层的服务如果出现故障,会导致连锁故障。

当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。 

断路打开后,可避免连锁故障,hysrix可采用fallback方法直接返回一个结果。

二、断路器实践-代码

1、服务提供者

2、服务消费者

 

3、断路器实践-验证

  1. 停掉 服务提供者 应用
  2. 访问 服务消费者 应用,验证快速失败!
  3. 启动 服务提供者应用, 访问服务消费者应用,发现功能恢复!

三、增加dashboard支持

1、引入依赖和注解

2、验证 dashboard(断路器打开后,并不会自动关闭,在第一次访问成功后会关闭!)

 

 

五、hystrix相关配置(默认5秒内,20个失败,激发该服务的熔断机制)

HystrixCommandProperties包含一下配置信息:

  hystrix.command.[commandkey].circuitBreaker.enabled 是否开启熔断机制,默认为true。

  hystrix.command.[commandkey].circuitBreaker.forceOpen 强制开启熔断,默认为false。

  hystrix.command.[commandkey].circuitBreaker.forceClosed 强制关闭熔断,默认为false。

  hystrix.command.[commandkey].circuitBreaker.sleepWindowInMilliseconds  熔断窗口时间,默认为5s。

  hystrix.command.[commandkey].circuitBreaker.requestVolumeThreshold 当在配置时间窗口内达到此数量后的失败,进行短路。默认20个

  hystrix.command.[commandkey].circuitBreaker.errorThresholdPercentage 出错百分比阈值,当达到此阈值后,开始短路。默认50%

 

  hystrix.command.[commandkey].execution.timeout.enabled 是否开启超时设置,默认true。

  hystrix.command.[commandkey].execution.isolation.thread.timeoutInMilliseconds 默认超时时间 默认1000ms

  hystrix.command.[commandkey].execution.isolation.strategy 是否使用线程池执行 默认THREAD方式

  hystrix.command.[commandkey].execution.isolation.thread.interruptOnTimeout是否打开超时线程中断 默认值true

  hystrix.command.[commandkey].execution.isolation.thread.interruptOnFutureCancel 当隔离策略为THREAD时,当执行线程执行超时时,是否进行中断处理,即Future#cancel(true)处理,默认为false。

  hystrix.command.[commandkey].execution.isolation.semaphore.maxConcurrentRequests 信号量最大并发度 默认值10

  hystrix.command.[commandkey].fallback.isolation.semaphore.maxConcurrentRequests fallback方法的信号量配置,配置getFallback方法并发请求的信号量,如果请求超过了并发信号量限制,则不再尝试调用getFallback方法,而是快速失败,默认信号量为10。

  hystrix.command.[commandkey].fallback.enabled 是否启用降级处理,如果启用了,则在超时或异常时调用getFallback进行降级处理,默认开启。

  hystrix.command.[commandkey].metrics.rollingStats.timeInMilliseconds   设置统计滚动窗口的长度,以毫秒为单位。用于监控和熔断器 默认10s

  hystrix.command.[commandkey].metrics.rollingStats.numBuckets  设置统计窗口的桶数量 默认10

  hystrix.command.[commandkey].metrics.rollingPercentile.enabled 设置执行时间是否被跟踪,并且计算各个百分比,50%,90%等的时间 默认true

  hystrix.command.[commandkey].metrics.rollingPercentile.bucketSize 此属性设置每个桶保存的执行时间的最大值 默认100。

  hystrix.command.[commandkey].metrics.rollingPercentile.timeInMilliseconds 设置执行时间在滚动窗口中保留时间,用来计算百分比 默认60000ms

  hystrix.command.[commandkey].metrics.rollingPercentile.numBuckets 设置rollingPercentile窗口的桶数量 默认6。

  hystrix.command.[commandkey].metrics.healthSnapshot.intervalInMilliseconds 采样时间间隔 默认值500

  hystrix.command.[commandkey].requestCache.enabled 设置是否缓存请求,request-scope内缓存 默认值true

  hystrix.command.[commandkey].requestLog.enabled 设置HystrixCommand执行和事件是否打印到HystrixRequestLog中 默认值true

  hystrix.command.[commandkey].threadPoolKeyOverride   命令的线程池key,决定该命令使用哪个线程池。

HystrixThreadPoolProperties包含一下配置:

  hystrix.threadpool.[threadkey].coreSize 线程池核心线程数 默认值10;

  hystrix.threadpool.[threadkey].maximumSize  线程池最大线程数 默认值10;

  hystrix.threadpool.[threadkey].allowMaximumSizeToDivergeFromCoreSize   当线程数大于核心线程数时,是否需要回收。与keepAliveTimeMinutes配合使用。

  hystrix.threadpool.[threadkey].keepAliveTimeMinutes  当实际线程数超过核心线程数时,线程存活时间 默认值1min

  hystrix.threadpool.[threadkey].maxQueueSize  最大等待队列数 默认不开启使用SynchronousQueue 不可动态调整

  hystrix.threadpool.[threadkey].queueSizeRejectionThreshold   允许在队列中的等待的任务数量 默认值5

  hystrix.threadpool.[threadkey].metrics.rollingStats.timeInMilliseconds 设置统计滚动窗口的长度,以毫秒为单位 默认值10000。

  hystrix.threadpool.[threadkey].metrics.rollingStats.numBuckets 设置统计窗口的桶数量 默认10

转载地址:http://jmctx.baihongyu.com/

你可能感兴趣的文章
JFinal QuartzPlugin
查看>>
python新手入门
查看>>
VMware ESXi的安装和配置
查看>>
Linux如何开启mysql远程连接
查看>>
Android项目目录结构介绍
查看>>
计算机互访
查看>>
mxgraph
查看>>
Linux中Kill进程的N种方法
查看>>
一步步实现Spring框架(二)XML注入
查看>>
Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>
scala中tuple(一)
查看>>
lvm逻辑卷管理
查看>>
Linux链接概念
查看>>
单播、多播(组播)和广播的区别
查看>>
学习Linux坚持贴!第二天
查看>>
MySQL如何实现分库分表,如何提高查询效率
查看>>
Linux常用命令——stat
查看>>
用户登陆管理
查看>>
Html5的培训内容
查看>>