Sentinel熱門詞匯限流的實現詳解

熱點參數限流

何為熱點?熱點即經常訪問的數據。很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,並對其訪問進行限制。比如:

  • 商品 ID 為參數,統計一段時間內最常購買的商品 ID 並進行限制
  • 用戶 ID 為參數,針對一段時間內頻繁訪問的用戶 ID 進行限制

熱點參數限流會統計傳入參數中的熱點參數,並根據配置的限流閾值與模式,對包含熱點參數的資源調用進行限流。熱點參數限流可以看做是一種特殊的流量控制,僅對包含熱點參數的資源調用生效。

基本使用

1、引入maven依賴

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-parameter-flow-control</artifactId>
    <version>x.y.z</version>
</dependency>

2、手動編寫代碼添加限流規則

@RequestMapping("/getUserOrder")
public String getUserOrder(Long userId) {
    Entry entry = null;
    try {
        entry = SphU.entry(getUserOrder, EntryType.IN, 1, userId);
        return "根據userId獲取用戶訂單信息成功";
    } catch (Exception e) {
        return "您操作的比較頻繁,請稍後重試!";
    } finally {
        if (entry != null) {
            entry.exit();
        }
    }
}
// 定義熱點限流的規則,對第一個參數設置 qps 限流模式,閾值為1
ParamFlowRule rule = new ParamFlowRule(getUserOrder)
        .setParamIdx(0)
        .setGrade(RuleConstant.FLOW_GRADE_QPS)
        .setCount(1);
ParamFlowRuleManager.loadRules(Collections.singletonList(rule));

或者使用控制臺形式添加熱詞限流規則

正常編寫Java接口

@RequestMapping("/getUserOrder")
@SentinelResource(value = "getUserOrder")
public String getUserOrder(Long userId) {
    return "根據userId獲取用戶訂單信息成功";
}

索引名:參數下表從 0 開始

單機閾值:單機部署時在統計時間內可以訪問多少次

統計窗口時長:統計熱詞的時間

可以給指定的參數額外設定閾值:例如:VIP用戶擁有特定的標識,判斷為VIP用戶時,可以請求接口的次數增加。

到此這篇關於Sentinel熱門詞匯限流的實現詳解的文章就介紹到這瞭,更多相關Sentinel熱詞限流內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: