日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Sentinel 可以簡單的分為 Sentinel 核心庫和 Dashboard。核心庫不依賴 Dashboard,但是結合 Dashboard 可以取得最好的效果。

這篇文章主要介紹 Sentinel 引入和規則配置等使用方法。 我們說的資源,可以是任何東西,服務,服務里的方法,甚至是一段代碼。

因為Sentinel控制臺配置的規則是在內存中的,所以我們需要Nacos來存儲規則實現持久化。

 

本文主要分為四個部分:

  • Sentinel代碼方式示例效果
  • Sentinel控制臺安裝
  • Springboot項目接入Sentinel控制臺配置規則
  • 使用Nacos存儲規則并實時更新

Sentinel代碼方式示例效果

在講解如何使用nacos存儲規則之前,我們先來看下直接代碼定義規則和資源的使用方式,這部分不是本文重點。

Sentinel的使用步驟大致可以分為三步:

  1. 引入依賴
  2. 定義資源
  3. 定義規則

我們先來看下Sentinel文檔上的一段代碼。

1.引入依賴

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.0</version>
</dependency>

2.定義資源

public static void main(String[] args) {
    // 配置規則.
    initFlowRules();
    while (true) {
        // 1.5.0 版本開始可以直接利用 try-with-resources 特性,自動 exit entry
        try (Entry entry = SphU.entry("HelloWorld")) {
            // 被保護的邏輯
            System.out.println("hello world");
        } catch (BlockException ex) {
            // 處理被流控的邏輯
            System.out.println("blocked!");
        }
    }
}

在這里我們定義了一個“HelloWorld”的資源,不斷打印hello world。

3.定義規則

private static void initFlowRules(){
    List<FlowRule> rules = new ArrayList<>(); //定義規則列表
    FlowRule rule = new FlowRule(); //定義一個規則
    rule.setResource("HelloWorld"); //什么資源應用此規則
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setCount(20); //沒秒只能20次請求
    rules.add(rule);//加入該規則
    FlowRuleManager.loadRules(rules); //載入規則列表
}

這里定義了資源“HelloWorld”每秒只能通過20個請求。

運行該main方法,可以看到控制臺輸出以下內容。

Sentinel+Nacos實現資源流控、降級、熱點、授權

Sentinel代碼方式示例效果

可以看到請求通過20次打印hello world后再請求會阻塞打印blocked!,等到下一秒才會繼續打印hello world。

這是一個簡單的示例用于說明下Sentinel的作用,下面我們會介紹Sentinel控制臺的使用以及搭配Nacos存儲規則并實時更新規則。

Sentinel控制臺安裝

Sentinel控制臺提供web可視化頁面配置規則,我們需要下載官方提供的jar包安裝啟動該服務。

1.jar包下載

可以在官網github上下載:https://github.com/alibaba/Sentinel/releases

拉到每個版本信息區塊的最下方有jar文件的下載地址。

Sentinel+Nacos實現資源流控、降級、熱點、授權

jar文件的下載地址

2.啟動腳本

注意根據下載的jar包修改文件名

JAVA -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar
Sentinel+Nacos實現資源流控、降級、熱點、授權

啟動Sentinel控制臺

3.訪問Sentinel控制臺

地址和賬號密碼 http://localhost:8080 賬號:sentinel 密碼:sentinel

Sentinel+Nacos實現資源流控、降級、熱點、授權

訪問Sentinel控制臺


Sentinel+Nacos實現資源流控、降級、熱點、授權

訪問Sentinel控制臺

控制臺已經啟動完成,可以看到左邊首頁下面顯示了一個sentinel-dashboard的項目,項目包含了監控、鏈路、各種規則配置和機器列表等菜單可以管理該項目規則,如果有新項目連接到控制臺,這里會出現新的項目菜單。

springboot項目接入Sentinel控制臺配置規則

1.引入依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

注意我這里沒有寫版本,因為我在父項目的pom文件中指定了阿里巴巴的依賴版本,子項目的相關依賴會自動尋找版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR8</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.配置yml

接下去我們可以在項目中連接到該控制臺,這樣項目里的資源就可以被控制臺管理了。

spring:
  Application:
    name: sentinel
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080  #啟動本項目后需要請求一次才能向sentinel控制臺注冊

注意:啟動項目后需要請求一次項目才能向sentinel控制臺注冊。

啟動項目后我們請求一下項目隨便一個接口,然后在控制臺可以看到多了一個新項目的菜單了。

Sentinel+Nacos實現資源流控、降級、熱點、授權

新項目的菜單

3.控制臺配置項目資源規則

我在項目里寫了一個簡單的接口如下:

@RequestMapping("/")
public String test(){
    return "ok";
}

可以在控制臺的簇點鏈路菜單看到這個接口資源。

Sentinel+Nacos實現資源流控、降級、熱點、授權

簇點鏈路菜單

可以看到表格右邊有四個按鈕,可以對該資源進行流控、降級、熱點、授權的配置。

  • 流控
    流量控制,可以在流控中設置主要三塊內容:閾值類型+閾值、流控模式、流控效果。
Sentinel+Nacos實現資源流控、降級、熱點、授權

流控


閾值類型+閾值:可以設置QPS的閾值,代表每秒最多允許請求多少次資源;可以設置線程數,代表可以同時運行的線程數量。
流控模式:有直接、關聯、鏈路三種。
--直接:代表超過閾值直接限流
--關聯:代表關聯的資源達到閾值時也進行限流(比如支付接口不行了把下單接口也限流掉)。
--鏈路:代表當服務到達閾值時,所有使用該服務的服務也限流。
流控效果:有快速失敗、Warm Up、排隊等待三種。
--快速失敗:直接限流操作。
--Warm Up:冷啟動,需要配置預熱時長,意思是當突然有大量請求時慢慢的放一些請求通過,預熱時長過后恢復到正常限流狀態,達到閾值時再進行限流。
--排隊等待:讓限流的請求排隊等待系統空閑時再通過,需要配置超時時間,過了超時時間再拒絕請求。

  • 降級
    降級有慢調用比例、異常比例、異常數三種熔斷策略。
Sentinel+Nacos實現資源流控、降級、熱點、授權

降級


--慢調用比例:需要設置最大RT(最大的響應時間)和比例閾值(0.0至1.0之間),請求大于最大RT的判定為慢調用,當慢調用比例到達比例閾值時進行熔斷降級。
--異常比例:需要設置一個比例閾值,當異常比例達到該閾值時進行熔斷降級。
--異常數:需要設置一個異常數,達到該異常數時進行熔斷降級。
降級需要設置一個熔斷時長和最小請求數,代表熔斷持續的時間,當大于最小請求數時降級規則才生效。

  • 熱點
    熱點即經常訪問的數據, 很多時候我們希望統計某個熱點數據中訪問頻次最高的 Top K 數據,并對其訪問進行限制。對請求中攜帶的參數進行判斷是否是熱點數據,是熱點數據則根據規則限流。需要設置參數所有和閾值,參數所有從0開始代表請求的第幾個參數是熱點參數。
  • 授權
    授權其實就是黑白名單的設置,黑名單模式代表黑名單里的不允許訪問,白名單模式代表白名單里的才允許訪問。需要設置對應的應用名稱。

4.示例配置

我們以流控操作來做個示例,我們在根請求接口的資源上配置一個流控規則。

Sentinel+Nacos實現資源流控、降級、熱點、授權

示例配置

設置閾值類型為QPS,閾值為1,代表每秒只能通過1個請求。我們來看看效果。

瀏覽器請求接口,然后按F5不停刷新,可以看到每秒會出現一次返回一次正確信息,其他都會返回限流信息。

Sentinel+Nacos實現資源流控、降級、熱點、授權

返回正確信息


Sentinel+Nacos實現資源流控、降級、熱點、授權

返回限流信息

項目接入控制臺部分就講到這了,需要注意的是這里的控制臺配置是存在內存中的,如果你的項目重新啟動配置的規則就沒了,所以我們需要一個可以持久化配置規則的地方,接下去我們介紹下Nacos來持久化存儲Sentinel配置規則。

使用Nacos存儲規則并實時更新

Sentinel提供了多種數據源的支持,包括Nacos、Zookeeper、文件數據源等。

Sentinel+Nacos實現資源流控、降級、熱點、授權

 

使用Nacos存儲需要先安裝Nacos,可以看我的另外一篇Nacos安裝教程文章。

1.引入Nacos依賴

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

2.配置Nacos數據源

安裝完Nacos后我們首先在項目中配置Sentinel的數據源為Nacos。

spring:
  application:
    name: sentinel
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080  #啟動本項目后需要請求一次才能向sentinel控制臺注冊
      datasource: 
        ds2:
          nacos: 
            server-addr: 192.168.67.129:8848
            data-id: sentinel
            group-id: Sentinel:Demo
            data-type: json
            rule-type: flow

ds2是數據源名稱,其他主要配置下:

  • Nacos的地址
  • data-id和group-id:等會需要在Nacos控制臺新增一個同樣的配置才能生效
  • data-type:配置規則數據類型
  • rule-type:flow代表流控類型

3.在Nacos控制臺配置規則內容

我們在Nacos控制臺的配置列表新增一個配置。

Sentinel+Nacos實現資源流控、降級、熱點、授權

新增一個配置


Sentinel+Nacos實現資源流控、降級、熱點、授權

新增一個配置

配置內容部分如下:

[
    {
        "resource": "/",
        "limitApp": "default",
        "grade": 1,
        "count": 2,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

resource:資源名,資源名是限流規則的作用對象

count:限流閾值grade:限流閾值類型,QPS 模式(1)或并發線程數模式(0)

limitApp:流控針對的調用來源

strategy:調用關系限流策略:直接、鏈路、關聯

controlBehavior:流控效果(直接拒絕/WarmUp/勻速+排隊等待),不支持按調用關系限流

clusterMode:是否集群限流

4.效果

啟動項目,配置好Nacos后,我們可以直接在Sentinel控制臺看到nacos的配置已經同步到Sentinel控制臺了,并且規則已經生效了,以后該規則只需要在Naocs配置規則就能實時生效了。

Sentinel+Nacos實現資源流控、降級、熱點、授權

Nacos規則同步到Sentinel控制臺

需要注意的是,目前只支持Nacos規則同步到Sentinel控制臺,不支持在Sentinel控制臺配置規則同步到Nacos。

好了,今天的內容就講到這里了,希望本文對你有所幫助。

分享到:
標簽:Sentinel
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定