大家好,架构摆渡人。这是我的第4篇原创文章,还请多多支持。
限流一直就是一个比较热门而又老旧的话题,但是作为应对高并发的手段之一,限流的热度一直都在。
前面我们大概的介绍了限流的背景,主流的限流算法,以及到底是选择自研还是选择开源的框架来实现限流功能,相关文章可以翻阅历史记录进行查看。
自研这条路没有一定的实力真的不好走,大多数的选择估计都是开源。那么我今天就介绍几款用的比较多的限流框架给大家。
Guava
Guava里自带了Ratelimiter用于限流,该类基于令牌桶算法实现流量限制功能。接入呢也比较简单,Ratelimiter不足的就是只能用于单机场景下的限流,一般场景下单机限流足够使用了。
如果想用Guava来实现单机的限流,还是得结合配置中心来使用。可以通过配置中心动态调整流控的力度,灵活度更高。
源码地址:https://github.com/google/guava
推荐指数:1 颗星
concuurency-limits
concuurency-limits是netflix推出的自适应限流组件,借鉴了TCP相关拥塞控制算法,主要是根据请求延时,及其直接影响到的排队长度来进行限流窗口的动态调整。
不难发现,netflix还是开源了很多实用的框架,只不过是长期维护下去比较难。不过很多框架的思想还是值得我们借鉴学习。
对于concuurency-limits我这边也是不推荐大家使用的,主要还是很久没更新了。但concuurency-limits的思想,还是要学习的。流控的最理想状态就是自适应限流,后面我们可以单独写篇文章来聊聊这个话题。
源码地址:https://github.com/Netflix/concurrency-limits
推荐指数:1 颗星
Resilience4j
相信大家都知道,Hystrix已经宣布不维护了,所以Spring官方推荐了一款新的框架代替Hystrix,这个框架就是Resilience4j。
Resilience4j是一个轻量级容错框架,设计灵感来源于Netflix 的Hystrix框架,为函数式编程所设计。
Resilience4j的功能非常强大,支持很多功能,如下图所示:
可以看到有很多强大的功能,比如熔断,限流,缓存,重试等。
源码地址:https://github.com/resilience4j/resilience4j
推荐指数:4 颗星
Sentinel
如果必须要我选择一款限流的框架,那必定是Sentinel无疑了。Sentinel 2012年诞生,至今已有9个年头,在阿里内部积累了大量的流量生产实践经验。目前的社区活跃度很高,很多公司都在使用,目前已经更新到了1.8.2版本,稳定性妥妥的。
Sentinel底层采用了滑动窗口算法实现,可以很好地支撑写多于读的高并发场景。除了单机限流,还支持集群限流,可以说完全满足了日常流控的需求。
如果你觉得自己搭建维护太麻烦,商业版的也有,要啥有啥,就是费钱。
源码地址:https://github.com/alibaba/sentinel
推荐指数:5 颗星
总结
最后,做个总结吧!还是给大家推荐Sentinel作为流控组件。理由呢在前面也讲过了,就不多说了。当你纠结的时候,好的选择就是跟着大部队走。
大家好,我是从古代穿越过来的美男子:架构摆渡人。我将把我的武功秘籍全部传授与你们,觉得有用请分享给身边的朋友。来个三连吧,感谢各位!