Hystrix和GuavaRateLimiter对比

更新时间:2023-05-24 02:50:29 阅读: 评论:0

Hystrix和GuavaRateLimiter对⽐
⼀、关于限流&熔断&降级的说明
⼆、限流
1、Guava的RateLimiter
//限制速率为1秒10个请求,2是热⾝参数-以⼀种平滑的⽅式把1秒内的发放令牌的速率放⼤到最⼤(适⽤于初始化时间⽐较久或者使⽤了连接池的应⽤)
//该限流器是⾮公平令牌桶算法
private RateLimiter switchRateLimiter = ate(10,2, TimeUnit.MILLISECONDS);
//尝试获取⼀个执⾏的机会,成功返回true,失败的话则⽴即fal,不排队,想排队⽤acquire
if(!Acquire()){
//do your method
}el{
//do your limited method
}
2、hystrix的threadpool
@HystrixCommand(defaultFallback = "defaultFallback",//默认的降级⽅法,可以⽆参数
analysis复数fallbackMethod = "xxxFallback",//指定的降级⽅法,要求和代理⽅法同参数
threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "20"),//核⼼线程数
@HystrixProperty(name = "maxQueueSize", value = "20"),//队列最⼤值
@HystrixProperty(name = "queueSizeRejectionThreshold", value = "20")//队列长度到达该值则⾛降级策略godfather>fortune是什么意思
}
Hystrix 内线程池的使⽤是基于 Java 内置线程池的简单包装,通常有以下三种状态:cet6答案
如果请求量少,达不到 coreSize,通常会使⽤核⼼线程来执⾏任务。
如果设置了 maxQueueSize,当请求数超过了 coreSize, 通常会把请求放到 queue ⾥,待核⼼线程有空闲时消费。
如果 queue 长度⽆法存储请求,则会创建新线程执⾏直到达到 maximumSize 最⼤线程数,多出核⼼线程数的线程会在空闲时回收。问世是什么意思
三、熔断(过载保护)
1、hystirx熔断
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliconds", value = "500"),//执⾏时间超过500ms,直接报异常,⾛降级策略
@HystrixProperty(name = "questVolumeThreshold", value = "5"), // 设置当请求失败的数量达到10个后,打开断路器,默认值为20
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliconds", value = "10000"), // 设置打开断路器多久以后开始尝试恢复,默认为5s
@HystrixProperty(name = "ThresholdPercentage", value = "60"), // 设置出错百分⽐阈值,当达到此阈值后,打开断路器,默认50%
}
熔断器有 开-关-半开 状态,初始是关状态,被触发后进⼊开状态,指定时间后会半开,随后根据条件进⼊开或者关状态
四、降级
1、hystrix服务降级
@HystrixCommand(defaultFallback = "defaultFallback",//默认的降级⽅法,可以⽆参数
fallbackMethod = "xxxFallback",//指定的降级⽅法,要求和代理⽅法同参数
被限流和被熔断保护期间的调⽤会被进⾏降级处理,进⼊备⽤⽅法(fallback),避免服务雪崩。
五、对⼀个⽅法做限流&熔断&降级的完整配置
@HystrixCommand(defaultFallback = "defaultFallback",fallbackMethod = "queryFlowProductOrderUnityListFallback", threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "20"),//核⼼线程数
@HystrixProperty(name = "maxQueueSize", value = "20"),//核⼼线程数quiteabit
@HystrixProperty(name = "queueSizeRejectionThreshold", value = "20")//队列长度到达该值则⾛降级策略
}, commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliconds", value = "500"),//执⾏时间超过500ms,直接报异常,⾛降级策略
@HystrixProperty(name = "questVolumeThreshold", value = "5"), // 设置当请求失败的数量达到10个后,打开断路器,默认值为20sycophantic
the lottery@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliconds", value = "10000"), // 设置打开断路器多久以后开始尝试恢复,默认为5s
@HystrixProperty(name = "ThresholdPercentage", value = "60"), // 设置出错百分⽐阈值,当达到此阈值后,打开断路器,默认50% })
public Object queryFlowProductOrderUnityList(
public Object queryFlowProductOrderUnityListFallback(){}
coscopublic Object defaultFallback(){}
六、核⼼思想&算法
burn out1、令牌桶和漏桶算法
2、关于hystrix的限流和guava-Ratelimiter的限流
hystrix限制的是并发数,受配置和响应时间影响
RateLimiter限制的是流量本⾝,⽽不在后续处理消耗多少时间,属于流量整形

本文发布于:2023-05-24 02:50:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/120331.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:降级   线程   时间   请求
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图