smart-socket v1.5.13 釋出,外掛全家桶迎來新成員

smart-socket v1.5.13 釋出,外掛全家桶迎來新成員

smart-socket v1。5。13 版本除了一些細節最佳化,最大的亮點莫過於外掛全家桶迎來了一位重磅級新成員:RateLimiterPlugin(流控外掛)。

流控,在很多場景下是一項剛性需求。目前市面上所見的絕大多數流控方案都是 QPS 維度的,即限制單位時間內的請求/響應

次數

。而 smart-socket 本次釋出的流控外掛卻比較與眾不同,我們提供的是針對位元組碼的流量控制能力,實現了網路上下行流量的限速。

產生出研發流控外掛的想法緣於一次線上故障,當時某個業務的網路 IO 流量劇增,消耗了過多資源以致其他請求出現嚴重超時。由此使我意識到基於 QPS 限流策略的侷限性,不僅僅是高併發會衝擊系統的穩定性,

低併發高流量

也是個不容忽視的存在。尤其在分散式環境下,單節點的故障會引發一系列連鎖反應。而要防止個別網路通道無節制的消耗 IO 資源,則需要將流量限速在安全範圍內。

smart-socket v1.5.13 釋出,外掛全家桶迎來新成員

流控功能的實現原理是透過代理技術攔截了 Java 通訊物件 AsynchronousSocketChannel 的 read/write 方法,識別出超負荷的 IO 任務並延遲至一下個視窗期執行(

具體實現參見倉庫原始碼

)。

啟用該外掛延續著 smart-socket 外掛一貫的開箱即用的風格,只需在構造方法中指定 read 和 write 的流控值(單位:byte),輸入 0 表示不限流。

processor。addPlugin(

new

RateLimiterPlugin<>(1024 * 1024, 1024 * 1024))

執行效果如下圖:(

10個客戶端傳送訊息,每隔5秒鐘列印一次

smart-socket v1.5.13 釋出,外掛全家桶迎來新成員

完整示例程式碼 RateLimiterDemo 可從 smart-socket 倉庫中獲取。

更新內容

最佳化 WriteBuffer#write 演算法。

調整底層IO排程執行緒名。

移除底層預設的 tcoNoDelay 設定。

新增流控外掛:RateLimiterPlugin。

maven座標

org。smartboot。socketgroupId> aio-coreartifactId> 1。5。13version>dependency>

最後

開源不易,若覺得該專案還不錯,請為它點個 Star 。倉庫地址:

https://gitee。com/smartboot/smart-socket