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

實(shí)戰(zhàn):Springboot集成Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)

這篇具有很好參考價(jià)值的文章主要介紹了實(shí)戰(zhàn):Springboot集成Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

前面的文章我們學(xué)習(xí)了Hystrix并和springboot項(xiàng)目進(jìn)行了集成,實(shí)現(xiàn)服務(wù)的熔斷降級(jí)、隔離措施。但是Hystrix對(duì)流量的控制不是很好,僅僅信號(hào)量也只能對(duì)指定的接口進(jìn)行限流,至于保護(hù)機(jī)制Hystrix也只是達(dá)到指標(biāo)進(jìn)行熔斷。那么,有沒有一種中間件可以在兼容熔斷降級(jí)的同時(shí)精準(zhǔn)實(shí)現(xiàn)流量控制和負(fù)載保護(hù)呢?回答是當(dāng)然有的,就是我們今天的主角Spring Cloud Alibaba Sentinel。
springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

知識(shí)積累

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

流量控制

Sentinel 可以針對(duì)不同的調(diào)用關(guān)系,按照指定的指標(biāo)進(jìn)行流程整形控制。而且整形的策略有直接拒絕、慢啟動(dòng)預(yù)熱和勻速器三大模式,開發(fā)者可用根據(jù)自身需求選用策略實(shí)現(xiàn)流量的精準(zhǔn)控制。

負(fù)載保護(hù)

Sentinel 可用提供精準(zhǔn)的負(fù)載保護(hù)機(jī)制,如果被調(diào)用服務(wù)達(dá)到最大負(fù)載會(huì)將請(qǐng)求負(fù)載均衡到其他服務(wù)提供者上面,如果其他服務(wù)也達(dá)到了最大負(fù)載則會(huì)啟動(dòng)服務(wù)保護(hù)機(jī)制讓請(qǐng)求流量和服務(wù)的負(fù)載達(dá)到平衡。

熔斷降級(jí)

Sentinel 也是提供了基礎(chǔ)的熔斷降級(jí)功能,如果服務(wù)提供著拋出一次會(huì)直接降級(jí)走fallback邏輯,如果是配置指標(biāo)則走blockhander邏輯。當(dāng)然,如果服務(wù)集群達(dá)到最大負(fù)載會(huì)執(zhí)行熔斷功能,防止服務(wù)雪崩的發(fā)生。

官方文檔

https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

實(shí)戰(zhàn)演練

部署sentinel-dashboard

下載jar包
https://github.com/alibaba/Sentinel/releases
springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

直接jar包部署

nohup java -jar -Dserver.port=8109 sentinel-dashboard.jar &

docker-compose編排

有條件的可以直接使用dashboard鏡像,如果pull緩慢則考慮自己構(gòu)建鏡像。
dockerfile

# this is sentinel-dashboard dockerfile
# version 1.0
# 基礎(chǔ)鏡像
FROM openjdk:8-jre
# 維護(hù)人
MAINTAINER senfel<187@sina.cn>
#jar
COPY ./sentinel-dashboard.jar /home/app.jar
# 端口
EXPOSE 8109
# 執(zhí)行命令啟動(dòng)jar
ENTRYPOINT ["java","-jar","/home/app.jar"]

docker-compose.yml

version: '3.3'
services:
  sentinel:
    build: ./
    image: senfel/sentinel-dashboard
    container_name: sentinel-dashboard
    ports:
      - 8109:8109
    environment:
      JVM_OPTS: -server -Xmx512M -Xms512M -XX:MaxMetaspaceSize=256M -XX:CompressedClassSpaceSize=50M -XX:ReservedCodeCacheSize=240M -XX:MaxDirectMemorySize=400M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "1"
    volumes:
      - "/home/test/demo/sentinel/logs:/root/logs"
      - "/home/test/demo/sentinel/logs:/app-logs"
    command: [
      "--server.port=8109",
      "--logging.file.path=/app-logs"
    ]

構(gòu)件并啟動(dòng)容器

docker-compose up -d --build

查看sentinel容器

docker ps | grep sentinel

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

springboot集成sentinel

基礎(chǔ)架構(gòu)搭建

持久化流量控制規(guī)則,其他規(guī)則只需要增加配置即可
sentinel持久化到nacos 不持久每次重啟都會(huì)清除規(guī)則

增加maven依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--sentinel持久化到nacos 不持久每次重啟都會(huì)清除規(guī)則-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.8.0</version>
</dependency>

增加bootstrap.yml配置 nacos自行搭建

server:
  port: 9999
spring:
  application:
    name: test-demo
  profiles:
    active: uat
  cloud:
    nacos:
      config:
        server-addr: 10.10.18.16:8848,10.10.18.16:2848,10.10.18.16:5848
        username: nacos
        password: nacos
        file-extension: yaml
      discovery:
        server-addr: 10.10.18.16:8848,10.10.18.16:2848,10.10.18.16:5848
        username: nacos
        password: nacos
    sentinel:
      transport:
        dashboard: 10.10.22.174:8109
        port: 8719
      datasource:
        ds1:
          nacos:
            server-addr: 10.10.18.16:8848,10.10.18.16:2848,10.10.18.16:5848
            dataId: test-demo-sentinel.json
            data-type: json
            rule-type: flow
            username: nacos
            password: nacos
            
#開啟sentinel
feign:
  sentinel:
    enabled: true
  circuitbreaker:
    enabled: true            

nacos新增限流配置

流量控制
resource:資源名稱
limitApp:來源應(yīng)用
grade:閾值類型,0代表線程數(shù),1代表QPS
count:?jiǎn)螕糸撝?br> strategy:流控模式,0代表直接,1代表關(guān)聯(lián),2代表鏈路
controlBehavior:流控效果,0代表快速失敗,1代表Warm Up,2代表排隊(duì)等待
clusterMode:是否集群

-其他規(guī)則大同小異這里不再累述
-nacos配置與本文無關(guān)不再累述

[
  {
    "resource": "testFeign",
    "limitApp": "default",
    "grade":   1,
    "count":   1,
    "strategy": 0,
    "controlBehavior": 0,
    "clusterMode": false
  }
]

啟動(dòng)類開啟feign與nacos

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@Slf4j
public class TestDemoApplication implements ApplicationRunner {

    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }
}

測(cè)試用例

/**
 * testFeign
 * fallback只負(fù)責(zé)業(yè)務(wù)異常
 * blockHandler只負(fù)責(zé)sentinel配置超標(biāo)
 * 兩個(gè)都配置,如果都出錯(cuò),會(huì)進(jìn)入blockHandler
 * @param str
 * @author senfel
 * @date 2023/7/11 14:26
 * @return java.lang.String
 */
@SentinelResource(value = "testFeign",blockHandler = "blockHandler",fallback = "handlerFallback")
@GetMapping("/testFeign")
public String testFeign(String str){
    if(str.contains("y")){
        throw new RuntimeException();
    }
    return testMQService.testFeign(str);
}

/**
 * 異常阻塞處理
 * @param str
 * @author senfel
 * @date 2023/7/11 14:44
 * @return java.lang.String
 */
private String blockHandler(String str, BlockException blockException){
    return "blockHandler"+"-"+str;
}

/**
 * 降級(jí)處理
 * @param str
 * @author senfel
 * @date 2023/7/11 14:44
 * @return java.lang.String
 */
private String handlerFallback(String str,Throwable throwable){
    return "handlerFallback"+"-"+str;
}

openfeign降級(jí)測(cè)試用例

/**
 * @author senfel
 * @version 1.0
 * @date 2023/7/03 15:04
 */
@Service
@FeignClient(value = "test-demo",fallback = FallbackService.class)
public interface TestService {

    /**
     * 測(cè)試sentinel
     */
    @GetMapping("/feign")
    String feign(@RequestParam String str);


}



/**
 * FallbackService
 * @author senfel
 * @version 1.0
 * @date 2023/7/3 15:26
 */
@Service
public class FallbackService implements TestService {

    @Override
    public String feign(String str) {
        return ">>>>>客戶端服務(wù)降級(jí)>>>>>";
    }
}
sentinel控制臺(tái)

postman請(qǐng)求后查看 http://10.10.22.174:8109/

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

自動(dòng)加載配置的流量規(guī)則

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud
springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

sentinel驗(yàn)證

驗(yàn)證主動(dòng)控制流量
127.0.0.1:9999/testFeign?str=fffffffffss

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

驗(yàn)證異??刂屏髁?br> 127.0.0.1:9999/testFeign?str=fffffffffyy

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

驗(yàn)證客戶端feign降級(jí)
127.0.0.1:9999/testFeign?str=fffffffffss

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

查看實(shí)時(shí)監(jiān)控

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

延伸:系統(tǒng)自適應(yīng)限流

系統(tǒng)規(guī)則

系統(tǒng)保護(hù)規(guī)則是從應(yīng)用級(jí)別的入口流量進(jìn)行控制,從單臺(tái)機(jī)器的 load、CPU 使用率、平均 RT、入口 QPS 和并發(fā)線程數(shù)等幾個(gè)維度監(jiān)控應(yīng)用指標(biāo),讓系統(tǒng)盡可能跑在最大吞吐量的同時(shí)保證系統(tǒng)整體的穩(wěn)定性。
系統(tǒng)保護(hù)規(guī)則是應(yīng)用整體維度的,而不是資源維度的,并且僅對(duì)入口流量生效。入口流量指的是進(jìn)入應(yīng)用的流量(EntryType.IN),比如 Web 服務(wù)或 Dubbo 服務(wù)端接收的請(qǐng)求,都屬于入口流量。
系統(tǒng)規(guī)則支持以下的模式:
Load 自適應(yīng)(僅對(duì) Linux/Unix-like 機(jī)器生效):系統(tǒng)的 load1 作為啟發(fā)指標(biāo),進(jìn)行自適應(yīng)系統(tǒng)保護(hù)。當(dāng)系統(tǒng) load1 超過設(shè)定的啟發(fā)值,且系統(tǒng)當(dāng)前的并發(fā)線程數(shù)超過估算的系統(tǒng)容量時(shí)才會(huì)觸發(fā)系統(tǒng)保護(hù)(BBR 階段)。系統(tǒng)容量由系統(tǒng)的 maxQps * minRt 估算得出。設(shè)定參考值一般是 CPU cores * 2.5。
CPU usage(1.5.0+ 版本):當(dāng)系統(tǒng) CPU 使用率超過閾值即觸發(fā)系統(tǒng)保護(hù)(取值范圍 0.0-1.0),比較靈敏。
平均 RT:當(dāng)單臺(tái)機(jī)器上所有入口流量的平均 RT 達(dá)到閾值即觸發(fā)系統(tǒng)保護(hù),單位是毫秒。
并發(fā)線程數(shù):當(dāng)單臺(tái)機(jī)器上所有入口流量的并發(fā)線程數(shù)達(dá)到閾值即觸發(fā)系統(tǒng)保護(hù)。
入口 QPS:當(dāng)單臺(tái)機(jī)器上所有入口流量的 QPS 達(dá)到閾值即觸發(fā)系統(tǒng)保護(hù)。

原理

我們把系統(tǒng)處理請(qǐng)求的過程想象為一個(gè)水管,到來的請(qǐng)求是往這個(gè)水管灌水,當(dāng)系統(tǒng)處理順暢的時(shí)候,請(qǐng)求不需要排隊(duì),直接從水管中穿過,這個(gè)請(qǐng)求的RT是最短的;反之,當(dāng)請(qǐng)求堆積的時(shí)候,那么處理請(qǐng)求的時(shí)間則會(huì)變?yōu)椋号抨?duì)時(shí)間 + 最短處理時(shí)間。
springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

配置頁面

springboot 限流降級(jí),sentinel,microservice,spring boot,sentinel,后端,java,spring cloud

寫在最后

Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)的實(shí)際使用個(gè)人覺得還是比較簡(jiǎn)單,只需要根據(jù)官方文章集成和配置使用即可。sentinel的流量控制和負(fù)載保護(hù)以及高性能都優(yōu)于hystrix,并提供可視化控制臺(tái)。如果在可用性和可靠性較高和重要的服務(wù)集群場(chǎng)景中,可以優(yōu)先考慮sentinel。

??路漫漫其修遠(yuǎn)兮,吾將上下而求索 ??文章來源地址http://www.zghlxwxcb.cn/news/detail-572251.html

到了這里,關(guān)于實(shí)戰(zhàn):Springboot集成Sentinel實(shí)現(xiàn)流量控制、熔斷降級(jí)、負(fù)載保護(hù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Spring Cloud Alibaba】Sentinel 服務(wù)熔斷與流量控制

    【Spring Cloud Alibaba】Sentinel 服務(wù)熔斷與流量控制

    目錄 前言 一、Sentinel 入門 1.1 什么是 Sentinel ? 1.2 微服務(wù)集成 Sentinel ?1.3 安裝Sentinel控制臺(tái) 二、Jmeter 壓力測(cè)試工具 2.1 Jmeter 介紹? 2.2 Jmeter 安裝 2.3 接口測(cè)試 三、Sentinel 使用 3.1 限流規(guī)則 3.1.1 warm up(預(yù)熱模式) 3.1.2?排隊(duì)等待 3.1.3 關(guān)聯(lián) 3.1.4 鏈路 3.2 熔斷規(guī)則 3.3 服務(wù)降級(jí) ????

    2024年02月01日
    瀏覽(28)
  • 【微服務(wù)筆記21】微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級(jí)、流量控制介紹

    【微服務(wù)筆記21】微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級(jí)、流量控制介紹

    這篇文章,主要介紹微服務(wù)組件之Sentinel服務(wù)熔斷、服務(wù)降級(jí)、流量控制。 目錄 一、Sentinel組件 1.1、Sentinel介紹 1.2、Sentinel環(huán)境搭建 (1)引入依賴 (2)資源和規(guī)則 1.3、使用SphU定義資源 (1)定義資源 (2)定義規(guī)則 1.4、使用SphO定義資源 (1)定義資源 (2)定義規(guī)則 1.5、

    2024年04月17日
    瀏覽(25)
  • 【Spring Cloud】Sentinel流量限流和熔斷降級(jí)的講解

    【Spring Cloud】Sentinel流量限流和熔斷降級(jí)的講解

    ????歡迎來到我的CSDN主頁!???? ??我是Java方文山,一個(gè)在CSDN分享筆記的博主。???? ??推薦給大家我的專欄《Spring Cloud》。???? ??點(diǎn)擊這里,就可以查看我的主頁啦!???? Java方文山的個(gè)人主頁 ??如果感覺還不錯(cuò)的話請(qǐng)給我點(diǎn)贊吧!???? ??期待你的加入,一起

    2024年01月23日
    瀏覽(25)
  • 微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離

    微服務(wù):Springboot集成Hystrix實(shí)現(xiàn)熔斷、降級(jí)、隔離

    在分布式微服務(wù)的項(xiàng)目中,常常會(huì)有多個(gè)服務(wù)復(fù)用,產(chǎn)生多個(gè)服務(wù)調(diào)用的情況。比如A服務(wù)調(diào)用B服務(wù),B服務(wù)調(diào)用C服務(wù)。服務(wù)調(diào)用鏈路長(zhǎng)了必然會(huì)增加服務(wù)超時(shí)的概率,服務(wù)的超時(shí)阻塞會(huì)一直占用線程資源,大量的阻塞會(huì)直接消耗完服務(wù)線程,嚴(yán)重情況下會(huì)導(dǎo)致服務(wù)直接宕機(jī)從

    2024年02月12日
    瀏覽(21)
  • Sentinel如何實(shí)現(xiàn)對(duì)分布式系統(tǒng)的高可用性和流量控制?我們通過源碼一起學(xué)習(xí)

    Sentinel如何實(shí)現(xiàn)對(duì)分布式系統(tǒng)的高可用性和流量控制?我們通過源碼一起學(xué)習(xí)

    前言:大家好,我是小威,24屆畢業(yè)生,在一家滿意的公司實(shí)習(xí)。本篇文章將詳細(xì)介紹Sentinel源碼實(shí)現(xiàn)對(duì)分布式系統(tǒng)高可用性和流量控制,后續(xù)文章將詳細(xì)介紹Sentinel的其他知識(shí)。 如果文章有什么需要改進(jìn)的地方還請(qǐng)大佬不吝賜教 ????。 小威在此先感謝各位大佬啦~~????

    2024年02月06日
    瀏覽(20)
  • Sentinel 流量控制框架

    Sentinel 流量控制框架

    1. Sentinel 是什么? Sentinel是由阿里中間件團(tuán)隊(duì)開源的,面向分布式服務(wù)架構(gòu)的輕量級(jí)高可用流量控制組件。 2. 主要優(yōu)勢(shì)和特性 輕量級(jí),核心庫無多余依賴,性能損耗小。 方便接入,開源生態(tài)廣泛。 豐富的流量控制場(chǎng)景。 易用的控制臺(tái),提供實(shí)時(shí)監(jiān)控、機(jī)器發(fā)現(xiàn)、規(guī)則管理

    2024年02月09日
    瀏覽(20)
  • 【微服務(wù)】Sentinel(流量控制)

    【微服務(wù)】Sentinel(流量控制)

    1.Sentinel是什么 2.Sentinel主要特性 3.Sentinel核心功能 1.流量控制 2.熔斷降級(jí) 3.消息削峰填谷 4.Sentinel兩個(gè)組成部分 1.需求分析 2.下載 3.運(yùn)行 1.進(jìn)入cmd 2.輸入java -jar sentinel-dashboard-1.8.0.jar 3.查看默認(rèn)端口8080 4.訪問 1.賬號(hào)和密碼都是sentinel 2.登錄成功 3.退出就在cmd輸入ctrl + c 5.切換端

    2024年04月14日
    瀏覽(19)
  • sentinel介紹-分布式微服務(wù)流量控制

    sentinel介紹-分布式微服務(wù)流量控制

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

    2024年02月16日
    瀏覽(24)
  • 利用Sentinel解決雪崩問題(一)流量控制

    利用Sentinel解決雪崩問題(一)流量控制

    1、解決雪崩問題的常見方式有四種: 超時(shí)處理:設(shè)定超時(shí)時(shí)間,請(qǐng)求超過一定時(shí)間沒有響應(yīng)就返回錯(cuò)誤信息,不會(huì)無休止等待; 艙壁模式:限定每個(gè)業(yè)務(wù)能使用的線程數(shù),避免耗盡整個(gè)tomcat的資源,因此也叫線程隔離; 熔斷降級(jí):由斷路器統(tǒng)計(jì)業(yè)務(wù)執(zhí)行的異常比例,如果超出閾值則

    2024年04月23日
    瀏覽(20)
  • 如何使用Sentinel做流量控制?此文將附代碼詳細(xì)介紹Sentinel幾種限流模式

    如何使用Sentinel做流量控制?此文將附代碼詳細(xì)介紹Sentinel幾種限流模式

    前言:大家好,我是小威,24屆畢業(yè)生,在一家滿意的公司實(shí)習(xí)。本篇文章將詳細(xì)介紹Sentinel的兩種限流模式,由于篇幅原因,后續(xù)文章將詳細(xì)介紹Sentinel的其他三種。 如果文章有什么需要改進(jìn)的地方還請(qǐng)大佬不吝賜教 ????。 小威在此先感謝各位大佬啦~~???? ??個(gè)人主頁

    2024年02月05日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包