Sentinel | 熱點(diǎn)規(guī)則 | 系統(tǒng)規(guī)則

熱點(diǎn)

  • 熱點(diǎn)就是經(jīng)常訪問的數(shù)據(jù);
  • 比如商品接口的 QPS 限定的是 100,有一天要秒殺,帶著秒殺商品 id 的請(qǐng)求的 QPS 限制在 50,這樣還能有 50 的 QPS 用來訪問其他的商品;
  • 這就提出了一個(gè)去求,要能根據(jù)請(qǐng)求的參數(shù)來做限流,比如請(qǐng)求帶的參數(shù)是熱點(diǎn)參數(shù),就對(duì)這個(gè)請(qǐng)求應(yīng)用特殊的限流規(guī)則;對(duì)攜帶非熱點(diǎn)參數(shù)的請(qǐng)求,走另一個(gè)限流規(guī)則;

Sentinel 實(shí)現(xiàn)根據(jù)參數(shù)指定不同的限流規(guī)則(熱點(diǎn)規(guī)則)

將商品查看接口看做成一個(gè) @SentinelResource
@GetMapping("/{id}")
@SentinelResource(value = "getOrder")
public OrderInfo getInfo(@PathVariable Long id, @AuthenticationPrincipal String username) {
    log.info("user name " + username);
    log.info("orderId is " + id);

    OrderInfo info = new OrderInfo();
    info.setId(id);
    info.setProductId(id * 5);

    return info;
}
在 sentinel-dashboard 中添加熱點(diǎn)規(guī)則
  • 資源名(getOrder):@SentinelResource(value = "getOrder") 中的 value 值;
  • 參數(shù)索引(0):針對(duì)第 0 個(gè)參數(shù);
  • 參數(shù)類型(long):索引位置是 0 的參數(shù)的類型是 long;
  • 參數(shù)值(1):如果其值是 1;
  • 限流閾值(1):允許的 QPS 就是 1;
  • 單機(jī)閾值(10):不是 1 的情況下,允許的 QPS 就是 10;
  • 統(tǒng)計(jì)時(shí)間窗口(1):統(tǒng)計(jì)的時(shí)間單位,一般都是 1s;

配完了之后,對(duì)于被 @SentinelResource(value = "getOrder") 標(biāo)注的接口,如果參數(shù) id 帶的值是 1,那么允許它的 QPS 就是 1;對(duì)于 id 值是其他的值的請(qǐng)求,允許其 QPS 就是 10;

系統(tǒng)規(guī)則

  • 系統(tǒng)規(guī)則和熱點(diǎn)規(guī)則不一樣,熱點(diǎn)規(guī)則是針對(duì)方法設(shè)定的,系統(tǒng)規(guī)則是針對(duì)一個(gè)應(yīng)用設(shè)定的;
系統(tǒng)規(guī)則的 5 中預(yù)置類型
  • LOAD:只有在 Linux 系統(tǒng)的機(jī)器上才會(huì)生效,可以根據(jù)當(dāng)前操作系統(tǒng)的負(fù)載,來決定是否觸發(fā)保護(hù)(把請(qǐng)求拒絕掉);
  • RT:這個(gè)應(yīng)用上,所有請(qǐng)求的平均響應(yīng)時(shí)間,如果超過某個(gè)值,就停止新的請(qǐng)求;
  • 線程數(shù):這個(gè)應(yīng)用上,所有的請(qǐng)求消耗的線程數(shù)加起來,如果超過某個(gè)值,就停止新的請(qǐng)求;
  • 入口 QPS:這個(gè)應(yīng)用上,所有接口的 QPS 加起來,如果超過某個(gè)值,就停止新的請(qǐng)求;
  • CPU 使用率:CPU 的使用率,如果超過一個(gè)百分比,就停止新的請(qǐng)求;

發(fā)生系統(tǒng)規(guī)則中配置的情況的時(shí)候,會(huì)把整個(gè)應(yīng)用都斷掉,所有的接口對(duì)不能對(duì)外提供服務(wù)了,這個(gè)設(shè)計(jì)很少用,因?yàn)榱6忍罅?,?Sentinel 一般都是做細(xì)粒度的維護(hù),如果設(shè)置了系統(tǒng)規(guī)則,可能自己都不知道怎么回事,系統(tǒng)就用不了了;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容