sentinel 不显示项目_Sentinel+Nacos实现资源流控、降级、热点、授权
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的使用步驟大致可以分為三步:
我們先來(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: flowds2是數(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)題。
- 上一篇: [转载]AXIS学习笔记
- 下一篇: 摄影技巧12法