淺談如何在項目中使用Spring Cloud Alibaba Sentinel組件
隨著微服務的流行,服務和服務之間的穩(wěn)定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度保護服務的穩(wěn)定性。
官網(wǎng):https://github.com/alibaba/Sentinel
中文官網(wǎng):https://github.com/alibaba/Sentinel/wiki
Sentinel與Hystrix的區(qū)別由于Hystrix不再積極的開發(fā),進入維護階段,現(xiàn)在越來越多的開發(fā)者在項目中使用Spring Cloud Alibaba Sentinel組件。
Hystrix的關注點在于以 隔離和熔斷為主的容錯機制,超時或被熔斷的調(diào)用將會快速失敗,并可以提供 fallback 機制。
Sentinel的側(cè)重點在于:多樣化的流量控制、熔斷降級,系統(tǒng)負載保護,實時監(jiān)控和控制臺。
對比詳圖
Sentinel的功能特點--摘自官方
核心庫(Java 客戶端)--自己的項目中的代碼。不依賴任何框架/庫,能夠運行于 Java 7 及以上的版本的運行時環(huán)境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持。
控制臺(Dashboard)--控制臺主要負責管理推送規(guī)則、監(jiān)控、集群限流分配管理、機器發(fā)現(xiàn)等。
一、控制臺(Dashboard)1、下載sentienl的jar包,本例使用:sentinel-dashboard-1.7.2.jar,地址:https://github.com/alibaba/Sentinel/releases
2、使用java -jar命令啟動Sentinel控制臺
啟動 Sentinel 控制臺需要 JDK 版本為 1.8 及以上版本。
3、訪問地址:http://localhost:8080/,8080為Sentinel的默認端口 默認賬號密碼為sentinel
<!---sentinel的依賴--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.1.RELEASE</version></dependency>2.編輯項目中的 application.yml或者bootstrap.yml文件
添加Sentinel 控制臺配置信息
spring: sentinel: transport:port: 8719 # 應用與Sentinel控制臺交互的端口,應用本地會起一個該端口占用的HttpServer # 默認8719端口,假如端口被占用,依次+1,直到找到未被占用端口dashboard: localhost:8080 #sentinel控制臺的請求地址,需要啟動一個dashboard的jar3.資源是 Sentinel 中的一個關鍵概念。它可以是任何東西,例如服務、方法,甚至是代碼片段。
一旦被 Sentinel API 包裹,就被定義為資源,可以申請 Sentinel 提供的保護。
把需要控制流量的代碼用 Sentinel的關鍵代碼 SphU.entry('資源名') 和 entry.exit() 包圍起來即可。
實例代碼--摘自官方
Entry entry = null; try {// 定義一個sentinel保護的資源,名稱為test-sentinel-apientry = SphU.entry(resourceName);// 模擬執(zhí)行被保護的業(yè)務邏輯耗時Thread.sleep(100);return a; } catch (BlockException e) {// 如果被保護的資源被限流或者降級了,就會拋出BlockExceptionlog.warn('資源被限流或降級了', e);return '資源被限流或降級了'; } catch (InterruptedException e) {return '發(fā)生InterruptedException'; } finally {if (entry != null) { entry.exit();} ContextUtil.exit(); }}
使用注解@SentinelResource 用于定義資源,并提供可選的異常處理和 fallback 配置項
value:資源名稱,必需項(不能為空) entryType:entry 類型,可選項(默認為 EntryType.OUT) blockHandler / blockHandlerClass: blockHandler 對應處理 BlockException 的函數(shù)名稱,可選項 fallback:fallback 函數(shù)名稱,可選項,用于在拋出異常的時候提供 fallback 處理邏輯。在項目中Controller中添加@SentinelResource(value = 'Sentinel-name')
例如:
啟動項目
三、查看接口的流量的詳情1.實時監(jiān)控補充:
1.QPS:每秒請求數(shù),當前調(diào)用該api的QPS到達閾值的時候進行限流
2.線程數(shù):當調(diào)用該api的線程數(shù)到達閾值的時候,進行限流
3.直接:當api大達到限流條件時,直接限流4
4.關聯(lián):當關聯(lián)的資源到達閾值,就限流自己
5.鏈路:只記錄指定路上的流量,指定資源從入口資源進來的流量,如果達到閾值,就進行限流,api級別的限流
6.熱點規(guī)則即經(jīng)常訪問的數(shù)據(jù)。很多時候我們希望統(tǒng)計某個熱點數(shù)據(jù)中訪問頻次最高的 Top K 數(shù)據(jù),并對其訪問進行限制。
7.響應時間是指系統(tǒng)對請求作出響應的時間。
8.吞吐量是指系統(tǒng)在單位時間內(nèi)處理請求的數(shù)量。
到此這篇關于淺談如何在項目中使用Spring Cloud Alibaba Sentinel組件的文章就介紹到這了,更多相關Spring Cloud Alibaba Sentinel組件內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!
相關文章:
1. Python+unittest+requests 接口自動化測試框架搭建教程2. Java GZip 基于內(nèi)存實現(xiàn)壓縮和解壓的方法3. jsp+servlet簡單實現(xiàn)上傳文件功能(保存目錄改進)4. 存儲于xml中需要的HTML轉(zhuǎn)義代碼5. Springboot 全局日期格式化處理的實現(xiàn)6. 利用CSS制作3D動畫7. 一款功能強大的markdown編輯器tui.editor使用示例詳解8. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程9. SpringBoot+TestNG單元測試的實現(xiàn)10. PHP利用COM對象訪問SQLServer、Access
