版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章服務容錯組件Sentinel《SpringCloud微服務架構(gòu)開發(fā)(第2版)》學習目標/Target了解服務容錯概述,能簡述常見的服務容錯方案和服務容錯組件了解Sentinel概述,能夠簡述Sentinel的特點,以及資源和規(guī)則的概念掌握Sentinel控制臺的使用,能夠獨立啟動和登錄Sentinel控制臺掌握Sentinel快速入門案例,能夠通過Sentinel入門案例實現(xiàn)流量控制學習目標/Target掌握Sentinel資源的定義,能夠通過SphU、SphO和注解的方式定義Sentinel資源掌握Sentinel規(guī)則的定義,能夠通過本地代碼定義和Sentinel控制臺動態(tài)定義兩種方式定義Sentinel規(guī)則掌握Sentinel整合應用,能夠?qū)entinel和SpringCloudAlibaba、OpenFeign進行整合,實現(xiàn)調(diào)用擁有流量控制的遠程服務章節(jié)概述/Summary在當今互聯(lián)網(wǎng)時代,服務的可用性和穩(wěn)定性越來越重要。然而,即使是經(jīng)過了精心設計和開發(fā)的系統(tǒng),也難免會出現(xiàn)故障和異常情況。為了應對這些問題并提高系統(tǒng)的容錯性和穩(wěn)定性,Sentinel應運而生。Sentinel以流量為切入點,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度提高系統(tǒng)容錯性的穩(wěn)定性,是微服務架構(gòu)中主流的服務容錯組件之一。接下來,本章將對Sentinel的相關(guān)知識進行講解。目錄/Contents5.15.2服務容錯概述Sentinel簡介5.3Sentinel快速入門5.4Sentinel資源和規(guī)則的定義5.5Sentinel整合應用服務容錯概述5.15.1
服務容錯概述先定一個小目標!
先定一個小目標!了解服務容錯概述,能簡述常見服務容錯方案和常見的服務容錯組件5.1
服務容錯概述在微服務架構(gòu)中,服務之間的依賴性很高,一旦某個服務出現(xiàn)故障或者延遲,就會影響到整個系統(tǒng)的可用性和性能。因此,保證服務容錯性是微服務架構(gòu)設計中的一個重要問題。如何提高系統(tǒng)彈性、避免因為單點故障導致整個系統(tǒng)的崩潰,成為微服務架構(gòu)中服務容錯需要解決的核心問題。接下來對服務容錯中的服務雪崩、常見服務容錯方案、常見的服務容錯組件進行講解。5.1
服務容錯概述1.服務雪崩某個核心服務發(fā)生故障,進而引發(fā)更多的服務不可用,最終導致整個系統(tǒng)崩潰。這種現(xiàn)象類似于雪崩,業(yè)內(nèi)稱這種現(xiàn)象為服務雪崩,是服務故障的一種嚴重后果。5.1
服務容錯概述1.服務雪崩服務雪崩的發(fā)生原因有多種,如服務容量設計不合理、高并發(fā)下某個方法響應緩慢,或者某臺機器資源耗盡等。雖然開發(fā)者無法完全避免服務雪崩的發(fā)生,但可以通過足夠的容錯措施來保證一個服務出現(xiàn)問題時,不會影響到其他服務的正常運行。5.1
服務容錯概述2.常見的服務容錯方案0102030405將系統(tǒng)拆分為多個獨立運行的模塊或服務,以避免單點故障,并提高系統(tǒng)的可用性和穩(wěn)定性。設置一個合理的請求時間上限,當請求時間超過該上限時,自動取消請求并返回錯誤信息,防止用戶長時間等待。設置最大請求數(shù)或平均請求數(shù),在達到限制數(shù)后暫停新的請求,防止系統(tǒng)過載。監(jiān)控服務失敗率或異常率,當達到一定閾值時,自動熔斷服務,將請求轉(zhuǎn)發(fā)到備用服務或直接返回錯誤信息。通過削減功能、減少數(shù)據(jù)量、簡化邏輯等方式,提供一個基本可用的版本來滿足用戶需求。服務隔離超時控制限流控制熔斷機制降級處理常見的服務容錯方案5.1
服務容錯概述3.常見的服務容錯組件Sentinel是阿里巴巴開源的一款流量治理組件,Sentinel提供了熔斷機制、降級處理、流量控制等多種容錯策略,并支持基于規(guī)則的動態(tài)配置,從而能夠快速適應不同的應用場景。Sentinel采用更加精細的限流算法,這使得它可以對不同的請求進行更加準確的控制。此外,Sentinel還提供了豐富的監(jiān)控和報警功能,幫助開發(fā)人員及時發(fā)現(xiàn)和解決問題。(1)Sentinel5.1
服務容錯概述3.常見的服務容錯組件Resilience4J是一個基于Java8的輕量級容錯框架,可以和Spring等依賴注入框架集成,主要提供了斷路器模式、限流、重試、緩存、超時等多種容錯策略。相比于Hystrix,Resilience4J更加靈活和易于擴展,支持自定義限流算法和事件監(jiān)聽器,同時也提供了監(jiān)控和度量功能,幫助開發(fā)人員更好地監(jiān)測和管理應用程序的狀態(tài)。(2)Resilience4J5.1
服務容錯概述3.常見的服務容錯組件Hystrix是Netflix開源的一款優(yōu)秀的服務容錯與保護組件,旨在通過添加延遲容忍和容錯邏輯來幫助控制分布式系統(tǒng)中的故障。Hystrix主要采用斷路器模式來實現(xiàn)容錯功能,當某個服務出現(xiàn)故障時,Hystrix能夠快速地切換為備用服務或執(zhí)行降級操作,從而保證整個系統(tǒng)的穩(wěn)定性。此外,Hystrix還提供了實時監(jiān)控和統(tǒng)計信息展示等功能,方便開發(fā)人員對系統(tǒng)進行調(diào)優(yōu)。(3)Hystrix5.1
服務容錯概述3.常見的服務容錯組件對比項SentinelResilience4jHystrix隔離策略信號量隔離信號量隔離線程池隔離和信號量隔離熔斷降級策略基于響應時間、異常比率、異常數(shù)基于異常比率、響應時間基于異常比率實時統(tǒng)計實現(xiàn)滑動窗口算法RingBitBuffer,即環(huán)形緩沖區(qū)滑動窗口算法動態(tài)規(guī)則配置支持多種數(shù)據(jù)源有限支持支持多種數(shù)據(jù)源擴展性多個擴展點接口的形式插件的形式基于注解的支持支持支持支持限流基于QPS(每秒查詢率),支持基于調(diào)用關(guān)系的限流RateLimiter,基于令牌桶算法實現(xiàn)的多線程限流器有限的支持流量整形支持預熱模式、勻速器模式、預熱排隊模式簡單的RateLimiter模式不支持系統(tǒng)自適應保護支持不支持不支持控制臺提供開箱即用的控制臺,可配置規(guī)則、查看秒級監(jiān)控、機器發(fā)現(xiàn)等不提供控制臺,可對接其它監(jiān)控系統(tǒng)簡單的監(jiān)控查看Sentinel簡介5.25.2.1
Sentinel概述先定一個小目標!
先定一個小目標!了解Sentinel概述,能夠簡述Sentinel的特性,以及資源和規(guī)則的概念5.2.1
Sentinel概述Sentinel是阿里巴巴出品的面向分布式、多語言異構(gòu)化服務架構(gòu)的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務的穩(wěn)定性。5.2.1
Sentinel概述豐富的應用場景:幾乎涵蓋了阿里巴巴近10年積累的豐富流量場景。易于使用,快速接入:Sentinel提供了易于使用的SPI(ServiceProviderInterface,服務提供者接口)擴展接口,允許開發(fā)者快速定制自己的代碼邏輯。多樣化的流量控制:可以從資源粒度、調(diào)用關(guān)系、指標類型、控制效果等多維度的流量控制??梢暬谋O(jiān)控和規(guī)則管理:Sentinel提供簡單易用的控制臺,可以方便地創(chuàng)建、修改、刪除和查詢各種流量控制規(guī)則,也可以查看實時的流量數(shù)據(jù)、警報信息和運行狀態(tài)。1.Sentinel的特點5.2.1
Sentinel概述資源:Sentinel的資源可以是Java應用程序中的任何內(nèi)容。規(guī)則:Sentinel的規(guī)則指的是圍繞資源而設定的規(guī)則。2.Sentinel的核心概念5.2.1
Sentinel概述Sentinel核心庫:一個獨立的Java客戶端。Sentinel控制臺(Dashboard):主要負責管理推送規(guī)則、實時監(jiān)控系統(tǒng)、查詢系統(tǒng)的機器列表和健康情況等信息。Sentinel核心庫不依賴于Sentinel控制臺,但是兩者結(jié)合使用可以更加有效地提高工作效率。因此,建議用戶在使用Sentinel時結(jié)合使用Sentinel控制臺,以獲得更好的使用體驗和效果。3.Sentinel的主要構(gòu)成5.2.2
Sentinel控制臺先定一個小目標!
先定一個小目標!掌握Sentinel控制臺,能夠獨立啟動和登錄Sentinel控制臺5.2.2
Sentinel控制臺Sentinel控制臺是Sentinel的一個非常重要的組件,可以為用戶提供直觀、方便的觀察和管理被Sentinel保護的服務,也是用戶進行規(guī)則配置和管理的主要途徑。Sentinel控制臺包含的主要功能具體如下。查看機器列表以及健康情況:Sentinel控制臺能夠收集Sentinel客戶端發(fā)送的心跳包,判斷機器是否在線。監(jiān)控:Sentinel控制臺通過Sentinel客戶端暴露的監(jiān)控API,可以實現(xiàn)秒級的實時監(jiān)控。規(guī)則管理和推送:通過Sentinel控制臺,我們還能夠針對資源定義和推送規(guī)則。鑒權(quán):從Sentinel1.6.0起,Sentinel控制臺引入基本的登錄功能,默認用戶名和密碼都為sentinel。5.2.2
Sentinel控制臺1.獲取Sentinel控制臺Sentinel控制臺提供了對應的JAR包,在本地環(huán)境啟動該JAR包后,可以通過瀏覽器訪問Sentinel控制臺的頁面進行使用。下面通過這種方式對Sentinel控制臺的獲取和啟動進行講解。5.2.2
Sentinel控制臺2.啟動Sentinel控制臺打開命令行窗口,跳轉(zhuǎn)到Sentinel控制臺JAR包所在的目錄,執(zhí)行以下命令啟動Sentinel控制臺。java-Dserver.port=8090-jarsentinel-dashboard-2.0.0-alpha-preview.jar-Dserver.port指定Sentinel控制臺的訪問端口為8090,該選項為可選項,如不對端口進行指定,默認端口為8080。sentinel-dashboard-2.0.0-alpha-preview.jar為Sentinel控制臺JAR包名稱。5.2.2
Sentinel控制臺2.啟動Sentinel控制臺成功啟動Sentinel控制臺后,可以在瀏覽器中訪問http://localhost:8090/,頁面會跳轉(zhuǎn)到Sentinel控制臺的登陸頁面。5.2.2
Sentinel控制臺2.啟動Sentinel控制臺使用默認的用戶和密碼登錄Sentinel控制臺,登錄成功后跳轉(zhuǎn)到Sentinel控制臺首頁。Sentinel快速入門5.35.3
Sentinel快速入門先定一個小目標!
先定一個小目標!掌握Sentinel快速入門,能夠通過Sentinel入門案例實現(xiàn)流量控制5.3
Sentinel快速入門使用Sentinel進行資源保護,主要實現(xiàn)思路如下。(1)引入Sentinel依賴。將Sentinel整合到項目中,通過引入Sentinel的依賴和配置文件,讓Sentinel成為項目的一部分。(2)定義資源??梢酝ㄟ^對主流框架提供適配、Sentinel提供的顯式API、注解等方式定義需要被保護的資源。(3)定義規(guī)則。根據(jù)Sentinel支持的規(guī)則定制自己的規(guī)則策略,Sentinel支持的規(guī)則有流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則和熱點參數(shù)規(guī)則,這些規(guī)則可以保護資源的穩(wěn)定性和安全性,避免出現(xiàn)意外的問題。(4)檢驗規(guī)則是否生效。運行程序,觀察規(guī)則是否生效,查看效果。如果規(guī)則沒有生效,可以檢查配置是否正確,或者修改規(guī)則的閾值等參數(shù),以達到預期的效果。5.3
Sentinel快速入門1.創(chuàng)建SpringBoot項目并引入Sentinel核心庫依賴文件5-1pom.xml源代碼創(chuàng)建一個名稱為sentinel_quickstart的SpringBoot項目,在該項目的pom.xml文件中引入對應的依賴,具體如文件5-1所示。5.3
Sentinel快速入門2.定義資源文件5-2TestController.java源代碼在sentinel_quickstart項目中創(chuàng)建包com.itheima.controller,并在該包中創(chuàng)建控制器類,控制器類中定義一個用于處理請求的方法,具體如文件5-2所示。5.3
Sentinel快速入門3.定義規(guī)則文件5-3TestController.java源代碼在文件5-2中新增用于定義限流規(guī)則的方法,具體如文件5-3所示。5.3
Sentinel快速入門4.創(chuàng)建啟動類和配置項目啟動參數(shù)文件5-4SentinelQuickStartApplication.java源代碼資源和規(guī)則都定義好之后,可以對資源進行訪問以校驗對應的規(guī)則效果是否生效。在sentinel_quickstart項目的com.itheima包下創(chuàng)建項目的啟動類,具體如文件5-4所示。5.3
Sentinel快速入門4.創(chuàng)建啟動類和配置項目啟動參數(shù)為了項目可以和Sentinel控制臺正常通信,可以對項目配置啟動參數(shù)。配置的JVM參數(shù)如下所示。-Dcsp.sentinel.dashboard.server=localhost:8090-D=SentinelQuickStart第一行參數(shù)用于設置Sentinel控制臺的主機地址和端口。第二行參數(shù)設置本地應用在Sentinel控制臺中的名稱。5.3
Sentinel快速入門4.創(chuàng)建啟動類和配置項目啟動參數(shù)為了項目可以和Sentinel控制臺正常通信,可以對項目配置啟動參數(shù)。配置的JVM參數(shù)如下所示。-Dcsp.sentinel.dashboard.server=localhost:8090-D=SentinelQuickStart第一行參數(shù)用于設置Sentinel控制臺的主機地址和端口。第二行參數(shù)設置本地應用在Sentinel控制臺中的名稱。5.3
Sentinel快速入門4.創(chuàng)建啟動類和配置項目啟動參數(shù)在IDEA中配置項目的啟動參數(shù)。5.3
Sentinel快速入門5.檢驗規(guī)則效果依次啟動Sentinel控制臺和sentinel_quickstart項目,此時IDEA控制臺會輸出Sentinel日志相關(guān)的信息。5.3
Sentinel快速入門5.檢驗規(guī)則效果由于客戶端中對項目的“/hello”映射路徑設置的流量控制為每秒只能通過2個請求,此時在瀏覽器中訪問http://localhost:8080/hello,先以每秒低于2次慢速刷新頁面后,再以每秒高于2次快速刷新頁面。5.3
Sentinel快速入門5.檢驗規(guī)則效果此時在瀏覽器中訪問http://localhost:8090/,并登錄Sentinel控制臺。5.3
Sentinel快速入門5.檢驗規(guī)則效果單擊SentinelQuickStart下拉列表下的菜單,可以查看和修改SentinelQuickStart客戶端對應的信息,例如,單擊“實時監(jiān)控”查看SentinelQuickStart的實時監(jiān)控。5.3
Sentinel快速入門5.檢驗規(guī)則效果通過Sentinel控制臺也可以對規(guī)則進行編輯,例如單擊“流控規(guī)則”進入流控規(guī)則的頁面。Sentinel資源和規(guī)則的定義5.45.4.1
Sentinel資源的定義先定一個小目標!
先定一個小目標!掌握Sentinel資源的定義,能夠通過SphU、SphO和注解的方式定義Sentinel資源5.4.1
Sentinel資源的定義Sentinel的資源是指對需要監(jiān)控的業(yè)務進行抽象,并將其封裝成一個個資源進行管理。資源可以是一段代碼或者是一個函數(shù),也可以是一個外部依賴或者是一個數(shù)據(jù)庫表。通過準確地定義和管理資源,可以實現(xiàn)對資源的訪問控制和流量控制,實現(xiàn)對業(yè)務的監(jiān)控和保護。在Sentinel中,每個被保護的資源都對應一個資源名稱和一個Entry對象,資源名稱是用于標識和區(qū)分不同資源的字符串,而Entry對象則包含了關(guān)于該資源的流量控制信息。定義資源有多種方式,接下來,對使用不同的方式定義Sentinel資源進行講解。5.4.1
Sentinel資源的定義SphU是Sentinel提供的API工具類,它提供了try-catch風格的API,用于在代碼中保護資源。開發(fā)者可以將Sentinel保護邏輯嵌入到業(yè)務方法中,當觸發(fā)Sentinel的保護時,會拋出異常進行處理。1.拋出異常的方式定義資源try(Entryentry=SphU.entry("resourceName")){//業(yè)務代碼}catch(BlockExceptionex){//資源訪問阻止,被限流或被降級//在此處進行相應的處理操作}5.4.1
Sentinel資源的定義在Sentinel中還有一個可以定義資源的對象工具類SphO,其API風格是基于if-else語句的方式實現(xiàn)的。使用SphO時,當資源發(fā)生了限流之后會返回false,開發(fā)者可以根據(jù)返回值進行限流之后的邏輯處理。2.返回布爾值方式定義資源if(SphO.entry("自定義資源名")){//務必保證finally會被執(zhí)行try{//被保護的業(yè)務邏輯}finally{SphO.exit();}}else{//資源訪問阻止,被限流或被降級,在此處進行相應的處理操作}5.4.1
Sentinel資源的定義Sentinel支持通過@SentinelResource注解定義資源,@SentinelResource是Sentinel提供的一個注解,通過在需要保護的業(yè)務方法上添加@SentinelResource注解,Sentinel可以自動為該方法生成一個資源點,并基于該資源點執(zhí)行限流、熔斷降級等保護策略。3.注解方式定義資源5.4.1
Sentinel資源的定義3.注解方式定義資源屬性說明value用于指定資源名稱,必需項,需要保持唯一性。entryType用于指定入口類型,可選項,表示該資源的調(diào)用類型,默認值為EntryType.OUT,表示外部接口的調(diào)用。如設置值為EntryType.IN表示內(nèi)部方法的調(diào)用。blockHandler用于指定處理BlockException的方法,即觸發(fā)流控規(guī)則時執(zhí)行的方法。fallback用于指定資源方法在拋出異常的時候提供處理邏輯的方法。defaultFallback用于指定默認的fallback處理方法,與fallback屬性類似,但是可以作為全局的默認降級處理方法使用,即當所有指定的降級方法都無法處理時會調(diào)用該方法。exceptionsToIgnore用于指定忽略的異常類型列表,表示在該列表中的異常類型不會計入異常統(tǒng)計結(jié)果中,也不會進入fallback邏輯中,而是會原樣拋出。@SentinelResource注解的常用屬性5.4.1
Sentinel資源的定義3.注解方式定義資源blockHandler屬性指定的方法用于處理BlockException異常,blockHandler屬性指定的方法有如下要求。①指定的方法的訪問范圍需要是public。②返回值類型需要與blockHandler屬性所在業(yè)務方法的返回值類型相同。③參數(shù)類型需要和資源方法相匹配,并且最后增加一個類型為
BlockException的參數(shù)。(1)blockHandler屬性5.4.1
Sentinel資源的定義3.注解方式定義資源fallback屬性指定的方法可以針對除exceptionsToIgnore屬性排除掉的異常類型之外的其他所有類型的異常進行處理,fallback屬性指定的方法有如下要求。①返回值類型必須與fallback屬性所在業(yè)務方法返回值類型一致。②方法參數(shù)列表需要和fallback屬性所在業(yè)務方法一致,或者可以額外多一個
Throwable類型的參數(shù)用于接收對應的異常。③默認需要和fallback屬性所在業(yè)務方法在同一個類中,如果希望指定其他類的方法,則可以通過fallbackClass屬性指定對應類的Class對象,注意對應的方法必需為static修飾,否則無法解析。(2)fallback屬性5.4.1
Sentinel資源的定義通過@SentinelResource注解的方式定義資源的示例如下。3.注解方式定義資源publicclassTestService{//業(yè)務方法@SentinelResource(value="hello",blockHandler="exceptionHandler",fallback="helloFallback")
@GetMapping("hello")publicStringhello(Stringid){return"我是業(yè)務方法";}
//BlockException處理方法,參數(shù)最后多一個BlockException,其余與資源方法一致。publicStringexceptionHandler(Stringid,BlockExceptionex){ex.printStackTrace();return"我在被限流/降級/系統(tǒng)保護的時候調(diào)用";}//fallback指定的方法,方法簽名與資源方法一致或添加加一個Throwable類型的參數(shù)。publicStringhelloFallback(Stringid){return"我可以針對所有類型的異常進行處理";}}5.4.1
Sentinel資源的定義Sentinel支持異步調(diào)用鏈路的統(tǒng)計。在異步調(diào)用中,需要通過SphU.asyncEntry()方法定義資源,并通常需要在異步的回調(diào)函數(shù)中調(diào)用exit()方法。4.異步調(diào)用支持try{AsyncEntryentry=SphU.asyncEntry(“resourceName”);//異步調(diào)用.doAsync(userId,result->{try{//在此處處理異步調(diào)用的結(jié)果.}finally{//在回調(diào)結(jié)束后exit.entry.exit();}});}catch(BlockExceptionex){//Requestblocked.//Handletheexception(e.g.retryorfallback).}5.4.2
Sentinel規(guī)則的定義先定一個小目標!
先定一個小目標!掌握Sentinel規(guī)則的定義,能夠通過本地代碼設置和Sentinel控制臺動態(tài)設置兩種方式定義Sentinel規(guī)則5.4.2
Sentinel規(guī)則的定義Sentinel的規(guī)則是指用于監(jiān)控和保護資源的一組條件或策略,Sentinel的規(guī)則與Sentinel處理請求的流程緊密相關(guān),定義了如何對請求進行監(jiān)控、評估和處理。Sentinel支持多種類型的規(guī)則,包括流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、授權(quán)控制規(guī)則等規(guī)則,接下來分別對這些規(guī)則中的常用規(guī)則進行講解。5.4.2
Sentinel規(guī)則的定義1.流量控制規(guī)則在Sentinel中,流量控制規(guī)則主要用于限制請求的速率和數(shù)量。開發(fā)者可以使用FlowRule定義流量控制規(guī)則,并通過設置FlowRule相關(guān)屬性的值,實現(xiàn)對流量的細粒度管理和保護。屬性說明resource用于指定資源名count用于指定限流閾值grade用于指定限流閾值類型limitApp用于指定流控針對的調(diào)用來源strategy用于指定調(diào)用關(guān)系限流策略,包含直接、鏈路、關(guān)聯(lián)controlBehavior用于指定流控效果,包含直接拒絕、預熱排隊、勻速排隊、慢啟動clusterMode用于指定是否集群限流FlowRule中常用的屬性5.4.2
Sentinel規(guī)則的定義流量控制規(guī)則設置有兩種方式,分別為本地代碼設置和在Sentinel控制臺動態(tài)設置。(1)本地代碼設置1.流量控制規(guī)則privatevoidinitFlowQpsRule(){List<FlowRule>rules=newArrayList<>();FlowRulerule=newFlowRule("resourceName");rule.setCount(20);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}5.4.2
Sentinel規(guī)則的定義(2)在Sentinel控制臺動態(tài)設置1.流量控制規(guī)則5.4.2
Sentinel規(guī)則的定義2.熔斷降級規(guī)則在Sentinel中,熔斷降級規(guī)則用于對系統(tǒng)的請求成功率、響應時間等指標進行監(jiān)控和調(diào)控,以確保系統(tǒng)能夠在負載過大或異常情況下正常響應請求。開發(fā)者可以使用DegradeRule定義熔斷降級規(guī)則,并通過設置DegradeRule相關(guān)屬性的值實現(xiàn)熔斷降級的功能。DegradeRule中常用的屬性屬性說明resource用于指定資源名grade用于指定熔斷策略,支持慢調(diào)用比例、異常比例、異常數(shù)策略count慢調(diào)用比例模式下用于指定慢調(diào)用臨界RT,異常比例和異常數(shù)模式下用于指定對應的閾值timeWindow用于指定熔斷時長,單位為sminRequestAmount用于指定熔斷觸發(fā)的最小請求數(shù),請求數(shù)小于該值時即使異常比例超出閾值也不會熔斷,1.7.0版本后引入statIntervalMs用于指定統(tǒng)計時長,單位為ms,1.8.0版本后引入slowRatioThreshold用于指定慢調(diào)用比例閾值,僅慢調(diào)用比例模式有效,1.8.0版本后引入5.4.2
Sentinel規(guī)則的定義熔斷降級規(guī)則可以通過本地代碼設置和在Sentinel控制臺動態(tài)設置。(1)本地代碼設置2.熔斷降級規(guī)則privatevoidinitDegradeRule(){List<DegradeRule>rules=newArrayList<>();DegradeRulerule=newDegradeRule();rule.setResource("hello");rule.setCount(10);rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);rule.setTimeWindow(10);rules.add(rule);DegradeRuleManager.loadRules(rules);}5.4.2
Sentinel規(guī)則的定義(2)在Sentinel控制臺動態(tài)設置2.熔斷降級規(guī)則5.4.2
Sentinel規(guī)則的定義系統(tǒng)保護規(guī)則是從應用級別的入口流量進行控制,從單臺機器的load、CPU使用率、平均RT、入口QPS和并發(fā)線程數(shù)等幾個維度監(jiān)控應用指標,讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性。系統(tǒng)保護規(guī)則是應用整體維度的,而不是資源維度的,并且僅對入口流量生效。入口流量指的是進入應用的流量的入口類型值為EntryType.IN,例如,Web服務或Dubbo服務端接收的請求都屬于入口流量。3.系統(tǒng)保護規(guī)則5.4.2
Sentinel規(guī)則的定義系統(tǒng)保護規(guī)則有如下的閾值類型。Load:僅對Linux/Unix-like機器生效,以系統(tǒng)的load1(系統(tǒng)負載在過去1分鐘內(nèi)的平均值)作為啟發(fā)指標,進行自適應系統(tǒng)保護。當系統(tǒng)load1超過設定的啟發(fā)值,且系統(tǒng)當前的并發(fā)線程數(shù)超過估算的系統(tǒng)容量時才會觸發(fā)系統(tǒng)保護。RT:RT為ResponseTime的簡稱,即服務調(diào)用的響應時間。當單臺機器上所有入口流量的平均RT達到閾值即觸發(fā)系統(tǒng)保護,單位是毫秒。線程數(shù):當單臺機器上所有入口流量的并發(fā)線程數(shù)達到閾值即觸發(fā)系統(tǒng)保護。入口QPS:當單臺機器上所有入口流量的QPS達到閾值即觸發(fā)系統(tǒng)保護。CPU使用率:CPU使用率指的是CPU總量中正在被系統(tǒng)消耗的百分比,當系統(tǒng)CPU使用率超過閾值即觸發(fā)系統(tǒng)保護,取值范圍0.0-1.0。3.系統(tǒng)保護規(guī)則5.4.2
Sentinel規(guī)則的定義開發(fā)者可以使用SystemRule定義系統(tǒng)保護規(guī)則,并通過設置SystemRule相關(guān)屬性的值實現(xiàn)系統(tǒng)保護的功能。3.系統(tǒng)保護規(guī)則屬性說明highestSystemLoad用于指定load1觸發(fā)值,用于觸發(fā)自適應控制階段avgRt用于指定所有入口流量的平均響應時間maxThread用于指定入口流量的最大并發(fā)數(shù)qps用于指定所有入口資源的QPSSystemRule中常用的屬性5.4.2
Sentinel規(guī)則的定義3.系統(tǒng)保護規(guī)則系統(tǒng)保護規(guī)則同樣可以通過本地代碼設置和在Sentinel控制臺動態(tài)設置。(1)本地代碼設置privatevoidinitSystemRule(){List<SystemRule>rules=newArrayList<>();SystemRulerule=newSystemRule();rule.setHighestSystemLoad(10);rules.add(rule);SystemRuleManager.loadRules(rules);}5.4.2
Sentinel規(guī)則的定義3.系統(tǒng)保護規(guī)則(2)在Sentinel控制臺動態(tài)設置5.4.2
Sentinel規(guī)則的定義4.授權(quán)控制規(guī)則開發(fā)者如果需要根據(jù)請求方的來源做判斷和控制,則可以通過Sentinel的授權(quán)控制規(guī)則實現(xiàn)。授權(quán)控制規(guī)則是一種可以對資源的訪問進行權(quán)限控制、鑒權(quán)和認證的規(guī)則。在配置授權(quán)規(guī)則時,通常需要按照資源名稱、限制類型、限制條件等配置規(guī)則。其中,資源名稱指定需要進行鑒權(quán)的資源,限制類型和限制條件用于指定訪問該資源的限制規(guī)則。如果沒有對資源指定限制類型,Sentinel將會默認為該資源配置黑名單(黑名單模式),只有請求來源不在黑名單中的請求才能通過;如果指定了限制類型為白名單(白名單模式),則只有在白名單中存在的請求才會被允許訪問該資源。5.4.2
Sentinel規(guī)則的定義開發(fā)者可以使用AuthorityRule定義授權(quán)控制規(guī)則,并通過設置AuthorityRule相關(guān)屬性的值實現(xiàn)系統(tǒng)保護的功能。4.授權(quán)控制規(guī)則AuthorityRule中常用的屬性屬性說明resource用于指定資源名。limitApp用于指定對應的黑名單或白名單,多個應用程序之間用英文逗號分隔,例如“appA,appB”strategy用于指定限制模式,AUTHORITY_WHITE為白名單模式,AUTHORITY_BLACK為黑名單模式。5.4.2
Sentinel規(guī)則的定義4.授權(quán)控制規(guī)則授權(quán)控制規(guī)則可以通過本地代碼設置和在Sentinel控制臺動態(tài)設置。(1)本地代碼設置privatevoidinitAuthorityRule(){AuthorityRulerule=newAuthorityRule();rule.setResource("test");rule.setStrategy(RuleConstant.AUTHORITY_WHITE);rule.setLimitApp("appA,appB");AuthorityRuleManager.loadRules(Collections.singletonList(rule));}5.4.2
Sentinel規(guī)則的定義4.授權(quán)控制規(guī)則(2)在Sentinel控制臺動態(tài)設置Sentinel整合應用5.55.5
Sentinel整合應用先定一個小目標!
先定一個小目標!掌握Sentinel整合應用,能夠?qū)entinel和SpringCloudAlibaba、OpenFeign進行整合,實現(xiàn)調(diào)用擁有流量控制的遠程服務5.5
Sentinel整合應用Sentinel對大部分的主流框架都做了適配,使用時只需要引入對應的依賴即可方便地整合Sentinel。SpringCloudAlibaba默認為Sentinel整合了Servlet、RestTemplate和SpringWebFlux,可以運行時靈活地配置和調(diào)整流量控制等規(guī)則。同時Sentinel適配了OpenFeign,為了讀者能更好的對Sentinel進行應用,下面,通過一個案例將Sentinel和SpringCloudAlibaba、OpenFeign進行整合演示,其中服務的注冊和發(fā)現(xiàn)基于Nacos。5.5
Sentinel整合應用1.創(chuàng)建項目父工程文件5-5pom.xml源代碼在IDEA中創(chuàng)建一個名稱為sentinel_openFeign的Maven工程,在工程的pom.xml中聲明SpringCloud、SpringCloudAlibaba、SpringBoot的相關(guān)依賴。具體如文件5-5所示。5.5
Sentinel整合應用2.創(chuàng)建服務提供者模塊文件5-6pom.xml源代碼在sentinel_openFeign工程中創(chuàng)建一個名稱為provider的Maven子模塊,該子模塊需要提供具備容錯功能的服務,在pom.xml中引入相關(guān)依賴,具體如文件5-6所示。5.5
Sentinel整合應用3.配置服務提供者信息文件5-7application.yml源代碼在provider模塊中創(chuàng)建全局配置文件application.yml。服在該配置文件中配置服務名稱、Nacos服務端地址、Sentinel控制臺等信息,具體如文件5-7所示。5.5
Sentinel整合應用4.創(chuàng)建服務提供者的控制器類文件5-8ProjectController.java源代碼在provider模塊的java目錄下創(chuàng)建包com.itheima.controller,在該包下創(chuàng)建名稱為ProjectController的控制器類,在該類中創(chuàng)建處理對應的請求的方法,并將該方法使用@SentinelResource注解標記進行流量控制。具體如文件5-8所示。5.5
Sentinel整合應用5.創(chuàng)建服務提供者的項目啟動類文件5-9ProjectController.java源代碼在provider模塊的com.itheima包下創(chuàng)建項目的啟動類,具體如文件5-9所示。5.5
Sentinel整合應用6.創(chuàng)建服務消費者模塊文件5-10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國列管過濾器行業(yè)投資前景及策略咨詢研究報告
- 大班社會活動節(jié)水小能手
- 2025至2030年中國灑水槍數(shù)據(jù)監(jiān)測研究報告
- 做一名幸福的幼兒教師培訓
- 2025至2030年中國拉纖絲玻璃顆粒數(shù)據(jù)監(jiān)測研究報告
- 灼口綜合征病人的護理
- 二零二五年月子中心豪華月子套餐與產(chǎn)后健康檢查合同3篇
- 專業(yè)造價顧問協(xié)議格式版B版
- 農(nóng)民工施工協(xié)議
- 花卉買賣合同范本
- 智慧水庫平臺建設方案
- 浙江省公務員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學
- 全統(tǒng)定額工程量計算規(guī)則1994
- 糧食平房倉設計規(guī)范
- 《設計專業(yè)導論》教學大綱
- 臨床試驗樣本量簡易計算器
- 雙語閱讀:友誼的顏色
- 通用個人全年工資表模板
- 帶電作業(yè)車庫技術(shù)規(guī)范書
- 電鍍工序FMEA
評論
0/150
提交評論