壹、入围方案
Sentinel
-
github地址:https://sentinelguard.io/zh-cn/docs/introduction.html
-
阿里出品,Spring Cloud Alibaba限流组件,目前持续更新中
-
自带Dashboard,可以查看接口Qps等,并且可以动态修改各种规则
-
流量控制,直接限流、冷启动、排队
-
熔断降级,限制并发限制数和相应时间
-
系统负载保护,提供系统级别防护,限制总体CPU等
-
主要核心:资源,规则(流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。),和指标
-
文档非常清晰和详细,中文
-
支持动态规则(推模式和拉模式)
Hystrix
-
github地址:https://github.com/Netflix/Hystrix/wiki
-
Netflix出品,Spring Cloud Netflix限流组件,已经停止新特性开发,只进行bug修复,最近更新为2018年,功能稳定
-
有简单的dashboard页面
-
以隔离和熔断为主的容错机制,超时或被熔断的调用将会快速失败,并可以提供 fallback 机制的初代熔断框架,异常统计基于滑动窗口
resilience4j
-
github地址:https://resilience4j.readme.io/docs
-
是一款轻量、简单,并且文档非常清晰、丰富的熔断工具。是Hystrix替代品,实现思路和Hystrix一致,目前持续更新中
-
需要自己对micrometer、prometheus以及Dropwizard metrics进行整合
-
CircuitBreaker 熔断
-
Bulkhead 隔离
-
RateLimiter QPS限制
-
Retry 重试
-
TimeLimiter 超时限制
-
Cache 缓存
自己实现(基于Guava)
-
基于Guava的令牌桶,可以轻松实现对QPS进行限流
贰、技术对比
叁、应用改造
3.1、sentinel
3.1.1、引入依赖
1 2 3 4 5 |
|
3.1.2、改造接口或者service层
@SentinelResource(value = "allInfos",fallback = "errorReturn")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
3.1.3、针对接口配置熔断方法或者限流方法
默认过滤拦截所有Controller接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
注意也可以不配置限流或者熔断方法。通过全局异常去捕获UndeclaredThrowableException或者BlockException避免大量的开发量
3.1.4、接入dashboard
1 2 3 4 5 6 |
|
3.1.5、规则持久化和动态更新
接入配置中心如:zookeeper等等,并对规则采用推模式
3.2、hystrix
3.2.1、引入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
3.2.2、改造接口
@HystrixCommand(fallbackMethod = "timeOutError")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
3.2.3、针对接口配置熔断方法
1 2 3 4 5 6 7 8 9 10 11 12 |
|
3.2.4、配置默认策略
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
3.2.5、接入监控
曲线:用来记录2分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势。
集群监控需要用到注册中心
3.3、resilience4j
3.3.1、引入依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
可以按需要引入:bulkhead,ratelimiter,timelimiter等
3.3.2、改造接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
3.3.3、针对接口配置熔断方法
1 2 3 4 5 6 7 8 9 10 11 |
|
3.3.4、配置规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
配置的规则可以被代码覆盖
3.3.5、配置监控
如grafana等
肆、关注点
-
是否需要过滤部分异常
-
是否需要全局默认规则
-
可能需要引入其他中间件
-
k8s流量控制
-
规则存储和动态修改
-
接入改造代价
【后面的话】
个人建议的话,比较推荐sentinel,它提供了很多接口便于开发者自己拓展,同时我觉得他的规则动态更新也比较方便。最后是相关示例代码:单体应用示例代码
以上就是浅析Spring Boot单体应用熔断技术的使用的详细内容,更多关于Spring Boot单体应用熔断技术的资料请关注脚本之家其它相关文章!
分享不易,如果觉得分享对大家有帮助,老规矩,点赞、关注、留言支持哦!