亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?Boot整合流控組件Sentinel的場景分析

 更新時間:2021年12月08日 10:34:49   作者:哪?吒  
Sentinel?提供簡單易用、完善的?SPI?擴展接口。您可以通過實現(xiàn)擴展接口來快速地定制邏輯,這篇文章主要介紹了Spring?Boot整合流控組件Sentinel的過程解析,需要的朋友可以參考下

一、百度百科

Sentinel 是面向分布式服務(wù)架構(gòu)的高可用流量防護組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統(tǒng)負(fù)載保護、熱點防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性。

1、Sentinel 特性

豐富的應(yīng)用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應(yīng)用等。

完備的實時監(jiān)控:Sentinel 同時提供實時的監(jiān)控功能。您可以在控制臺中看到接入應(yīng)用的單臺機器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運行情況。
廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應(yīng)的依賴并進行簡單的配置即可快速地接入 Sentinel。

完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現(xiàn)擴展接口來快速地定制邏輯。例如定制規(guī)則管理、適配動態(tài)數(shù)據(jù)源等。

2、Sentinel 的開源生態(tài)

二、Sentinel 的歷史

2012 年,Sentinel 誕生,主要功能為入口流量控制。

2013-2017 年,Sentinel 在阿里巴巴集團內(nèi)部迅速發(fā)展,成為基礎(chǔ)技術(shù)模塊,覆蓋了所有的核心場景。Sentinel 也因此積累了大量的流量歸整場景以及生產(chǎn)實踐。

2018 年,Sentinel 開源,并持續(xù)演進。

2019 年,Sentinel 朝著多語言擴展的方向不斷探索,推出C++原生版本,同時針對 Service Mesh 場景也推出了Envoy 集群流量控制支持,以解決 Service Mesh 架構(gòu)下多語言限流的問題。

2020 年,推出Sentinel Go 版本,繼續(xù)朝著云原生方向演進。

三、Sentinel 基本概念

1、資源

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

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

2、規(guī)則

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

四、sentinel的優(yōu)勢

友好的控制面板
支持實時監(jiān)控
支持多種限流,比如QPS限流,線程數(shù)以及多種限流策略
支持多種降級模式,支持按平均返回時間降級,按多種異常數(shù)降級,按異常比例降級等
方便擴展開發(fā),支持SPI模式對chain進行擴展
支持鏈路的關(guān)聯(lián),可以實現(xiàn)按鏈路統(tǒng)計限流,系統(tǒng)保護,熱門資源保護等等

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

1、什么是流量控制

流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)。然而,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上,也有非常多的講究。任意時間到來的請求往往是隨機不可控的,而系統(tǒng)的處理能力是有限的。我們需要根據(jù)系統(tǒng)的處理能力對流量進行控制。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機的請求調(diào)整成合適的形狀,如下圖所示:

2、流量控制設(shè)計理念

流量控制有以下幾個角度:

資源的調(diào)用關(guān)系,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系;
運行指標(biāo),例如 QPS、線程池、系統(tǒng)負(fù)載等;
控制的效果,例如直接限流、冷啟動、排隊等。
Sentinel 的設(shè)計理念是讓您自由選擇控制的角度,并進行靈活組合,從而達到想要的效果。

3、什么是熔斷降級

除了流量控制以外,及時對調(diào)用鏈路中的不穩(wěn)定因素進行熔斷也是 Sentinel 的使命之一。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定,可能會導(dǎo)致請求發(fā)生堆積,進而導(dǎo)致級聯(lián)錯誤。

Sentinel 和 Hystrix 的原則是一致的: 當(dāng)檢測到調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定的表現(xiàn),例如請求響應(yīng)時間長或異常比例升高的時候,則對這個資源的調(diào)用進行限制,讓請求快速失敗,避免影響到其它的資源而導(dǎo)致級聯(lián)故障。

這里是引用Hystrix源自Netflix API團隊于2011年開始的彈性工程工作。2012年Hystrix不斷發(fā)展和成熟,Netflix內(nèi)的許多團隊都采用了它。如今,每天在Netflix執(zhí)行數(shù)以千億計的線程隔離和數(shù)以千計的信號隔離調(diào)用,這大大的提高了運行時間和彈性。

4、熔斷降級設(shè)計理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一樣的方法。

Hystrix 通過線程池隔離的方式,來對依賴(在 Sentinel 的概念中對應(yīng) 資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了線程切換的成本(過多的線程池導(dǎo)致線程數(shù)目過多),還需要預(yù)先給各個資源做線程池大小的分配,并且對于一些使用了 ThreadLocal 的場景來說會有問題(如 Spring 事務(wù))。

Sentinel 對這個問題采取了兩種手段:

(1)通過并發(fā)線程數(shù)進行限制

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

(2)針對慢調(diào)用和異常對資源進行降級

除了對并發(fā)線程數(shù)進行控制以外,Sentinel 還可以根據(jù)響應(yīng)時間和異常等不穩(wěn)定因素來快速對不穩(wěn)定的調(diào)用進行熔斷。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新漸進式地恢復(fù)。

5、系統(tǒng)自適應(yīng)保護

Sentinel 同時提供系統(tǒng)維度的自適應(yīng)保護能力。防止雪崩,是系統(tǒng)防護中重要的一環(huán)。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進入,可能會導(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ù)載達到一個平衡,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求。

6、Sentinel 是如何工作的

Sentinel 的主要工作機制如下:

對主流框架提供適配或者顯示的 API,來定義需要保護的資源,并提供設(shè)施對資源進行實時統(tǒng)計和調(diào)用鏈路分析。

根據(jù)預(yù)設(shè)的規(guī)則,結(jié)合對資源的實時統(tǒng)計信息,對流量進行控制。同時,Sentinel 提供開放的接口,方便您定義及改變規(guī)則。

Sentinel 提供實時的監(jiān)控系統(tǒng),方便您快速了解目前系統(tǒng)的狀態(tài)。

7、競品對比

六、SpringBoot整合sentinel

1、加入pom

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.2.1.RELEASE</version>
</dependency>

2、編寫sentinel規(guī)則

@PostConstruct
public void initFlowRules(){
    //1.創(chuàng)建存放限流規(guī)則的集合
    List<FlowRule> rules = new ArrayList<>();
    //2.創(chuàng)建限流規(guī)則
    FlowRule rule = new FlowRule();
    //定義資源,表示sentinel會對這個資源生效
    rule.setResource("helloSentinel");
    //定義限流規(guī)則類型
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    //定義QPS每秒能通過的請求個數(shù)
    rule.setCount(2);
    //3.將限流規(guī)則放入集合中
    rules.add(rule);
    //4.加載限流規(guī)則
    FlowRuleManager.loadRules(rules);
}
@GetMapping("/helloSentinel")
public String hello(){
    try{
        Entry entry = SphU.entry("helloSentinel");
        return "helloSentinel success.";
    }catch (Exception e){
        log.error(e.getMessage());
        return "helloSentinel error";
    }
}

3、測試

(1)頻率小于1秒兩次時,訪問成功

(2)頻率大于1秒兩次時,由于限流規(guī)則的設(shè)立,故失敗

七、springboot整合sentinel dashboard

1、安裝sentinel dashboard

(1)下載jar包

sentinel-1.7.1jar包下載鏈接

鏈接: https://pan.baidu.com/s/1MSwFNSaE_3gRxe6nsNXNDQ

提取碼: e5j2?

(2)啟動jar包

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

2、springboot整合sentinel dashboard

(1)引入pom

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.7.2</version>
</dependency>

(2)配置啟動類

-Dcsp.sentinel.dashboard.server=localhost:9000 -Dproject.name=GooReeyProject

(3)通過調(diào)用接口,使其在dashboard顯示出來

3、用sentinel dashboard配置流控

(1)注釋掉代碼中的流控設(shè)置代碼

(2)用控制臺的配置取代代碼

八、sentinel中其它定義資源的方式

1、拋出異常的方式定義資源

@GetMapping("/helloSentinel")
public String hello(){
    try{
        Entry entry = SphU.entry("helloSentinel");
        return "helloSentinel success.";
    }catch (Exception e){
        log.error(e.getMessage());
        return "helloSentinel error";
    }
}

2、返回布爾值方式定義資源

代碼示例:

@GetMapping("/sentinelBoolean")
public boolean sentinelBoolean(){
    if(SphO.entry("sentinelBoolean")){
        try {
            log.info("sentinelBoolean success.");
            return true;
        }finally {
            SphO.exit();
        }
    }else{
        log.warn("sentinelBoolean error.");
        return false;
    }
}

3、sentinel支持異步調(diào)用鏈路的統(tǒng)計

在異步調(diào)用中,需要通過SphU.asynvEntry(xxx)方法定義資源,并通常需要在異步的回調(diào)函數(shù)中調(diào)用exit()方法。

代碼編寫:

(1)啟動類加入@EnableAsync注解

@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = "com.guor")
@MapperScan("com.guor.management.dao")
@RefreshScope
@EnableAsync
public class ManagementApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(ManagementApplication.class, args);
    }
 
}

(3)控制層

@GetMapping("/sentinelAsync")
public void sentinelAsync(){
    AsyncEntry asyncEntry = null;
    try {
        asyncEntry = SphU.asyncEntry("sentinelAsync");
        userService.sentinelAsync();
        log.info("sentinelAsync success.");
    }catch (BlockException e){
        log.error("sentinelAsync error.");
    }finally {
        if(asyncEntry != null){
            asyncEntry.exit();
        }
    }
}

sentinel dashboard未定義時:

sentinel dashboard定義后:流控成功!

4、注解形式定義資源

(1)pom文件

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
    <version>1.7.2</version>
</dependency>

(2)配置類

package com.guor.management.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect;
 
@Configuration
public class SentinelAspectConfig {
 
    @Bean
    public SentinelResourceAspect sentinelResourceAspect(){
        return new SentinelResourceAspect();
    }
}

(3)控制類

@SentinelResource(value = "sentinel_Annotation", blockHandler = "exceptionHandler")
@GetMapping("/annotation")
public String sentinelAnnotation(){
    return "sentinelAnnotation";
}
 
public String exceptionHandler(BlockException e){
    e.printStackTrace();
    return "系統(tǒng)繁忙,請稍后";
}

(4)定義流控規(guī)則

到此這篇關(guān)于Spring?Boot整合流控組件Sentinel的文章就介紹到這了,更多相關(guān)Spring?Boot流控組件Sentinel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 和 Spring 到底有啥區(qū)別你知道嗎

    Spring Boot 和 Spring 到底有啥區(qū)別你知道嗎

    Spring Boot框架的核心就是自動配置,只要存在相應(yīng)的jar包,Spring就幫我們自動配置。接下來通過本文給大家介紹Spring與Spring boot的區(qū)別介紹,非常不錯,需要的朋友參考下吧
    2021-08-08
  • 解決spring mvc 多數(shù)據(jù)源切換,不支持事務(wù)控制的問題

    解決spring mvc 多數(shù)據(jù)源切換,不支持事務(wù)控制的問題

    下面小編就為大家?guī)硪黄鉀Qspring mvc 多數(shù)據(jù)源切換,不支持事務(wù)控制的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作

    Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作

    這篇文章主要介紹了Springboot開發(fā)OAuth2認(rèn)證授權(quán)與資源服務(wù)器操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • springboot擴展MVC的方法

    springboot擴展MVC的方法

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著springboot擴展MVC的方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Maven dependency中的scope案例講解

    Maven dependency中的scope案例講解

    Maven的一個哲學(xué)是慣例優(yōu)于配置(Convention Over Configuration), Maven默認(rèn)的依賴配置項中,scope的默認(rèn)值是compile,本文給大家介紹Maven dependency中的scope案例講解,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • spring?項目實現(xiàn)限流方法示例

    spring?項目實現(xiàn)限流方法示例

    這篇文章主要為大家介紹了spring項目實現(xiàn)限流的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 通過Java修改游戲存檔的實現(xiàn)思路

    通過Java修改游戲存檔的實現(xiàn)思路

    這篇文章主要介紹了通過Java修改游戲存檔的實現(xiàn)思路,實現(xiàn)方法也很簡單,因為植物大戰(zhàn)僵尸游戲的數(shù)據(jù)文件存儲在本地的存儲位置是已知的,因此我們可以將實現(xiàn)過程拆分為三個步驟,需要的朋友可以參考下
    2021-10-10
  • Java利用沙箱支付實現(xiàn)電腦掃碼支付教程

    Java利用沙箱支付實現(xiàn)電腦掃碼支付教程

    當(dāng)我們制作的項目需要實現(xiàn)電腦掃碼支付功能時,我們往往會采用沙箱支付來模擬實現(xiàn)。本文將主要介紹如何在Java中利用沙箱支付實現(xiàn)這一功能,需要的可以參考一下
    2022-01-01
  • Java Swing組件編程之JTable表格用法實例詳解

    Java Swing組件編程之JTable表格用法實例詳解

    這篇文章主要介紹了Java Swing組件編程之JTable表格用法,結(jié)合實例形式詳細(xì)分析了Swing組件中JTable表格的常見定義與使用方法,需要的朋友可以參考下
    2017-11-11
  • 詳解JAVA 線程-線程的狀態(tài)有哪些?它是如何工作的?

    詳解JAVA 線程-線程的狀態(tài)有哪些?它是如何工作的?

    這篇文章主要介紹了詳解JAVA 線程的的相關(guān)資料,文中講解非常細(xì)致,源碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06

最新評論