sentinel的四種流控規則介紹( 二 )


單機閾值:12,這個表示我們訪問最大閾值為12 , 但是第一次最大訪問量為4,為什么是4呢,看下面公式
預熱公式:閾值/coldFactor(默認值為3),經過預熱時間后才會達到閾值 。
預熱時長:5,也就是說我們的請求會在五秒內單機閾值達到12的訪問,比如第一次為4,后續在五秒內依次5/6/8/10 , 最后達到12的閾值
一般這種在秒殺或者電商節中會設置這樣的流控規則,就是為了防止突然流量的增加導致系統的奔潰 。
當我們設置完流控規則以后,我們就來看一下效果,我們剛才設置的order的接口,如果當我們在頻繁的去訪問order接口的時候,如果超過當前時間設定的閾值時 , 直接返回限流信息 。

sentinel的四種流控規則介紹

文章插圖
在這里我們直接用瀏覽器瘋狂的去刷新,是時候體驗單身二十幾年的手速了,當然也可以使用postman接口去試 , 我們這邊手速比較快,直接用瀏覽器刷新,我們可以看到下面的曲線圖:
sentinel的四種流控規則介紹

文章插圖
藍色表示你拒絕的QPS , 綠色表示通過的QPS,我們可以看到藍色成明顯的下降趨勢,而綠色成上升趨勢,也可以通過右邊的表格中看到,剛開始通過的只有四個,具體的有三個,后面通過慢慢增加,拒絕慢慢變少 , 這個就是我們Warm Up(預熱)的作用了
四:排隊等待我們現在來介紹最后一個流控規則的使用,排隊等待會嚴格控制請求通過的間隔時間,讓請求穩定且勻速的通過,可以用來處理間隔性突發的高流量,例如搶票軟件,在某一秒或者一分鐘內有大量的請求到來,而接下來的一段時間里處于空閑狀態,我們希望系統能夠在接下來的空余時間里也能出去這些請求,而不是直接拒絕 。
sentinel的四種流控規則介紹

文章插圖
以固定的間隔時間讓請求通過,當請求過來的時候,如果當前請求距離上一個請求通過的時間大于 規則預設值,則請求通過,如果當前請求預期通過時間小于 規則預設值,則進行排隊等待,如果預期通過時間超過最大排隊時間,直接拒絕請求 。
Sentinel排隊等待是 漏銅算法+虛擬隊列機制實現的,目前排隊等待中不支持QPS>1000的場景
sentinel的四種流控規則介紹

文章插圖
我們對pay接口進行設置,一秒鐘只處理一個QPS請求,其他的排隊 , 如果超過15秒則直接拒絕
pay接口調整,這里我們給pay接口加上打印日志,方便我們看到具體效果
@GetMapping("/pay")public String pay() {//return "hello my name is pay ,wo shi boy";log.info("pay接口,請求線程為:"+Thread.currentThread().getName());return testService.end();}我們借助postman來進行調用 , 說明手速始終更不上工具,還是工具香,這里我們設置10個請求 , 沒有間隔時間
sentinel的四種流控規則介紹

文章插圖
從下圖中我們可以看到,對于我們的請求,是一個QPS請求 。
sentinel的四種流控規則介紹

文章插圖
小結:流控規則就是針對不同的規則進行不同的設定,來滿足我們不用業務場景 。
【sentinel的四種流控規則介紹】

推薦閱讀