91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

發布時間:2020-07-05 17:25:26 來源:網絡 閱讀:1897 作者:ZeroOne01 欄目:編程語言

常見容錯方案

在微服務等分布式架構中,服務容錯是老生常談的問題了,我們都知道在微服務架構中會存在多個微服務,而絕大部分微服務之間都會存在調用關系,若由于某個底層服務不可用從而產生連鎖反應,導致一系列的上層服務崩潰、故障,這種現象被稱為雪崩效應或級聯故障。如下圖所示:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

所以在微服務等分布式架構中,能夠防御服務雪崩效應的容錯方案是必不可少的,常見的容錯方案如下:

1、超時:

設置請求超時時間,讓請求線程在等待超過一定的時間后就判定為請求失敗從而釋放請求線程,在某些場景下線程釋放得夠快的話,就不會因為不斷創建線程而導致資源耗盡引起的服務崩潰

2、限流:

例如,上圖中的服務A只能承受1k左右的QPS,那么就設置一個最大請求數量閾值,當QPS達到1k時就拒絕在這之后的請求。就像是我只能吃一碗飯,就算給我三碗我也只吃一碗

3、艙壁模式:

艙壁模式實際上就是借鑒于現實生活中的船艙結構而設計,一艘船想要不那么容易沉也需要具備有一定的”容錯“能力,而早期的船由于設計上的欠缺,只要一個地方進水了,那么水就會逐漸漫進整個船艙,這種結構的船幾乎沒有“容錯”能力,所以就比較容易沉。于是此時就有人想到將原本一體的船艙分隔成一個個獨立的船艙,船艙之間都使用鋼板焊死隔開,這些鋼板就是所謂的艙壁了。采用這種設計后,就算當其中一個兩個船艙進水了,也不會影響到其他船艙,這艘船依舊能夠正常行駛。

在軟件層面上借鑒這種思想,我們可以讓每個服務都運行在自己獨立的線程池中,線程池之間是互不干擾的,服務A的線程池資源耗盡也不會影響到服務B。此時線程池就像船艙的艙壁一樣將不同的服務資源隔離開來,這樣某個服務掛掉也不會影響其他服務的運行

4、斷路器模式:

斷路器模式的思想實際上和家里的斷路器一樣,在軟件層面大致就是對某個服務的API進行監控,若在一定時間內調用的失敗率或失敗次數達到指定的閾值就認為該API是不可用的從而觸發“跳閘”,即此時斷路器就處于打開狀態。過了一段時間后斷路器會處于一個半開狀態,若在半開狀態時嘗試調用該API成功后就會關閉斷路器,否則依舊認為不可用讓斷路器繼續處于打開狀態

斷路器三態轉換如下圖:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

斷路器模式原文:CircuitBreaker

而Spring Cloud已經提供了相關的服務容錯組件,組件里已經整合了這些常用的方案,不需要我們手動去實現。在此之前Spring Cloud提供的唯一服務容錯組件是Hystrix,不過現在多了一個選擇,那就是Spring Cloud Alibaba的Sentinel組件。關于Hystrix可以參考如下文章,本文主要介紹Sentinel:

  • Spring Cloud Hystrix - 服務容錯

Sentinel簡介及整合

Sentinel 是什么,官方描述如下:

隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分布式服務架構的輕量級流量控制、熔斷降級框架,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助您保護服務的穩定性。

官方GitHub倉庫地址如下:

https://github.com/alibaba/Sentinel

現在我們來為項目整合Sentinel,第一步添加如下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- actuator,用于暴露監控端點 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Tips:該項目使用的Spring Cloud版本為Greenwich.SR1,Spring Cloud Alibaba版本為0.9.0.RELEASE

第二步配置actuator:

# 暴露所有端點
management:
  endpoints:
    web:
      exposure:
        include: '*'

完成以上兩步后,啟動項目,使用瀏覽器訪問http://localhost:8080/actuator/sentinel,返回如下結果代表整合成功:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]


搭建Sentinel Dashboard控制臺

在上一小節中,我們已經為項目成功整合了Sentinel,但這也只不過是完成了第一步。因為此時沒有一個可視化的界面能讓我們看到Sentinel具體的監控信息,所以還需要搭建官方提供的可視化Sentinel控制臺,然后在控制臺中整合項目的監控信息。

Sentinel控制臺的下載地址如下:

https://github.com/alibaba/Sentinel/releases

Sentinel Dashboard有多個release版本,應該選擇哪個呢?如果你是用在生產環境則選擇與項目中sentinel-core版本對應的即可,如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

若只是學習或測試使用那就可以隨便選擇了,只要能用就行,所以我這里選擇最新版本1.6.3,注意這里選擇jar包進行下載:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

下載完成后,存放到一個你覺得ok的目錄下,然后打開cmd,通過命令運行該jar包。如下:

E:\Spring Cloud Alibaba\Sentinel>java -jar sentinel-dashboard-1.6.3.jar

啟動成功,監聽的端口是8080:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

使用瀏覽器訪問http://localhost:8080進入到登錄頁面,默認的賬戶密碼都是sentinel:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

登錄成功,此時控制臺上是空白的,因為還沒有監控任何的項目:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

所以接著到項目中整合一下Sentinel Dashboard的請求地址,在配置文件中添加如下配置:

spring:
  cloud:
    sentinel:
      transport:
        # 配置sentinel控制臺的地址
        dashboard: 127.0.0.1:8080

配置完成啟動項目后需要先訪問一下該項目的接口,因為Sentinel Dashboard是懶加載的,只有監控的項目被訪問后才會收集監控信息。這樣才能看到下圖的實時監控信息,我這里的服務名是content-center:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]


Sentinel 相關配置項小結

客戶端(微服務)連接控制臺相關配置項:

spring:
  cloud:
    sentinel:
      transport:
        #指定控制臺的地址
        dashboard: localhost:8080
        #指定和控制臺通信的IP
        #如不配置,會自動選擇一個IP注冊
        client-ip:  127.0.0.1
        #指定和控制臺通信的端口,默認值8719
        #如不設置,會自動從8719開始掃描,依次+1,直到找到未被占用的端口
        port: 8719
        #心跳發送周期,默認值null
        #但在S impleHttpHeartbeatSender會用默認值10秒
        heartbeat- interval-ms :  10000

控制臺相關配置項:

配置項 默認值 最小值 描述
sentinel.dashboard.app.hideAppNoMachineMillis 0 60000 是否隱藏無健康節點的應用,距離最近一次主機心跳時間的毫秒數,默認關閉
sentinel.dashboard.removeAppNoMachineMillis 0 120000 是否自動刪除無健康節點的應用,距離最近一次其下節點的心跳時間毫秒數,默認關閉
sentinel.dashboard.unhealthyMachineMillis 60000 30000 主機失聯判定,不可關閉
sentinel.dashboard.autoRemoveMachineMillis 0 300000 距離最近心跳時間超過指定時間是否自動刪除失聯節點,默認關閉
server.port 8080 - 指定端口
csp.sentinel.dashboard.server localhost:8080 - 指定地址
project.name - - 指定程序的名稱
sentinel.dashboard.auth.username [1.6版本支持] sentinel - Sentinel Dashboard登錄賬號
sentinel.dashboard.auth.password [1.6版本支持] sentinel - Sentinel Dashboard登錄密碼
server.servlet.session.timeout [1.6版本支持] 30分鐘 - 登錄Session過期時間。配置為7200表示7200秒;配置為60m表示60分鐘

控制臺配置項需在啟動命令中指定,例如指定賬戶密碼,如下:

java -jar -Dsentinel.dashboard.auth.username=admin -Dsentinel.dashboard.auth.password=123456 sentinel-dashboard-1.6.3.jar

流控規則

我們可以在Sentinel控制臺中給某個接口添加流控規則,點擊簇點鏈路,可以看到該服務曾經被訪問過的路徑:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

然后點擊接口右邊的流控按鈕就可以添加流控規則:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

添加成功:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

此時訪問該服務的接口,QPS超過設定的閾值1,就會返回如下信息:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]


關于流控規則中的流控模式:

  • 直接:當前資源的QPS達到設定的閾值,就觸發限流
  • 關聯:當關聯的資源的QPS達到設定的閾值,就觸發限流。例如,/shares/1關聯了/query,那么/query達到閾值,就會對/shares/1限流
  • 鏈路:只記錄指定鏈路上的流量,這種模式是針對接口級別的來源進行限流

鏈路模式稍微有些抽象,這里舉個簡單的例子說明一下。下圖中有兩個調用鏈路,圖中的/test-b/test-a實際就是兩個接口,它們都調用了同一個common資源,所以/test-b/test-a就稱為common的入口資源:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

此時我為common添加一個限流規則如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

可以看到流控模式選擇鏈路后,需要填寫一個入口資源,我這里填的是/test-a,那么這意味著什么呢?意味著當/test-a的QPS達到該規則的閾值后,就會對/test-a限流,同時/test-b不會受到任何影響。說明這種流控模式可以針對接口級別的來源進行限流,而“針對來源”則是對微服務級別的來源進行限流。

關于流控規則中的監控效果:

  • 快速失敗:直接失敗,拋出異常,不做任何額外的處理,是最簡單的效果
    • 相關源碼:com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController
  • Warm Up(預熱):會根據codeFactor(默認3)的值,從閾值除以codeFactor,經過預熱時長,才到達設置的QPS閾值。適用于將突然增大的流量轉換為緩步增長的場景
    • 相關的官方文檔:限流 - 冷啟動
    • 相關源碼:com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController
  • 排隊等待:勻速排隊,讓請求以均勻的速度通過,若請求等待時間超過設置的超時時間則拋棄該請求,閾值類型必須設置成QPS,否則無效。適用于突發流量的場景
    • 相關的官方文檔:限流 - 勻速器
    • 相關源碼:com.alibaba.csp.sentinel.slots.block.flow.controller.RateLimiterController

關于流控的官方文檔:

  • 流量控制

降級規則

服務降級實際就是斷路器模式的應用,相對于流控規則,降級規則要簡單一些。降級規則可以在“簇點鏈路”或“降級規則”中添加:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

例如,這里給/shares/1添加降級規則,降級策略先以RT為例:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

該降級規則的含義如下圖:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

此時訪問/shares/1接口,秒級平均響應時間超出閾值1,并且在時間窗口內通過的請求大于等于5,就會返回如下信息:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

關于RT這種降級策略需要注意的點:

  • RT默認最大為4900ms,所以即便設置的值大于4900ms也依舊會按照4900ms計算
    • 可以通過參數修改:-Dcsp.sentinel.statistic.max.rt=xxx

若將降級策略改為異常比例,則含義如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

若將降級策略改為異常數,則含義如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

關于異常數這種降級策略需要注意的點:

  • 若將時間窗口的值設置小于60秒則可能會出問題,因為異常數的統計是分鐘級別的,時間窗口小于60秒就有可能不斷進入降級狀態

降級規則的相關源碼:

  • com.alibaba.csp.sentinel.slots.block.degradeDegradeRule#passCheck(對降級的判斷都在這個方法里完成)

在文章的開頭我們介紹過斷路器有三個狀態,所以這里需要提及一下的是目前Sentinel的降級斷路器是不支持半開狀態的,只有打開和關閉兩個狀態,據官方人員描述說是會預計在未來添加半開的支持。

關于降級的官方文檔:

  • 熔斷降級

熱點規則

熱點規則全稱是熱點參數限流規則,從名稱可以得知,需要有參數的接口才能夠使用熱點規則。例如,有一個接口的代碼如下:

@GetMapping("/test-hot")
@SentinelResource("hot")  // 該注解用于聲明是Sentinel需要監控的資源
public String testHot(@RequestParam(required = false) String a,
                      @RequestParam(required = false) String b) {
    return a + " " + b;
}

在控制臺中為hot添加熱點規則,如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

  • Tips:參數索引從0開始,對應到代碼中的話,則參數a的索引為0,參數b的索引為1,所以該規則是作用于參數a

添加完該規則后,此時訪問這個接口,兩個參數都傳值,當QPS達到閾值時,就會拋出如下異常信息:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

如果不傳參數a,僅傳參數b的話,則不會受到該規則的限流,如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

說明該規則表達的含義是:在時間窗口內,一旦該規則指定的索引參數QPS達到了閾值,則會觸發限流

除此之外,還有高級選項,在這里可以添加參數例外項,如下示例:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

添加完成后,此時將參數a的值設置為5,然后頻繁發送請求,會發現即便QPS超過1也不會觸發限流:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

這是因為參數a的值設置為5時,限流閾值是1000,設置為其他值時,限流閾值才是1。這就是所謂的參數例外項了,即參數的為某個特定的值時,只受參數例外項里的限流閾值影響。

熱點規則適用的場景:

  • 適用于存在熱點參數并希望提升API可用性的場景,即某個特定請求參數QPS偏高于其他請求參數時,僅對該參數的請求限流,使用其他請求參數則可以正常響應,這樣可以提高一定的可用性

使用熱點規則需要注意的點:

  • 參數必須是基本類型或者String類型,否則將不會生效

熱點規則相關源碼:

  • com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowChecker#passCheck(對熱點參數規則的判斷邏輯都在這個方法里)

系統規則

系統規則全稱為系統保護規則,從名稱可以得知該規則是用于保護系統、防止系統負載過高而崩潰的,所以觸發系統規則后會對整個系統限流。添加系統規則如下圖所示:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

設置系統規則比較簡單,選擇一個合適的閾值類型并填寫閾值即可:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

關于閾值類型:

  • LOAD(負載):當系統load1(1分鐘的load)超過閾值,且并發線程數超過系統容量時觸發,建議設置為CPU核心數 2.5(注意:僅對 Linux/Unit-like 機器生效)。例如CPU核心數為4,`4 2.5 = 10`
    • 系統容量 = maxQPS * minRT;(由Sentinel計算 )
      • maxQPS:秒級統計出來的最大QPS
      • minRT:秒級統計出來的最小響應時間
    • 相關源碼:com.alibaba.csp.sentinel.slots.system.SystemRuleManager#checkBbr
  • RT:所有入口流量的平均RT達到閾值時觸發
  • 線程數:所有入口流量的并發線程數達到閾值時觸發
  • 入口QPS:所有入口流量的QPS達到閾值時觸發
  • CPU使用率:系統CPU使用率達到閾值時觸發

系統規則的判斷邏輯所在的源碼如下:

  • com.alibaba.csp.sentinel.slots.system.SystemRuleManager#checkSystem

授權規則

授權規則用于限制某個資源僅允許哪個服務訪問,所以通常用于對服務消費者的訪問權進行控制。我們可以在簇點鏈路中為某個接口添加授權規則,這里以/shares/1接口為例,如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

新增授權規則:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

  • 該授權規則的含義為:僅允許test服務訪問/shares/1接口,如果授權類型設置為黑名單則表示/shares/1接口不允許test服務訪問。即白名單是授權某個服務訪問,黑名單則是限制某個服務訪問,從而實現訪問控制的效果。

代碼配置規則

上面幾個關于規則的小節中已經介紹了如何在Sentinel控制臺中配置各種規則,除此之外,Sentinel還支持在代碼中配置這些規則,所以本小節將簡單介紹一下如何在代碼中進行配置。

代碼如下(Tips:代碼基于sentinel-core 1.5.2版本):

package com.zj.node.contentcenter.controller.content;

import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityRuleManager;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowItem;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
import com.alibaba.csp.sentinel.slots.system.SystemRule;
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 添加Sentinel規則
 *
 * @author 01
 * @date 2019-07-31
 **/
@Slf4j
@RestController
public class SentinelRuleController {

    /**
     * 測試添加流控規則
     */
    @PostMapping("/test-add-flow-rule")
    public String testAddFlowRile(String resourceName) {
        log.info("add flow rule. resourceName is {}", resourceName);
        addFlowQpsRule(resourceName);

        return "add flow rule success!";
    }

    /**
     * 添加流控規則
     *
     * @param resourceName 資源名稱
     */
    private void addFlowQpsRule(String resourceName) {
        // 規則列表
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule = new FlowRule(resourceName);
        // 針對來源
        rule.setLimitApp("default");
        // 設置閾值類型為QPS
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 單機閾值
        rule.setCount(20);
        // 將規則添加到規則列表
        rules.add(rule);
        // 加載規則列表
        FlowRuleManager.loadRules(rules);
    }

    /**
     * 添加降級規則
     *
     * @param resourceName 資源名稱
     */
    private void addDegradeRule(String resourceName) {
        List<DegradeRule> rules = new ArrayList<>();
        DegradeRule rule = new DegradeRule(resourceName);
        // 設置降級策略為 RT
        rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
        // set threshold RT, 10 ms(設置RT時間閾值)
        rule.setCount(10);
        // 時間窗口
        rule.setTimeWindow(10);
        rules.add(rule);
        DegradeRuleManager.loadRules(rules);
    }

    /**
     * 添加熱點規則
     *
     * @param resourceName 資源名稱
     */
    private void addHotRule(String resourceName) {
        ParamFlowRule rule = new ParamFlowRule(resourceName);
        // 參數索引
        rule.setParamIdx(0);
        // 單機閾值
        rule.setCount(5);

        // 添加參數例外項
        ParamFlowItem item = new ParamFlowItem();
        // 參數類型
        item.setClassType(int.class.getName());
        // 參數值
        item.setObject("5");
        // 限流閾值
        item.setCount(10);
        rule.setParamFlowItemList(Collections.singletonList(item));

        ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
    }

    /**
     * 添加系統規則
     */
    private void addSystemRule() {
        List<SystemRule> rules = new ArrayList<>();
        SystemRule rule = new SystemRule();
        // 設置系統最高負載閾值
        rule.setHighestSystemLoad(10);
        rules.add(rule);
        SystemRuleManager.loadRules(rules);
    }

    /**
     * 添加授權規則
     *
     * @param resourceName 資源名稱
     * @param limitApp     流控應用(指調用方,多個調用方名稱使用英文逗號分隔)
     */
    private void addAuthorityRule(String resourceName, String limitApp) {
        AuthorityRule rule = new AuthorityRule();
        // 資源名稱
        rule.setResource(resourceName);
        // 流控應用
        rule.setLimitApp(limitApp);
        // 設置授權類型為白名單
        rule.setStrategy(RuleConstant.AUTHORITY_WHITE);

        AuthorityRuleManager.loadRules(Collections.singletonList(rule));
    }
}

我們來測試添加流控規則,使用postman訪問測試接口,如下:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

添加成功后,到Sentinel控制臺中,查看是否存在該規則:
Spring Cloud Alibaba之服務容錯組件 - Sentinel [基礎篇]

從上圖中可以看到該流控規則已經成功添加到Sentinel中了,證明測試成功。至于其他的規則也可以使用類似的方式添加,并且也都給出了代碼,這里就不一一去演示了。


Sentinel規則參數總結

下面總結一下Alibaba Sentinel各種規則的參數,并且提供了官方文檔的鏈接,若未來本文不再適用,可以自行點擊鏈接前往官方文檔查看

1、流控規則:

Field 說明 默認值
resource 資源名,資源名是限流規則的作用對象
count 限流閾值
grade 限流閾值類型,QPS 或線程數模式 QPS 模式
limitApp 流控針對的調用來源 default,代表不區分調用來源
strategy 判斷的根據是資源自身,還是根據其它關聯資源 (refResource),還是根據鏈路入口 根據資源本身
controlBehavior 流控效果(直接拒絕 / 排隊等待 / 慢啟動模式) 直接拒絕

官方文檔:

  • 流量控制
  • 如何使用#流量控制規則-flowrule

2、降級規則:

Field 說明 默認值
resource 資源名,即限流規則的作用對象
count 閾值
grade 降級模式,根據 RT 降級還是根據異常比例或異常數降級 RT
timeWindow 降級的時間,單位為 s

官方文檔:

  • 如何使用#熔斷降級規則-degraderule
  • 熔斷降級

3、熱點規則:

Field 說明 默認值
resource 資源名,即熱點規則的作用對象
count 限流閾值,必填
grade 限流模式 QPS 模式
durationInSec 統計窗口時間長度(單位為秒),1.6.0 版本開始支持 1s
controlBehavior 流控效果(支持快速失敗和勻速排隊模式),1.6.0 版本開始支持 快速失敗
maxQueueingTimeMs 最大排隊等待時長(僅在勻速排隊模式生效),1.6.0 版本開始支持 0ms
paramIdx 熱點參數的索引,必填,對應 SphU.entry(xxx, args) 中的參數索引位置
paramFlowItemList 參數例外項,可以針對指定的參數值單獨設置限流閾值,不受前面 count 閾值的限制。僅支持基本類型和字符串類型
clusterMode 是否是集群參數流控規則 false
clusterConfig 集群流控相關配置

官方文檔:

  • 熱點參數限流#熱點參數規則

4、系統規則:

Field 說明 默認值
highestSystemLoad 最大的 load1,參考值 -1 (不生效)
avgRt 所有入口流量的平均響應時間 -1 (不生效)
maxThread 入口流量的最大并發數 -1 (不生效)
qps 所有入口資源的 QPS -1 (不生效)

官方文檔:

  • 如何使用#系統保護規則-systemrule
  • 系統自適應限流

5、授權規則:

Field 說明 默認值
resource 資源名,即授權規則的作用對象
limitApp 流控應用(指調用方,即服務消費者),對應的黑名單/白名單,不同 origin 用英文逗號(,)分隔,如 appA,appB
strategy 限制模式,AUTHORITY_WHITE 為白名單模式,AUTHORITY_BLACK 為黑名單模式,默認為白名單模式 AUTHORITY_WHITE

官方文檔:

  • 如何使用#訪問控制規則-authorityrule
  • 黑白名單控制
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大英县| 桦南县| 西乌珠穆沁旗| 靖宇县| 庆城县| 定远县| 长垣县| 乐陵市| 朝阳县| 兰州市| 新源县| 滨海县| 高要市| 朔州市| 溆浦县| 白玉县| 唐海县| 永新县| 万宁市| 佛坪县| 大姚县| 同心县| 道孚县| 甘肃省| 沾益县| 类乌齐县| 罗甸县| 乐至县| 华蓥市| 将乐县| 安徽省| 神池县| 金塔县| 长乐市| 阳高县| 新津县| 清徐县| 琼结县| 安达市| 安西县| 广灵县|