国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel)

這篇具有很好參考價值的文章主要介紹了【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

相對來說,Sentinel的學(xué)習(xí)難度比之之前的Dubbo要低了不少。不過在學(xué)習(xí)過程中也遇到了一些認(rèn)知局限帶來的困難。比如,雖然還是學(xué)習(xí)了Sentinel,但是不知道生產(chǎn)環(huán)境該如何配置才是最佳的狀態(tài)。

說到底,Sentinel還是沒有提供很好的文檔支持。比如:生產(chǎn)最佳實踐方案。 官方也確實提供了一個,但是總感覺不太完備。

另外在學(xué)習(xí)的過程中再次提醒了我:不要盲目的添加中間件,中間件的引入勢必會造成系統(tǒng)復(fù)雜度上升,也帶來了一定的運維成本。所以,若非有必要的,還是不要特定地去引入某個中間件吧。

最難受的是,文檔資料的缺失,不少問題官網(wǎng)沒解釋,百度沒答案,難受死了。

當(dāng)然,這里是以學(xué)習(xí)目的出發(fā)的,就算是引入也無所謂。

閱讀對象

閱讀導(dǎo)航

系列上一篇文章:《【分布式微服務(wù)專題】從單體到分布式(三、SpringCloud整合Dubbo)》

前置知識

一、什么是服務(wù)雪崩

1.1 基本介紹

在一個高度服務(wù)化的系統(tǒng)中,我們實現(xiàn)的一個業(yè)務(wù)邏輯通常會依賴多個服務(wù)。比如:訂單服務(wù)會依賴用戶服務(wù)、商品服務(wù)等。此時,若其中一個服務(wù)不可用,就會導(dǎo)致訂單服務(wù)的所有線程都因等待而引起阻塞,最終導(dǎo)致沒有線程可用,進(jìn)而引起整個服務(wù)不可用,這就是服務(wù)雪崩
導(dǎo)致服務(wù)不可用的可能有很多,比如:程序BUG、流量激增、緩存擊穿,甚至是硬件故障。
在服務(wù)提供者不可用的時候,會出現(xiàn)大量重試的情況:用戶重試、代碼邏輯重試,這些重試最終導(dǎo)致進(jìn)一步的流量激增,所以歸根結(jié)底導(dǎo)致雪崩效應(yīng)的最根本原因是:大量請求線程同步等待造成的資源耗盡。當(dāng)服務(wù)調(diào)用者使用同步調(diào)用時, 會產(chǎn)生大量的等待線程占用系統(tǒng)資源。一旦線程資源被耗盡,服務(wù)調(diào)用者提供的服務(wù)也將處于不可用狀態(tài),于是服務(wù)雪崩效應(yīng)產(chǎn)生了

1.2 解決方案

服務(wù)雪崩常用的解決方案如下:

  • 超時機制:設(shè)定接口超時時間,不做無休止的等待。屬于一種緩解手段,只要流量足夠大,依然有擊穿的可能性
  • 服務(wù)限流:限制QPS,避免流量突增而故障。屬于一種預(yù)防手段
  • 服務(wù)熔斷降級:類似保險絲。如果某個服務(wù)調(diào)用慢,或者本身短時間內(nèi)就有大量超時,那后續(xù)的請求再進(jìn)來其實已經(jīng)沒有意義了,不如快速返回一個失敗答復(fù),避免擁擠(參考以前你搶小米手機的時候)

二、什么是Sentinel

Sentinel官方文檔傳送門:傳送門

2.1 基本介紹

隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。

2.2 設(shè)計目的

流量
流量
流量
面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。

2.3 基本概念

資源
資源是 Sentinel 的關(guān)鍵概念。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如,由應(yīng)用程序提供的服務(wù),或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù),甚至可以是一段代碼。在接下來的文檔中,我們都會用資源來描述代碼塊。

意思是,粒度可以為:進(jìn)程、組件、方法,甚至是一段代碼

只要通過 Sentinel API 定義的代碼,就是資源,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名,URL,甚至服務(wù)名稱作為資源名來標(biāo)示資源。

規(guī)則
圍繞資源的實時狀態(tài)設(shè)定的規(guī)則,可以包括流量控制規(guī)則、熔斷降級規(guī)則以及系統(tǒng)保護規(guī)則。所有規(guī)則可以動態(tài)實時調(diào)整。

三、Sentinel 功能和設(shè)計理念

Sentinel主要的功能有:流量控制、熔斷降級、系統(tǒng)負(fù)載保護

3.1 流量控制

流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進(jìn)行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機的請求調(diào)整成合適的形狀,如下圖所示:
【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel),Java,學(xué)習(xí)筆記,分布式/微服務(wù),分布式,微服務(wù),spring cloud
流量控制有以下幾個角度:

  • 資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
  • 運行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
  • 控制的效果,例如直接限流、冷啟動、排隊等。

Sentinel 的設(shè)計理念是讓用戶自由選擇控制的角度,并進(jìn)行靈活組合,從而達(dá)到想要的效果。

3.2 熔斷降級

什么是熔斷降級
除了流量控制以外,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定,最終會導(dǎo)致請求發(fā)生堆積。這個問題和 Hystrix 里面描述的問題是一樣的。
【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel),Java,學(xué)習(xí)筆記,分布式/微服務(wù),分布式,微服務(wù),spring cloud
Sentinel 和 Hystrix 的原則是一致的:當(dāng)調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定,例如,表現(xiàn)為 timeout,異常比例升高的時候,則對這個資源的調(diào)用進(jìn)行限制,并讓請求快速失敗,避免影響到其它的資源進(jìn)而產(chǎn)生雪崩的效果。

熔斷降級設(shè)計理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。
Hystrix 通過線程池的方式,來對依賴(在我們的概念中對應(yīng)資源)進(jìn)行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本,還需要預(yù)先給各個資源做線程池大小的分配。
Sentinel 對這個問題采取了兩種手段:

  • 通過并發(fā)線程數(shù)進(jìn)行限制
    和資源池隔離的方法不同,Sentinel 通過限制資源并發(fā)線程的數(shù)量,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗,也不需要您預(yù)先分配線程池的大小。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長,對資源的直接影響就是會造成線程數(shù)的逐步堆積。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求。

  • 通過響應(yīng)時間對資源進(jìn)行降級
    除了對并發(fā)線程數(shù)進(jìn)行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復(fù)。

3.3 系統(tǒng)負(fù)載保護

Sentinel 同時提供系統(tǒng)維度的自適應(yīng)保護能力,它的最終目的是:保證系統(tǒng)不被拖垮的同時,進(jìn)而保證系統(tǒng)的吞吐量。
防止雪崩,是系統(tǒng)防護中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進(jìn)入,可能會導(dǎo)致系統(tǒng)崩潰,無法響應(yīng)。在集群環(huán)境下,網(wǎng)絡(luò)負(fù)載均衡會把本應(yīng)這臺機器承載的流量轉(zhuǎn)發(fā)到其它的機器上去。如果這個時候其它的機器也處在一個邊緣狀態(tài)的時候,這個增加的流量就會導(dǎo)致這臺機器也崩潰,最后導(dǎo)致整個集群不可用。

針對這個情況,Sentinel 提供了對應(yīng)的保護機制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。

四、Sentinel 是如何工作的

Sentinel 的主要工作機制如下:

  • 對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設(shè)施對資源進(jìn)行實時統(tǒng)計和調(diào)用鏈路分析
  • 根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對資源的實時統(tǒng)計信息,對流量進(jìn)行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規(guī)則
  • Sentinel 提供實時的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)

從一般性流程來說,我們想要使用Sentinel來進(jìn)行資源保護,主要分為幾個步驟:

  1. 定義資源

主流框架都提供了默認(rèn)的支持。例如使用SpringBoot開發(fā)的web應(yīng)用,會自動定義所有http接口為Sentinel的資源

  1. 定義規(guī)則

這個就需要好好了解一下規(guī)則是什么,都有哪些了

  1. 檢驗規(guī)則是否生效

這個根據(jù)我目前的測試情況看來,我有點不確定官方提供的校驗手段是否有效,你們看我【1.5 設(shè)置系統(tǒng)負(fù)載保護】內(nèi)容就知道我意思了

先把可能需要保護的資源定義好,之后再配置規(guī)則。也可以理解為,只要有了資源,我們就可以在任何時候靈活地定義各種流量控制規(guī)則。在編碼的時候,只需要考慮這個代碼是否需要保護,如果需要保護,就將之定義為一個資源。

筆記正文

我當(dāng)前項目結(jié)構(gòu):
在這里插入圖片描述

├── shenadmin       					// 整個服務(wù)的頂級父項目
	├── shen-common						// 項目公共模塊
	├── shen-dependencies				// 項目依賴模塊
	├── shen-provider-apis				// 項目對外暴露接口apis列表。provider直譯:供應(yīng)商
		├── shen-order-provider-api				// 訂單服-對外暴露接口apis列表
		├── shen-product-provider-api			// 商品服-對外暴露接口apis列表
		├── shen-user-provider-api				// 用戶服-對外暴露接口apis列表
		├── shen-wallet-provider-api			// 錢包服-對外暴露接口apis列表
	└── shen-servers					// 項目微服務(wù)列表
		└── shen-product						// 商品服
		└── shen-order							// 訂單服
		└── shen-user							// 用戶服
		└── shen-wallet							// 錢包服

一、簡單整合Sentinel

我學(xué)習(xí)整合的教程,來自SpringCloud Alibaba整合Sentinel的sample:傳送門

另外,整合之前需要做一些工具準(zhǔn)備。

  1. 安裝Sentinel控制臺(我在【1.3 配置限流規(guī)則:定義Sentinel規(guī)則】中有提到)
  2. 安裝JMeter壓測工具

1.1 添加maven依賴

顯然,只有我的微服務(wù)項目才會用到Sentinel,所以,我只需要在shen-servers下直接添加即可。而我早先已經(jīng)添加了Spring Cloud Alibaba的管理,所以,我只需要添加依賴即可,版本由前者兼容了。

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

1.2 接入限流埋點:定義Sentinel資源

【資源與規(guī)則】官方介紹傳送門:基本使用 - 資源與規(guī)則

在此之前,需要給大家介紹并解釋一下【埋點】這個概念。

Q1:什么是埋點?
埋點是一種數(shù)據(jù)采集技術(shù),主要用于收集用戶在應(yīng)用或網(wǎng)站中的行為數(shù)據(jù)。通過在特定的頁面或按鈕上植入代碼,可以監(jiān)聽用戶的行為并進(jìn)行收集上報。這樣,開發(fā)者或數(shù)據(jù)分析師就能獲取用戶在使用產(chǎn)品過程中的具體行為數(shù)據(jù),以進(jìn)行數(shù)據(jù)分析、用戶行為研究或產(chǎn)品優(yōu)化等。簡而言之,埋點是一種數(shù)據(jù)采集技術(shù),實質(zhì)是先監(jiān)聽軟件應(yīng)用運行過程中的事件,當(dāng)需要關(guān)注的事件發(fā)生時進(jìn)行判斷和捕獲

翻譯一下:【埋點】這個操作,其實在Sentinel里面,就是【定義資源】的過程。講人話,就是設(shè)置哪些個url,甚至是方法需要被Sentinel管控。

可別剛說完就忘了Sentinel里面【資源】是什么東塞喔。我在【1.3 基本概念】中提到過,這是Sentinel里面一個核心概念

那么如何設(shè)置埋點呢?兩種方式:

  1. 默認(rèn)的HTTP。在Spring Cloud Alibaba里面,默認(rèn)會為所有HTTP請求埋點,所以對我們Web開發(fā)用戶來說,就不需要操心那么多了
  2. 自定義埋點。具體如何操作,可以參考官網(wǎng)的鏈接:基本使用(資源與規(guī)則)。不過自定義埋點操作,我稍微看了下,都是一些靜態(tài)的、硬編碼的方式,反正我是不喜歡這么干的。

1.3 配置限流規(guī)則:定義Sentinel規(guī)則

可得注意了啊,這里又是一個Sentinel核心概念噢?!举Y源與規(guī)則】官方介紹傳送門:基本使用 - 資源與規(guī)則

Sentinel 的所有規(guī)則都可以在內(nèi)存態(tài)中動態(tài)地查詢及修改,修改之后立即生效。同時 Sentinel 也提供相關(guān) API,供您來定制自己的規(guī)則策略。Sentinel 支持以下幾種規(guī)則:流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則 和 熱點參數(shù)規(guī)則。

Sentinel 提供了兩種配置限流規(guī)則的方式:【代碼配置】和 【控制臺配置】。根據(jù)官方《在生產(chǎn)環(huán)境中使用 Sentinel》的指引,還是建議在【控制臺】中集中管理規(guī)則會比較合適,并且將規(guī)則推送之配置中心中。

本示例使用的方式為通過控制臺配置。具體操作步驟如下:

1)下載安裝Sentinel控制臺
下載并啟動Sentinel控制臺。官方傳送門:Sentinel 控制臺

注意:控制臺默認(rèn)啟動端口是8080,如果需要修改,啟動的時候可以新增命令參數(shù)-Dserver.port=端口。比如,我就修改為8090端口

java -Dserver.port=8090 -jar sentinel-dashboard.jar

2)增加Sentinel配置
在所有的微服務(wù)應(yīng)用中添加如下配置:

spring:
  cloud:
    sentinel:
      transport:
        # 下面的端口,
        dashboard: localhost:8090

因為我已經(jīng)引入了Nacos配置中心,然后這個配置在我的實驗環(huán)境中,應(yīng)該是共享的,所以我就配置到了我在Nacos的application-conf.yaml文件中。如下所示:
在這里插入圖片描述
3)重啟所有微服務(wù)

4)驗證安裝
上述步驟完成之后,就可以打開http://localhost:8090/嘗試訪問了。如下所示:
在這里插入圖片描述

注意,如果您在控制臺沒有找到應(yīng)用,請調(diào)用一下進(jìn)行了 Sentinel 埋點的 URL 或方法,因為 Sentinel 使用了【懶加載】策略

5)配置限流規(guī)則
我在我的實驗環(huán)境這種,選擇了shen-wallet,然后點擊流控規(guī)則,新增流控規(guī)則,內(nèi)容如下:
在這里插入圖片描述
為了讓效果更明顯,我做了如上的配置,意思是:當(dāng)前/wallet/list接口1秒內(nèi)最大訪問次數(shù)。

6)簡單驗證
快速刷新訪問http://localhost:9032/wallet/list,會出現(xiàn)如下所示的結(jié)果:
正常結(jié)果:
在這里插入圖片描述
限流結(jié)果:(Blocked by Sentinel (flow limiting)
在這里插入圖片描述
hold on hold on,我當(dāng)然是比較建議下載JMeter來測試的,我自己就簡單測試了

1.4 設(shè)置熔斷規(guī)則

啊,很尷尬的一個點。如果你們的PRC使用的是OpenFeign,那么可以直接參考這個官方示例,我截圖給大家看吧。
在這里插入圖片描述
但是,我在我的整合方案中,RPC使用的是Dubbo框架的Dubbo協(xié)議,所以,我得另外配置才能實驗這個特性了。

1.4.1 Dubbo整合Sentinel

Dubbo整合Sentinel很簡單,就是引入一個maven依賴就好了

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-dubbo-adapter</artifactId>
    <version>版本</version>
</dependency>

通過引入這個項目,所有Dubbo接口也會被自動【埋點】。后面的所有規(guī)則設(shè)置,跟上面介紹的操作基本是一樣的。給你們看看我的效果:

1)Dubbo接口被Sentinel管理
在這里插入圖片描述

2)對Dubbo資源做降級處理
在這里插入圖片描述

1.5 設(shè)置系統(tǒng)負(fù)載保護

這一點我暫時擱置一下,MD,卡了我一天了,從昨天到現(xiàn)在,我不知道自己哪里沒有設(shè)置對。
在這里插入圖片描述
反正就是沒效果。不知道是不是版本的問題,我百度別人的Sentinel Admin跟我的不是很像。為了校驗我的規(guī)則是否生效,我采用了如下方式:

  1. 通過端點信息查看,規(guī)則是設(shè)置成功的(Endpoint)
  2. 我設(shè)置了最簡單的入口QPS限制,通過壓測工具發(fā)送N多條請求發(fā)現(xiàn)調(diào)用是成功的,反過來證明我的系統(tǒng)負(fù)載設(shè)置失敗
  3. 通過實時監(jiān)控發(fā)現(xiàn),b_qps指標(biāo)又是正常的,證明系統(tǒng)負(fù)載設(shè)置成功
  4. 根據(jù)秒級監(jiān)控日志,看每個指標(biāo)也是合理的,證明系統(tǒng)負(fù)載設(shè)置成功
  5. 自定義了BlockedException想要捕獲異常日志,但是沒有發(fā)現(xiàn)系統(tǒng)保護異常SystemBlockException

暫時性放棄了xdm

二、概念補充:Sentinel規(guī)則

我在學(xué)習(xí)的過程中,發(fā)現(xiàn),Sentinel的規(guī)則還是非常重要的,只有熟練的掌握了這些規(guī)則,我們才能在實際的生產(chǎn)中,做更豐富的流控策略。

2.1 規(guī)則的種類

Sentinel 的所有規(guī)則都可以在內(nèi)存態(tài)中動態(tài)地查詢及修改,修改之后立即生效。同時 Sentinel 也提供相關(guān) API,供您來定制自己的規(guī)則策略。
總的來說,Sentinel 支持以下幾種規(guī)則:流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則 和 熱點參數(shù)規(guī)則。

2.1.1 流量控制規(guī)則 (FlowRule)

重要屬性:
在這里插入圖片描述
PS:同一個資源可以同時有多個限流規(guī)則

通過代碼定義流量控制規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 FlowRuleManager.loadRules() 方法來用硬編碼的方式定義流量控制規(guī)則,比如:

private static void initFlowQpsRule() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule1 = new FlowRule();
    rule1.setResource(resource);
    // Set max qps to 20
    rule1.setCount(20);
    rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule1.setLimitApp("default");
    rules.add(rule1);
    FlowRuleManager.loadRules(rules);
}
2.1.2 熔斷降級規(guī)則 (DegradeRule)

重要屬性:
在這里插入圖片描述
PS:同一個資源可以同時有多個降級規(guī)則

通過代碼定義熔斷降級規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 DegradeRuleManager.loadRules() 方法來用硬編碼的方式定義流量控制規(guī)則。

private static void initDegradeRule() {
    List<DegradeRule> rules = new ArrayList<>();
    DegradeRule rule = new DegradeRule(resource);
        .setGrade(CircuitBreakerStrategy.ERROR_RATIO.getType());
        .setCount(0.7); // Threshold is 70% error ratio
        .setMinRequestAmount(100)
        .setStatIntervalMs(30000) // 30s
        .setTimeWindow(10);
    rules.add(rule);
    DegradeRuleManager.loadRules(rules);
}
2.1.3 系統(tǒng)保護規(guī)則 (SystemRule)

Sentinel 系統(tǒng)自適應(yīng)限流從整體維度對應(yīng)用入口流量進(jìn)行控制,結(jié)合應(yīng)用的 Load、CPU 使用率、總體平均 RT、入口 QPS 和并發(fā)線程數(shù)等幾個維度的監(jiān)控指標(biāo),通過自適應(yīng)的流控策略,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達(dá)到一個平衡,讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性。

重要屬性:
在這里插入圖片描述
通過代碼定義系統(tǒng)保護規(guī)則:
理解上面規(guī)則的定義之后,我們可以通過調(diào)用 SystemRuleManager.loadRules() 方法來用硬編碼的方式定義流量控制規(guī)則:

private void initSystemProtectionRule() {
  List<SystemRule> rules = new ArrayList<>();
  SystemRule rule = new SystemRule();
  rule.setHighestSystemLoad(10);
  rules.add(rule);
  SystemRuleManager.loadRules(rules);
}
2.1.4 訪問控制規(guī)則 (AuthorityRule)

很多時候,我們需要根據(jù)調(diào)用方來限制資源是否通過,這時候可以使用 Sentinel 的訪問控制(黑白名單)的功能。黑白名單根據(jù)資源的請求來源(origin)限制資源是否通過,若配置白名單則只有請求來源位于白名單內(nèi)時才可通過;若配置黑名單則請求來源位于黑名單時不通過,其余的請求通過。
授權(quán)規(guī)則,即黑白名單規(guī)則(AuthorityRule)非常簡單,主要有以下配置項:

  • resource:資源名,即限流規(guī)則的作用對象
  • limitApp:對應(yīng)的黑名單/白名單,不同 origin 用 , 分隔,如 appA,appB
  • strategy:限制模式,AUTHORITY_WHITE 為白名單模式,AUTHORITY_BLACK 為黑名單模式,默認(rèn)為白名單模式
2.1.5 熱點規(guī)則 (ParamFlowRule)

熱點規(guī)則的配置略顯麻煩一點。首先需要理解,什么是熱點

熱點:
何為熱點?熱點即經(jīng)常訪問的數(shù)據(jù)。很多時候我們希望統(tǒng)計某個熱點數(shù)據(jù)中訪問頻次最高的 Top K 數(shù)據(jù),并對其訪問進(jìn)行限制。比如:

  • 商品 ID 為參數(shù),統(tǒng)計一段時間內(nèi)最常購買的商品 ID 并進(jìn)行限制
  • 用戶 ID 為參數(shù),針對一段時間內(nèi)頻繁訪問的用戶 ID 進(jìn)行限制
    熱點參數(shù)限流會統(tǒng)計傳入?yún)?shù)中的熱點參數(shù),并根據(jù)配置的限流閾值與模式,對包含熱點參數(shù)的資源調(diào)用進(jìn)行限流。熱點參數(shù)限流可以看做是一種特殊的流量控制,僅對包含熱點參數(shù)的資源調(diào)用生效。

限流原理:
Sentinel 利用 LRU 策略統(tǒng)計最近最常訪問的熱點參數(shù),結(jié)合令牌桶算法來進(jìn)行參數(shù)級別的流控

在我們項目中,如果想要使用改規(guī)則,還需要額外引入maven依賴:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-parameter-flow-control</artifactId>
    <version>x.y.z</version>
</dependency>

重要屬性:
在這里插入圖片描述文章來源地址http://www.zghlxwxcb.cn/news/detail-819092.html

學(xué)習(xí)總結(jié)

感謝

  1. 感謝Alibaba Sentinel的文章《在生產(chǎn)環(huán)境中使用 Sentinel》

到了這里,關(guān)于【分布式微服務(wù)專題】從單體到分布式(四、SpringCloud整合Sentinel)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 單體架構(gòu) 微服務(wù)架構(gòu) 分布式 微服務(wù)通信方式 網(wǎng)關(guān)與nginx

    單體架構(gòu) 優(yōu)點:架構(gòu)簡單,維護成本低 缺點:各個模塊耦合度太高,當(dāng)對一個模塊進(jìn)行更新修改時,會影響到其他模塊,要一起進(jìn)行修改。當(dāng)存在性能瓶頸的時候,需要對整個服務(wù)進(jìn)行擴容,不能有針對性的擴容,如一個程序的主要功能時其中某個服務(wù),要對其增加機器,

    2024年02月10日
    瀏覽(104)
  • 四大軟件架構(gòu):掌握單體、分布式、微服務(wù)、Serverless 的精髓

    四大軟件架構(gòu):掌握單體、分布式、微服務(wù)、Serverless 的精髓

    簡介: 如果一個軟件開發(fā)人員,不了解軟件架構(gòu)的演進(jìn),會制約技術(shù)的選型和開發(fā)人員的生存、晉升空間。這里我列舉了目前主要的四種軟件架構(gòu)以及他們的優(yōu)缺點,希望能夠幫助軟件開發(fā)人員拓展知識面。 單體架構(gòu)比較初級,典型的三級架構(gòu),前端(Web/手機端)+中間業(yè)務(wù)邏

    2024年01月17日
    瀏覽(40)
  • 譯:從分布式微服務(wù)到單體

    譯:從分布式微服務(wù)到單體

    原文:https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90 從分布式微服務(wù)架構(gòu)遷移到整體式應(yīng)用程序有助于實現(xiàn)更高的規(guī)模、彈性并降低成本。 在Prime Video,我們?yōu)榭蛻籼峁?shù)千個直播流。為了確??蛻魺o縫接收內(nèi)容,Prime Vi

    2024年02月03日
    瀏覽(25)
  • 下一代服務(wù)架構(gòu):單體架構(gòu)-->分布式架構(gòu)-->微服務(wù)(DDD)-->軟件定義架構(gòu)(SDF with GraphEngine)

    下一代服務(wù)架構(gòu):單體架構(gòu)-->分布式架構(gòu)-->微服務(wù)(DDD)-->軟件定義架構(gòu)(SDF with GraphEngine)

    參考:自己實現(xiàn)一個SQL解析引擎_曾經(jīng)的學(xué)渣的博客-CSDN博客 ? ?

    2024年02月12日
    瀏覽(92)
  • 深度解析四大主流軟件架構(gòu)模型:單體架構(gòu)、分布式應(yīng)用、微服務(wù)與Serverless的優(yōu)缺點及場景應(yīng)用

    深度解析四大主流軟件架構(gòu)模型:單體架構(gòu)、分布式應(yīng)用、微服務(wù)與Serverless的優(yōu)缺點及場景應(yīng)用

    ???? 博主貓頭虎 帶您 Go to New World.??? ?? 博客首頁——貓頭虎的博客?? ??《面試題大全專欄》 文章圖文并茂??生動形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》學(xué)會IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)入門篇)》學(xué)會Golang語言

    2024年02月06日
    瀏覽(93)
  • 云事業(yè)群CTO線技術(shù)晉升考核機試題-分布式專題-F 分布式服務(wù)鏈路動態(tài)追蹤

    作者:田超凡 1 分布式服務(wù)鏈路動態(tài)追蹤產(chǎn)生的背景 答:在分布式微服務(wù)系統(tǒng)中,隨著業(yè)務(wù)的發(fā)展,系統(tǒng)的規(guī)模也越來越大,服務(wù)和服務(wù)之間的調(diào)用關(guān)系也越來越復(fù)雜。比如一次HTTP請求可能會在多個服務(wù)和服務(wù)之間進(jìn)行多次組合調(diào)用,在這個過程中,當(dāng)一個服務(wù)出現(xiàn)故障,

    2024年02月16日
    瀏覽(60)
  • 微服務(wù)【分布式架構(gòu)&認(rèn)識微服務(wù)&SpringCloud】第1章

    微服務(wù)【分布式架構(gòu)&認(rèn)識微服務(wù)&SpringCloud】第1章

    目錄 1,認(rèn)識微服務(wù) 1.1,單體架構(gòu) 1.2,分布式架構(gòu) 1.3,微服務(wù) 1.4,SpringCloud 1.5,總結(jié) ?? 個人主頁: ?愛吃豆的土豆 ?? 版權(quán): ?本文由【愛吃豆的土豆】原創(chuàng)、在CSDN首發(fā)、需要轉(zhuǎn)載請聯(lián)系博主 ?? 如果文章對你有幫助、 歡迎關(guān)注、點贊、收藏(一鍵三連)和訂閱專欄哦 ?? 人

    2023年04月08日
    瀏覽(97)
  • SpringCloud電影院購票系統(tǒng)-微服務(wù)-分布式

    SpringCloud電影院購票系統(tǒng)-微服務(wù)-分布式

    隨著科技的快速發(fā)展,互聯(lián)網(wǎng)的普及以及用戶數(shù)量的劇增,傳統(tǒng)的單體應(yīng)用已經(jīng)無法滿足業(yè)務(wù)快速發(fā)展的需求。為了應(yīng)對這種挑戰(zhàn),微服務(wù)架構(gòu)和分布式系統(tǒng)應(yīng)運而生。而Spring Cloud作為目前最流行的微服務(wù)框架,其提供的各種服務(wù)和工具能夠幫助開發(fā)者快速構(gòu)建和部署分布式

    2024年02月19日
    瀏覽(22)
  • SpringCloud搭建微服務(wù)之Micrometer分布式鏈路追蹤

    SpringCloud搭建微服務(wù)之Micrometer分布式鏈路追蹤

    由于Spring Cloud Sleuth最新版本只支持Spring Boot 2.7.x,核心項目已經(jīng)遷移到Micrometer Traceing項目,Spring Boot 3.x版本要實現(xiàn)分布式鏈路追蹤需要集成Micrometer。更多詳情可以參閱Micrometer官網(wǎng) 本文將以Spring Boot 3.2.x和Spring Cloud 2023.0.x版本和JDK 17實現(xiàn)分布式鏈路追蹤,有需要了解Spring Bo

    2024年03月22日
    瀏覽(24)
  • 【springcloud微微服務(wù)】分布式事務(wù)框架Seata使用詳解

    目錄 一、前言 二、事務(wù)簡介 2.1 原子性 2.2 一致性 2.3?隔離性 2.4?持久性

    2023年04月26日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包