阿里sentinel說明及使用


使用說明

如果只是為了讓使 用Sentinel 的限流功能,只需要引入相關的jar包依賴。

添加依賴

添加相關模塊的Adapter

Sentinel為每個構建項目的各個組件都打包成了相應的Adapter。項目需要按需引入。現階段的Dubbo-Adapter模塊最高只支持到dubbo 2.6.6

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-dubbo-adapter</artifactId>
    <version>1.6.3</version>
</dependency>

各個模塊的adapter

限流信息上傳dashboard

添加參數

添加此依賴,客戶端的實時限流信息能匯總到后台管理界面。

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.6.3</version>
</dependency>
修改啟動參數
# 指定 dashboard的訪問地址和自己在dashbaord中要顯示的名字。
 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard

經過以上幾個步驟,就可以在dashboard中看到相關的項目。里面的流控規則就根據自己實際需要來進行設置。

規則說明

流量控制規則

field 說明 默認值
resource 資源名,限流規則的作用對象如具體的url
count 限流閥值,超過這個值就會觸發
grade 閾值類型,QPS或者線程數 QPS
limitApp 流控針對的調用來源 default,代表不區分調用來源
strategy 判斷是根據資源本身還是根據其它關聯資源(refResource)還是根據鏈路入口 根據資源本身
controlBehavior 流控效果(直接拒絕/排隊等待/慢啟動) 直接拒絕

同一個資源可以同時有多個限流規則。

private void initFlowQpsRule() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule(resourceName);
    // set limit qps to 20
    rule.setCount(20);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp("default");
    rules.add(rule);
    // 加載流控規則
    FlowRuleManager.loadRules(rules);
}

熔斷降級規則

熔斷降級規則包含下面幾個重要的屬性:

field 說明 默認值
resource 資源名,限流規則最用對象
count 閥值
grade 降級模式。根據RT(熔斷)降級還是異常比例降級 RT
timeWindow 降級后的時間作用窗口 (s)

同一個資源可以配置多個降級規則。


private void initDegradeRule() {
    List<DegradeRule> rules = new ArrayList<>();
    DegradeRule rule = new DegradeRule();
    rule.setResource(KEY);
    // set threshold RT, 10 ms
    rule.setCount(10);
    rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
    rule.setTimeWindow(10);
    rules.add(rule);
    // 加載降級規則
    DegradeRuleManager.loadRules(rules);
}

系統保護規則

field 說明 默認值
highestSystemLoad 最大的load -1 (不生效)
avgRt 所有入口流量的平均響應時間 -1 (不生效)
maxThread 入口流量的最大並發數 -1 (不生效)
qps 所有入口資源的qps -1 (不生效)
private void initSystemRule() {
    List<SystemRule> rules = new ArrayList<>();
    SystemRule rule = new SystemRule();
    rule.setHighestSystemLoad(10);
    rules.add(rule);
    // 加載系統規則
    SystemRuleManager.loadRules(rules);
}

Hystrix 對比

為什么要引入隔離的。當系統中的慢調用一直運行的時候,會對資源造成一種獨占的情況,從而影響其它進程對該資源的訪問造成系統相應變慢的現象。
為解決這種情況,引入隔離的方式來運行,使資源間的訪問都是相互獨立的。

兩者隔離方式的區別

線程隔離

Hystrix默認的隔離方式。針對不同的資源創建不同的線程池,不同服務調用都在不同的線程池中,在線程池排隊、超時等阻塞情況下可以快速失敗、並提供fallback機制。

  • 優點

    線程池隔離的好處是隔離程度比較高,可以針對某個資源的線程池去進行處理二部影響其它資源
  • 缺點

    代價是線程的上下文切換的代價比較大,特別是對低延時的調用影響比較大

    會讓機器資源碎片化。比如項目運行於tomcat容器中,本身tomcat自身的線程數就非常多,如果再加上Hystrix創建的線程池,這樣上下文切換會有非常大的損耗。

    線程池模式比較徹底的隔離性使得Hystrix可以針對不同資源線程池進行排隊、超時情況分別做處理。
信號量隔離

限制對某個資源調用的並發數。

  • 優點

    這樣的隔離是輕量級,僅限制對某個資源調用的並發數,而不是顯式地去創建線程池,所以對系統地負載比較小。
  • 缺點

    無法對慢調用的自動進行降級,只能等待客戶端自己超時,因此可能會出現級聯阻塞的情況。

Sentinel可以通過並發線程數模式的流量控制來提供信號量的隔離功能。並結合基於響應時間的熔斷降級模式,可以在不穩定的平均相應時間比較高的時候自動降級,防止過多的慢調用占滿並發數,影響整個系統

熔斷降級對比

兩者的熔斷降級功能本質上都是基於熔斷器模式SentinelHystrix都支持基於失敗比率的熔斷降級,在調用達到一定量級並且失敗率達到設定閾值時自動進行熔斷,此時所有對改資源的調用都會被block,直到過了指定的失敗窗口才啟發性的恢復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM