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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java服务限流_SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级

發(fā)布時間:2025/4/5 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java服务限流_SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、基本簡介

1、概念描述

sentinel 以流量為切入點,從流量控制、熔斷降級、系統(tǒng)負(fù)載保護等多個維度保護服務(wù)的穩(wěn)定性。包括核心的獨立類庫,監(jiān)控臺,豐富的使用場景驗證。(這似乎是阿里開源組件的一貫作風(fēng),極其有特點,且特點很規(guī)律)

基本特性圖:

補刀一句:這種圖很多人可能不在意,但是一般官方給這個圖就是該中間件的基本使用思路,與核心功能點。

2、基礎(chǔ)性概念

資源管理

資源是sentinel組件中的核心概念之一。應(yīng)用服務(wù)器上腳本,靜態(tài)頁面,api接口,文件圖片等都可以理解為資源,對于java開發(fā)者而言,api接口就是這里資源的概念。

規(guī)則配置

sentinel組件通過流控規(guī)則的配置,來指定允許該資源(api接口)通過的請求次數(shù),ip黑白名單,應(yīng)用服務(wù)等。

測試效果

qps:每秒查詢率,是一臺服務(wù)器每秒能夠處理的查詢次數(shù)。

tps:每秒處理事務(wù)數(shù),事務(wù)處理整體傾向于整個過程。

二、框架環(huán)境整合

這里的環(huán)境主要整合nacos注冊中心,feign服務(wù),sentinel哨兵,和sentinel控制臺。

1、基本依賴

這里的依賴需要參考官方文檔,不同的環(huán)境使用不同的依賴,這里主要適配springcloud環(huán)境,所以使用如下包即可。

com.alibaba.cloud

spring-cloud-starter-alibaba-sentinel

2.1.1.release

2、控制臺面板

這里直接從github下載一個控制臺服務(wù)包即可,也可以自己下載源碼,按照需求修改后自行打包。

java -jar sentinel-dashboard-1.7.1.jar

下載并啟動控制臺服務(wù)。

3、服務(wù)配置

這里主要是把用到的兩個服務(wù)9001和9002連接到監(jiān)控臺。

spring:

application:

name: node09-nacos-9001

cloud:

nacos:

discovery:

server-addr: 127.0.0.1:8848

config:

server-addr: 127.0.0.1:8848

file-extension: yaml

sentinel:

transport:

port: 9001

dashboard: localhost:8080

最下面四行文件是哨兵控制臺的主要配置,注意剛啟動之后控制臺是看不到連接的,有資源被觸發(fā)之后才能看到。(附一張首頁效果圖)

三、流量控制

1、基本描述

流量控制(flow control),其原理是監(jiān)控應(yīng)用流量的 qps 或并發(fā)線程數(shù)等指標(biāo),當(dāng)達到指定的閾值時對流量進行控制,以避免被瞬時的流量高峰沖垮,從而保障應(yīng)用的高可用性。

2、限流規(guī)則

限流規(guī)則主要由下面幾個因素組成。

resource:資源名,即限流規(guī)則的作用對象,對于java服務(wù)端開發(fā)而言就是執(zhí)行的方法;

count: 限流閾值,單位時間內(nèi)能按照規(guī)則通過的請求量;

grade: 限流閾值類型,qps 或并發(fā)線程數(shù) ;

limitapp: 流控限制的指定應(yīng)用來源,若為default則不區(qū)分調(diào)用來源;

strategy: 調(diào)用關(guān)系限流策略,直連,鏈路等;

controlbehavior: 流量控制效果,直接拒絕、warm up、勻速排隊;

3、基本案例

硬編碼

配置規(guī)則

public class flowruleconfig {

public static void initflowqpsrule(string resourcename) {

list rules = new arraylist<>();

flowrule rule = new flowrule(resourcename);

// 修改這里參數(shù),查看效果

rule.setcount(100);

rule.setgrade(ruleconstant.flow_grade_qps);

rule.setlimitapp("default");

rules.add(rule);

flowrulemanager.loadrules(rules);

}

}

該規(guī)則參考上面的限流因素,不難理解。

使用方式

@requestmapping(value = "/web/getorder",method = requestmethod.get)

public string getorder (@requestparam("id") integer id){

flowruleconfig.initflowqpsrule("getorder");

entry entry = null;

try {

// 定義資源,埋點

entry = sphu.entry("getorder");

// 保護的業(yè)務(wù)邏輯

return "order=" + id ;

} catch (exception e){

e.printstacktrace();

} finally {

if (entry != null){entry.exit();}

}

return "order error" ;

}

測試的時候修改規(guī)則中count值,測試效果明顯。

編碼簡化

sphu.entry中可以設(shè)置處理類型,限流閾值。

@requestmapping(value = "/web/getstate",method = requestmethod.get)

public string getstate (@requestparam("id") integer id){

entry entry = null;

try {

entry = sphu.entry("getorder",entrytype.in,2);

return "state=" + id;

}

catch (blockexception e){

e.printstacktrace();

} finally {

if (entry != null){entry.exit();}

}

return "state error" ;

}

不過這種模式依舊是代碼入侵嚴(yán)重,不太符合現(xiàn)在編程的大趨勢。sentinel支持通過@sentinelresource注解定義資源并配置。

4、測試效果

請求上述的兩個測試接口,之后看控制臺中9001服務(wù)的簇點鏈路。

可以基于控制臺實時配置資源的:流控、降級、熱點、授權(quán)等核心功能,服務(wù)重啟之后配置也會重置。

四、服務(wù)熔斷降級

1、注解詳解

核心注解sentinelresource

用于定義資源,并提供可選的異常處理和 fallback 配置項。 @sentinelresource 注解包含以下屬性:

value

資源名稱,核心概念不能為空;

entrytype

entry 類型,可選項默認(rèn)為 entrytype.out;

blockhandler

對應(yīng)處理blockexception的函數(shù)名稱,可選項。blockhandler函數(shù)訪問范圍需要是public,返回類型需要與原方法相匹配,參數(shù)類型需要和原方法相匹配并且最后加一個額外的參數(shù),類型為blockexception。blockhandler函數(shù)默認(rèn)需要和原方法在同一個類中。若希望使用其他類的函數(shù),則可以指定 blockhandlerclass為對應(yīng)的類的class對象,注意對應(yīng)的函數(shù)必須為 static 函數(shù),否則無法解析。

fallback

fallback函數(shù)名稱,可選項,用于在拋出異常的時候提供fallback處理邏輯。fallback函數(shù)可以針對所有類型的異常(除了 exceptionstoignore里面排除掉的異常類型)進行處理。fallback 函數(shù)簽名和位置要求:返回值類型必須與原函數(shù)返回值類型一致;方法參數(shù)列表需要和原函數(shù)一致,或者可以額外多一個;

注意:這里可以這樣理解blockhandler和fallback,fallback處理業(yè)務(wù)邏輯的異常,服務(wù)降級,blockhandler處理sentinel組件控制的阻斷異常。

2、使用案例

9001接口服務(wù)

@service

public class flowserviceimpl implements flowservice {

@resource

private jdbctemplate jdbctemplate ;

@sentinelresource(value = "getphone",blockhandler = "exceptionhandler", fallback = "fallback")

@override

public string getphone(integer id) {

string sql = "select phone from d_phone where id="+id ;

integer.parseint("hand") ;

return jdbctemplate.queryforlist(sql,string.class).get(0) ;

}

// 降級處理

public string fallback(integer id) {

return "服務(wù)降級,id="+id ;

}

// 異常處理

public string exceptionhandler(integer id,blockexception be) {

be.printstacktrace();

return "服務(wù)拋異常,id="+id ;

}

}

9002請求服務(wù)

@requestmapping(value = "/web/getjdbc",method = requestmethod.get)

public string getjdbc () {

return msgfeign.getjdbc() ;

}

3、效果測試

通過控制臺配置9001的限流規(guī)則,然后刷接口看效果。

注意阻斷異常和業(yè)務(wù)異常的返參區(qū)別。

4、對比hystrix組件

hystrix的核心點在于以隔離和熔斷為主的容錯機制,超時或被熔斷的調(diào)用將會快速失敗,并可以提供 fallback 機制;

sentinel核心點在于流量控制多樣化,熔斷降級服務(wù),系統(tǒng)負(fù)載保護,實時監(jiān)控和控制臺;

補刀一句:對于流量控制類的組件,大部分場景是使用限流,服務(wù)降級這兩塊核心功能。

五、源代碼地址

github地址:知了一笑

https://github.com/cicadasmile/spring-cloud-base

gitee地址:知了一笑

https://gitee.com/cicadasmile/spring-cloud-base

微服務(wù)系列組件

如您對本文有疑問或者有任何想說的,請點擊進行留言回復(fù),萬千網(wǎng)友為您解惑!

總結(jié)

以上是生活随笔為你收集整理的java服务限流_SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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