日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sentinel 不显示项目_Sentinel+Nacos实现资源流控、降级、热点、授权

發(fā)布時(shí)間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sentinel 不显示项目_Sentinel+Nacos实现资源流控、降级、热点、授权 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文同名博客老炮說(shuō)Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/實(shí)戰(zhàn)項(xiàng)目等文章資料

Sentinel+Nacos 是微服務(wù)環(huán)境搭建必不可少的兩個(gè)組件,這里給大家推薦一套微服務(wù)教程:

SpringCloud微服務(wù)電商項(xiàng)目教程 - 老炮說(shuō)Java-程序員編程資料和編程經(jīng)驗(yàn)分享平臺(tái)?www.laopaojava.com

教程主要包含下面內(nèi)容:

Sentinel 可以簡(jiǎn)單的分為 Sentinel 核心庫(kù)和 Dashboard。核心庫(kù)不依賴 Dashboard,但是結(jié)合 Dashboard 可以取得最好的效果。

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

因?yàn)镾entinel控制臺(tái)配置的規(guī)則是在內(nèi)存中的,所以我們需要Nacos來(lái)存儲(chǔ)規(guī)則實(shí)現(xiàn)持久化。

本文主要分為四個(gè)部分:

  • Sentinel代碼方式示例效果
  • Sentinel控制臺(tái)安裝
  • Springboot項(xiàng)目接入Sentinel控制臺(tái)配置規(guī)則
  • 使用Nacos存儲(chǔ)規(guī)則并實(shí)時(shí)更新

Sentinel代碼方式示例效果

在講解如何使用nacos存儲(chǔ)規(guī)則之前,我們先來(lái)看下直接代碼定義規(guī)則和資源的使用方式,這部分不是本文重點(diǎn)。

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

  • 引入依賴
  • 定義資源
  • 定義規(guī)則
  • 我們先來(lái)看下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) {// 配置規(guī)則.initFlowRules();while (true) {// 1.5.0 版本開(kāi)始可以直接利用 try-with-resources 特性,自動(dòng) exit entrytry (Entry entry = SphU.entry("HelloWorld")) {// 被保護(hù)的邏輯System.out.println("hello world");} catch (BlockException ex) {// 處理被流控的邏輯System.out.println("blocked!");}} }

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

    3.定義規(guī)則

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

    這里定義了資源“HelloWorld”每秒只能通過(guò)20個(gè)請(qǐng)求。

    運(yùn)行該main方法,可以看到控制臺(tái)輸出以下內(nèi)容。

    Sentinel代碼方式示例效果

    可以看到請(qǐng)求通過(guò)20次打印hello world后再請(qǐng)求會(huì)阻塞打印blocked!,等到下一秒才會(huì)繼續(xù)打印hello world。

    這是一個(gè)簡(jiǎn)單的示例用于說(shuō)明下Sentinel的作用,下面我們會(huì)介紹Sentinel控制臺(tái)的使用以及搭配Nacos存儲(chǔ)規(guī)則并實(shí)時(shí)更新規(guī)則。

    Sentinel控制臺(tái)安裝

    Sentinel控制臺(tái)提供web可視化頁(yè)面配置規(guī)則,我們需要下載官方提供的jar包安裝啟動(dòng)該服務(wù)。

    1.jar包下載

    可以在官網(wǎng)github上下載:https://github.com/alibaba/Sentinel/releases

    拉到每個(gè)版本信息區(qū)塊的最下方有jar文件的下載地址。

    jar文件的下載地址

    2.啟動(dòng)腳本:

    注意根據(jù)下載的jar包修改文件名

    java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar

    啟動(dòng)Sentinel控制臺(tái)

    3.訪問(wèn)Sentinel控制臺(tái)

    地址和賬號(hào)密碼 http://localhost:8080 賬號(hào):sentinel 密碼:sentinel

    訪問(wèn)Sentinel控制臺(tái)

    訪問(wèn)Sentinel控制臺(tái)

    控制臺(tái)已經(jīng)啟動(dòng)完成,可以看到左邊首頁(yè)下面顯示了一個(gè)sentinel-dashboard的項(xiàng)目,項(xiàng)目包含了監(jiān)控、鏈路、各種規(guī)則配置和機(jī)器列表等菜單可以管理該項(xiàng)目規(guī)則,如果有新項(xiàng)目連接到控制臺(tái),這里會(huì)出現(xiàn)新的項(xiàng)目菜單。

    springboot項(xiàng)目接入Sentinel控制臺(tái)配置規(guī)則

    1.引入依賴

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

    注意我這里沒(méi)有寫版本,因?yàn)槲以诟疙?xiàng)目的pom文件中指定了阿里巴巴的依賴版本,子項(xiàng)目的相關(guān)依賴會(huì)自動(dòng)尋找版本。

    <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

    接下去我們可以在項(xiàng)目中連接到該控制臺(tái),這樣項(xiàng)目里的資源就可以被控制臺(tái)管理了。

    spring:application:name: sentinelcloud:sentinel:transport:port: 8719dashboard: localhost:8080 #啟動(dòng)本項(xiàng)目后需要請(qǐng)求一次才能向sentinel控制臺(tái)注冊(cè)

    注意:啟動(dòng)項(xiàng)目后需要請(qǐng)求一次項(xiàng)目才能向sentinel控制臺(tái)注冊(cè)。

    啟動(dòng)項(xiàng)目后我們請(qǐng)求一下項(xiàng)目隨便一個(gè)接口,然后在控制臺(tái)可以看到多了一個(gè)新項(xiàng)目的菜單了。

    新項(xiàng)目的菜單

    3.控制臺(tái)配置項(xiàng)目資源規(guī)則

    我在項(xiàng)目里寫了一個(gè)簡(jiǎn)單的接口如下:

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

    可以在控制臺(tái)的簇點(diǎn)鏈路菜單看到這個(gè)接口資源。

    簇點(diǎn)鏈路菜單

    可以看到表格右邊有四個(gè)按鈕,可以對(duì)該資源進(jìn)行流控、降級(jí)、熱點(diǎn)、授權(quán)的配置。

    • 流控 流量控制,可以在流控中設(shè)置主要三塊內(nèi)容:閾值類型+閾值、流控模式、流控效果。

    流控

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

    • 降級(jí) 降級(jí)有慢調(diào)用比例、異常比例、異常數(shù)三種熔斷策略。

    降級(jí)

    --慢調(diào)用比例:需要設(shè)置最大RT(最大的響應(yīng)時(shí)間)和比例閾值(0.0至1.0之間),請(qǐng)求大于最大RT的判定為慢調(diào)用,當(dāng)慢調(diào)用比例到達(dá)比例閾值時(shí)進(jìn)行熔斷降級(jí)。 --異常比例:需要設(shè)置一個(gè)比例閾值,當(dāng)異常比例達(dá)到該閾值時(shí)進(jìn)行熔斷降級(jí)。 --異常數(shù):需要設(shè)置一個(gè)異常數(shù),達(dá)到該異常數(shù)時(shí)進(jìn)行熔斷降級(jí)。 降級(jí)需要設(shè)置一個(gè)熔斷時(shí)長(zhǎng)和最小請(qǐng)求數(shù),代表熔斷持續(xù)的時(shí)間,當(dāng)大于最小請(qǐng)求數(shù)時(shí)降級(jí)規(guī)則才生效。

    • 熱點(diǎn) 熱點(diǎn)即經(jīng)常訪問(wèn)的數(shù)據(jù), 很多時(shí)候我們希望統(tǒng)計(jì)某個(gè)熱點(diǎn)數(shù)據(jù)中訪問(wèn)頻次最高的 Top K 數(shù)據(jù),并對(duì)其訪問(wèn)進(jìn)行限制。對(duì)請(qǐng)求中攜帶的參數(shù)進(jìn)行判斷是否是熱點(diǎn)數(shù)據(jù),是熱點(diǎn)數(shù)據(jù)則根據(jù)規(guī)則限流。需要設(shè)置參數(shù)所有和閾值,參數(shù)所有從0開(kāi)始代表請(qǐng)求的第幾個(gè)參數(shù)是熱點(diǎn)參數(shù)。
    • 授權(quán) 授權(quán)其實(shí)就是黑白名單的設(shè)置,黑名單模式代表黑名單里的不允許訪問(wèn),白名單模式代表白名單里的才允許訪問(wèn)。需要設(shè)置對(duì)應(yīng)的應(yīng)用名稱。

    4.示例配置

    我們以流控操作來(lái)做個(gè)示例,我們?cè)诟?qǐng)求接口的資源上配置一個(gè)流控規(guī)則。

    示例配置

    設(shè)置閾值類型為QPS,閾值為1,代表每秒只能通過(guò)1個(gè)請(qǐng)求。我們來(lái)看看效果。

    瀏覽器請(qǐng)求接口,然后按F5不停刷新,可以看到每秒會(huì)出現(xiàn)一次返回一次正確信息,其他都會(huì)返回限流信息。

    返回正確信息

    返回限流信息

    項(xiàng)目接入控制臺(tái)部分就講到這了,需要注意的是這里的控制臺(tái)配置是存在內(nèi)存中的,如果你的項(xiàng)目重新啟動(dòng)配置的規(guī)則就沒(méi)了,所以我們需要一個(gè)可以持久化配置規(guī)則的地方,接下去我們介紹下Nacos來(lái)持久化存儲(chǔ)Sentinel配置規(guī)則。

    使用Nacos存儲(chǔ)規(guī)則并實(shí)時(shí)更新

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

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

    1.引入Nacos依賴

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

    2.配置Nacos數(shù)據(jù)源

    安裝完Nacos后我們首先在項(xiàng)目中配置Sentinel的數(shù)據(jù)源為Nacos。

    spring:application:name: sentinelcloud:sentinel:transport:port: 8719dashboard: localhost:8080 #啟動(dòng)本項(xiàng)目后需要請(qǐng)求一次才能向sentinel控制臺(tái)注冊(cè)datasource: ds2:nacos: server-addr: 192.168.67.129:8848data-id: sentinelgroup-id: Sentinel:Demodata-type: jsonrule-type: flow

    ds2是數(shù)據(jù)源名稱,其他主要配置下:

    • Nacos的地址
    • data-id和group-id:等會(huì)需要在Nacos控制臺(tái)新增一個(gè)同樣的配置才能生效
    • data-type:配置規(guī)則數(shù)據(jù)類型
    • rule-type:flow代表流控類型

    3.在Nacos控制臺(tái)配置規(guī)則內(nèi)容

    我們?cè)贜acos控制臺(tái)的配置列表新增一個(gè)配置。

    新增一個(gè)配置

    新增一個(gè)配置

    配置內(nèi)容部分如下:

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

    resource:資源名,資源名是限流規(guī)則的作用對(duì)象

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

    limitApp:流控針對(duì)的調(diào)用來(lái)源

    strategy:調(diào)用關(guān)系限流策略:直接、鏈路、關(guān)聯(lián)

    controlBehavior:流控效果(直接拒絕/WarmUp/勻速+排隊(duì)等待),不支持按調(diào)用關(guān)系限流

    clusterMode:是否集群限流

    4.效果

    啟動(dòng)項(xiàng)目,配置好Nacos后,我們可以直接在Sentinel控制臺(tái)看到nacos的配置已經(jīng)同步到Sentinel控制臺(tái)了,并且規(guī)則已經(jīng)生效了,以后該規(guī)則只需要在Naocs配置規(guī)則就能實(shí)時(shí)生效了。

    Nacos規(guī)則同步到Sentinel控制臺(tái)

    需要注意的是,目前只支持Nacos規(guī)則同步到Sentinel控制臺(tái),不支持在Sentinel控制臺(tái)配置規(guī)則同步到Nacos。

    好了,今天的內(nèi)容就講到這里了,希望本文對(duì)你有所幫助。

    來(lái)源:https://www.toutiao.com/i6893111350684287496
    作者:程序員柳大俠

    總結(jié)

    以上是生活随笔為你收集整理的sentinel 不显示项目_Sentinel+Nacos实现资源流控、降级、热点、授权的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。