最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud中使用Sentinel實現(xiàn)限流的實戰(zhàn)

 更新時間:2022年01月19日 12:01:54   作者:蹊源的奇思妙想  
限流在很多地方都可以使用的到,本篇博客將介紹如何使用SpringCloud中使用Sentinel實現(xiàn)限流,從而達到服務(wù)降級的目的,感興趣的可以了解一下

前言

在分布式的項目中經(jīng)常會遇到那種高并發(fā)的場景,為了保證系統(tǒng)不會被突然激增的請求導(dǎo)致宕機,我們常常會使用一種服務(wù)降級的手段來保護我們的系統(tǒng),本篇博客將介紹如何使用SpringCloud中使用Sentinel實現(xiàn)限流,從而達到服務(wù)降級的目的。

正文 Sentinel

Sentinel 是面向微服務(wù)的輕量級流量控制框架,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度保護服務(wù)的穩(wěn)定性。

Sentinel可以作為Hystrix的替代品,為系統(tǒng)提供服務(wù)熔斷和服務(wù)降級的功能。

  • 服務(wù)熔斷:根據(jù)保險絲的熔斷是一個原理,當調(diào)用目標服務(wù)大量超時和失敗,這時候應(yīng)該熔斷掉該服務(wù)的調(diào)用,從而快速釋放資源,這段時間所有對其調(diào)用都是快速返回,保證整體服務(wù)系統(tǒng)的穩(wěn)定
  • 服務(wù)降級:針對核心業(yè)務(wù)服務(wù)的壓力劇增,根據(jù)當前業(yè)務(wù)場景和流量對其他非核心服務(wù)進行降級處理,可以進行限流,快速返回等處理,釋放資源保證核心任務(wù)的正常運行。

Sentinel的限流原理

  • SentinelBucket(桶)為單位記錄一個時間窗口內(nèi)的請求總數(shù)、異常總數(shù)、總耗時等指標數(shù)據(jù)。
  • 而一個Bucket可以是記錄一秒內(nèi)的數(shù)據(jù),也可以是10毫秒內(nèi)的數(shù)據(jù),我們稱這個時間窗口為Bucket的統(tǒng)計單位,由使用者自定義。

所以Sentinel是基于滑動窗口算法來實現(xiàn)的。

設(shè)置Sentinel的閾值指標:

線程數(shù)模式
線程數(shù)的模式采用信號隔離的方式來防止線程池被占用。
用于防止線程池被占用,一般有兩種方式:

  • 線程池隔離:為應(yīng)對太多線程占用的情況,業(yè)內(nèi)有使用隔離的方案,比如通過不同業(yè)務(wù)邏輯使用不同線程池來隔離業(yè)務(wù)自身之間的資源爭搶,這種隔離方案雖然隔離性比較好,但是代價就是線程數(shù)目太多,線程上下文切換的 overhead 比較大,特別是對低延時的調(diào)用有比較大的影響。
  • 信號隔離sentinel采用的是信號隔離的方案,簡單統(tǒng)計當前請求上下文的線程數(shù)目(正在執(zhí)行的調(diào)用數(shù)目),如果超出閾值,新的請求會被立即拒絕。

所以業(yè)務(wù)處理是多線程的情況下使用線程數(shù)模式。

Sentinel采用信號隔離的方式,通過并發(fā)線程數(shù)模式,并結(jié)合基于響應(yīng)時間的熔斷降級模式,可以在不穩(wěn)定的平均相應(yīng)時間比較高的時候自動降級,防止過多的慢調(diào)用占滿并發(fā)數(shù),影響整個系統(tǒng),避免慢調(diào)用引起依賴雪崩的現(xiàn)象。

QPS模式
QPS即每秒查詢率,是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標準。
QPS模式適合單讀線程情況(如servlet請求),這種模式下提供了三種更加精確的流控方式:

  • 直接拒絕 :直接失敗
  • Warm Up: 即請求 QPSthreshold / 3 開始,經(jīng)預(yù)熱時長逐漸升至設(shè)定的 QPS 閾值,通常用于秒殺系統(tǒng)。
  • 勻速排隊:設(shè)置一個等待時間, 勻速處理請求,保證服務(wù)的均勻性,不能處理QPS>1000的場景。

Sentinel 兩種計算閾值的模式:

  • 集群總體模式:即限制整個集群內(nèi)的某個資源的總體 qps 不超過此閾值。
  • 單機均攤模式:單機均攤模式下配置的閾值等同于單機能夠承受的限額,token server 會根據(jù)連接數(shù)來計算總的閾值(比如獨立模式下有 3個 client 連接到了 token server,然后配的單機均攤閾值為 10,則計算出的集群總量就為30),按照計算出的總的閾值來進行限制。這種方式根據(jù)當前的連接數(shù)實時計算總的閾值,對于機器經(jīng)常進行變更的環(huán)境非常適合。

這里要說明的是:qps是每秒查詢數(shù), tps是每秒內(nèi)的事務(wù)數(shù), pv 是指頁面被瀏覽的次數(shù)。

Sentinel流控模式

  • 直接模式: 接口達到限流條件時,開啟限流
  • 關(guān)聯(lián)模式: 當關(guān)聯(lián)的資源達到限流條件時,開啟限流
  • 鏈路模式:當從某個接口過來的資源達到限流條件時,開啟限流

Sentinel限流的方式

  • Sentinel控制臺中根據(jù)url進行限流設(shè)置
  • 通過注解的方式進行自定義限流,又可以分為:自定義url限流和自定義資源限流。

第一步:部署sentinel-dashboard

sentinel-dashboard(點擊下載jar包)是一個單獨的應(yīng)用,通過spring-boot進行啟動,主要提供一個輕量級的控制臺,它提供機器發(fā)現(xiàn)、單機資源實時監(jiān)控、集群資源匯總,以及規(guī)則管理的功能。
這里可以理解為sentinel服務(wù)治理中心。

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

在這里插入圖片描述

第二步:在項目中整合sentinel

注入依賴

<!--springCloud-Alibaba-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.2.0.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

<!--sentinel限流-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  <version>2.2.1.RELEASE</version>
</dependency>

在application.properties中的相關(guān)配置

spring.application.name=imagerepair
server.port=8080
spring.cloud.sentinel.transport.dashboard=127.0.0.1:18080
spring.cloud.sentinel.eager=true

Controller層

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping("/hello")
    public String hello(){
      return userService.sayHello();
    }
}

Service

@Service
public class UserService {

    @SentinelResource(value = "sayHello",fallback = "sayHellofail")
    public String sayHello(){
        return "Hello,World";
    }

    public  String sayHellofail(){
        return "I'am sorry";
    }

}

在這里插入圖片描述

設(shè)置限流,快速訪問,從而觸發(fā)服務(wù)降級

設(shè)置Sentinel的資源

在這里插入圖片描述

當請求超過設(shè)定的閾值,啟動限流降級,展示如下:

在這里插入圖片描述

項目源碼

該項目源碼可從我的github中獲取。

到此這篇關(guān)于SpringCloud中使用Sentinel實現(xiàn)限流的實戰(zhàn)的文章就介紹到這了,更多相關(guān)SpringCloud Sentinel限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    今天小編就為大家分享一篇完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Mybatis批量更新三種方式的實現(xiàn)

    Mybatis批量更新三種方式的實現(xiàn)

    這篇文章主要介紹了Mybatis批量更新三種方式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Java中String、StringBuffer、StringBuilder的區(qū)別詳解

    Java中String、StringBuffer、StringBuilder的區(qū)別詳解

    java中String、StringBuffer、StringBuilder是編程中經(jīng)常使用的字符串類,他們之間有什么區(qū)別呢?下面小編給大家總結(jié)了Java中String、StringBuffer、StringBuilder的區(qū)別詳解,需要的朋友參考下吧
    2016-06-06
  • Java集合框架之List ArrayList LinkedList使用詳解刨析

    Java集合框架之List ArrayList LinkedList使用詳解刨析

    早在 Java 2 中之前,Java 就提供了特設(shè)類。比如:Dictionary, Vector, Stack, 和 Properties 這些類用來存儲和操作對象組。雖然這些類都非常有用,但是它們?nèi)鄙僖粋€核心的,統(tǒng)一的主題。由于這個原因,使用 Vector 類的方式和使用 Properties 類的方式有著很大不同
    2021-10-10
  • SpringBoot+SpringSecurity 不攔截靜態(tài)資源的實現(xiàn)

    SpringBoot+SpringSecurity 不攔截靜態(tài)資源的實現(xiàn)

    這篇文章主要介紹了SpringBoot+SpringSecurity 不攔截靜態(tài)資源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 一起來了解Java的File類和IO流

    一起來了解Java的File類和IO流

    這篇文章主要為大家詳細介紹了Java?File類和IO流,在Java學(xué)習(xí)中,file類與io流是非常重要的部分,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • eclipse/intellij idea 查看java源碼和注釋方法

    eclipse/intellij idea 查看java源碼和注釋方法

    下面小編就為大家?guī)硪黄猠clipse/intellij idea 查看java源碼和注釋方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java socket通信模擬QQ實現(xiàn)多人聊天室

    Java socket通信模擬QQ實現(xiàn)多人聊天室

    Socket在Java實戰(zhàn)網(wǎng)絡(luò)通信編程應(yīng)用中有非常重要的作用,你想要跟別人聯(lián)系都得通過socket占據(jù)端口來實現(xiàn),掌握Socket技術(shù)不僅在聊天應(yīng)用程序中需要用到(比如QQ什么的都都是用socket來寫的),而且對于學(xué)習(xí) Asp.net 也非常有幫助
    2022-07-07
  • Java 從互聯(lián)網(wǎng)上爬郵箱代碼示例

    Java 從互聯(lián)網(wǎng)上爬郵箱代碼示例

    這篇文章介紹了Java 從互聯(lián)網(wǎng)上爬郵箱的有關(guān)內(nèi)容,主要是一個代碼示例,小編覺得挺不錯的,這里給大家分享下,需要的朋友可以了解。
    2017-10-10
  • javaweb如何使用華為云短信通知公共類調(diào)用

    javaweb如何使用華為云短信通知公共類調(diào)用

    這篇文章主要介紹了javaweb使用華為云短信通知公共類調(diào)用的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

永丰县| 乐至县| 建水县| 北票市| 盐边县| 云龙县| 通辽市| 新平| 嘉祥县| 乾安县| 普定县| 桂东县| 敖汉旗| 洛阳市| 巴林左旗| 石景山区| 盐山县| 晋宁县| 枝江市| 锡林浩特市| 武定县| 绥宁县| 柳林县| 章丘市| 睢宁县| 兴化市| 英山县| 临澧县| 化隆| 民丰县| 鄂托克前旗| 四平市| 龙泉市| 长宁区| 芮城县| 鄂尔多斯市| 买车| 梁平县| 霍城县| 巴青县| 汽车|