這麼多開源的限流框架,該寵幸誰呢?

架構擺渡人發表於2021-09-28

大家好,架構擺渡人。這是我的第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作為流控元件。理由呢在前面也講過了,就不多說了。當你糾結的時候,好的選擇就是跟著大部隊走。

大家好,我是從古代穿越過來的美男子:架構擺渡人。我將把我的武功祕籍全部傳授與你們,覺得有用請分享給身邊的朋友。來個三連吧,感謝各位!

相關文章