欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Sentinel 斷路器在Spring Cloud使用詳解

 更新時間:2025年02月05日 14:34:32   作者:心之語歌  
Sentinel是阿里巴巴開源的一款微服務(wù)流量控制組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應(yīng)過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務(wù)的穩(wěn)定性,本文介紹Sentinel 斷路器在Spring Cloud使用,感興趣的朋友一起看看吧

Sentinel 介紹

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

同類對比

Hystrix:

  • 熔斷器:當服務(wù)調(diào)用失敗率達到閾值時,自動熔斷,避免雪崩。
  • 降級:提供 fallback 機制,在服務(wù)不可用時返回默認值或執(zhí)行備用邏輯。
  • 隔離:通過線程池或信號量隔離資源,防止單個服務(wù)的故障影響整個系統(tǒng)。
  • 監(jiān)控:提供 Hystrix Dashboard 實時監(jiān)控服務(wù)狀態(tài)。

Sentinel:

  • 流量控制:支持 QPS、線程數(shù)等多種維度的限流。
  • 熔斷降級:基于響應(yīng)時間、異常比例等指標進行熔斷。
  • 熱點參數(shù)限流:針對特定參數(shù)(如用戶 ID)進行精細化限流。
  • 系統(tǒng)自適應(yīng)保護:根據(jù)系統(tǒng)負載(如 CPU 使用率)動態(tài)調(diào)整流量。
  • 實時監(jiān)控:提供 Dashboard 實時查看流量、熔斷等信息。

微服務(wù)雪崩問題

微服務(wù)調(diào)用鏈路中的某個服務(wù)故障,引起整個鏈路中的所有微服務(wù)都不可用,這就是雪崩。

問題原因

微服務(wù)相互調(diào)用,服務(wù)提供者出現(xiàn)故障或阻塞。
服務(wù)調(diào)用者沒有做好異常處理,導(dǎo)致自身故障。
調(diào)用鏈中的所有服務(wù)級聯(lián)失敗,導(dǎo)致整個集群故障

問題解決方案

盡量避免服務(wù)出現(xiàn)故障或阻塞。
保證代碼的健壯性;
保證網(wǎng)絡(luò)暢通;
能應(yīng)對較高的并發(fā)請求;
服務(wù)調(diào)用者做好遠程調(diào)用異常的后備方案,避免故障擴散

請求限流

請求限流:限制訪問微服務(wù)的請求的并發(fā)量,避免服務(wù)因流量激增出現(xiàn)故障。

線程隔離

線程隔離:也叫做艙壁模式,模擬船艙隔板的防水原理。通過限定每個業(yè)務(wù)能使用的線程數(shù)量而將故障業(yè)務(wù)隔離,避免故障擴散。

失敗處理

快速失?。航o業(yè)務(wù)編寫一個調(diào)用失敗時的處理的邏輯,稱為fallback。當調(diào)用出現(xiàn)故障(比如無線程可用)時,按照失敗處理邏輯執(zhí)行業(yè)務(wù)并返回,而不是直接拋出異常。

服務(wù)熔斷

服務(wù)熔斷:由斷路器統(tǒng)計請求的異常比例或慢調(diào)用比例,如果超出閾值則會熔斷該業(yè)務(wù),則攔截該接口的請求。
熔斷期間,所有請求快速失敗,全都走fallback邏輯。

解決雪崩問題的常見方案有哪些?

請求限流:限制流量在服務(wù)可以處理的范圍,避免因突發(fā)流量而故障
線程隔離:控制業(yè)務(wù)可用的線程數(shù)量,將故障隔離在一定范圍
服務(wù)熔斷:將異常比例過高的接口斷開,拒絕所有請求,直接走fallback
失敗處理:定義fallback邏輯,讓業(yè)務(wù)失敗時不再拋出異常,而是返回默認數(shù)據(jù)或友好提示

Sentinel

Sentinel是阿里巴巴開源的一款微服務(wù)流量控制組件。官網(wǎng)地址: https://sentinelguard.io/zh-cn/index.html

docker 安裝

docker search sentinel
docker pull bladex/sentinel-dashboard
# 簡化
docker run --name sentinel -p 8858:8858 -d bladex/sentinel-dashboard:latest
# 開機啟動
docker run --name sentinel --restart=always -p 8858:8858 -p 8719:8719 -d bladex/sentinel-dashboard:latest

賬號/ 密碼

用戶名/密碼:sentinel / sentinel

項目導(dǎo)入

<!--nacos配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--讀取bootstrap文件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--sentinel配置-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • spring.cloud.sentinel.transport.dashboard:
    • 這個配置指定了 Sentinel 控制臺的地址。Sentinel 控制臺用于監(jiān)控和管理流量控制規(guī)則、熔斷降級規(guī)則等。
    • 你配置的地址是 127.0.0.1:8858,表示 Sentinel 控制臺運行在本地的 8858 端口。
  • spring.cloud.sentinel.http-method-specify:
    • 這個配置項設(shè)置為 true,表示開啟請求方式前綴。
    • 當這個選項開啟時,Sentinel 會根據(jù) HTTP 請求方法(如 GET、POST 等)來區(qū)分資源。例如,GET:/api/resource 和 POST:/api/resource 會被視為不同的資源,從而可以針對不同的 HTTP 方法設(shè)置不同的流控規(guī)則。
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8858
      http-method-specify: true # 開啟請求方式前綴

除了上述配置,Sentinel 還支持其他一些常用配置,例如:

  • spring.cloud.sentinel.eager: 是否在應(yīng)用啟動時立即初始化 Sentinel。默認為 false,表示在首次訪問時初始化。
  • spring.cloud.sentinel.filter.enabled: 是否啟用 Sentinel 的 Web 過濾器。默認為 true。
  • spring.cloud.sentinel.metric.file-single-size: 單個監(jiān)控日志文件的大小。默認為 52428800(50MB)。
  • spring.cloud.sentinel.metric.file-total-count: 最多保留的監(jiān)控日志文件數(shù)量。默認為 6
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8858  # Sentinel 控制臺地址
      http-method-specify: true     # 開啟請求方式前綴
      eager: true                   # 應(yīng)用啟動時立即初始化 Sentinel
      filter:
        enabled: true               # 啟用 Sentinel 的 Web 過濾器
      metric:
        file-single-size: 52428800  # 單個監(jiān)控日志文件的大小
        file-total-count: 6         # 最多保留的監(jiān)控日志文件數(shù)量

Feign 集成 Sentinel 的作用

  • 流量控制:限制 Feign 客戶端的調(diào)用頻率,防止下游服務(wù)被壓垮。
  • 熔斷降級:當下游服務(wù)出現(xiàn)異常或響應(yīng)時間過長時,快速失敗并執(zhí)行降級邏輯。
  • 系統(tǒng)保護:通過 Sentinel 的規(guī)則配置,保護系統(tǒng)的穩(wěn)定性。
feign:
  sentinel:
    enabled: true  # 啟用 Feign 的 Sentinel 支持

簇點鏈路

簇點鏈路,就是單機調(diào)用鏈路。是一次請求進入服務(wù)后經(jīng)過的每一個被Sentinel監(jiān)控的資源鏈。默認Sentinel會監(jiān)控SpringMVC的每一個Endpoint(http接口)。限流、熔斷等都是針對簇點鏈路中的資源設(shè)置的。而資源名默認就是接口的請求路徑:

請求限流

線程隔離

當商品服務(wù)出現(xiàn)阻塞或故障時,調(diào)用商品服務(wù)的購物車服務(wù)可能因此而被拖慢,甚至資源耗盡。所以必須限制購物車服務(wù)中查詢商品這個業(yè)務(wù)的可用線程數(shù),實現(xiàn)線程隔離。

Fallback

FeignClient的Fallback有兩種配置方式:
方式一:FallbackClass,無法對遠程調(diào)用的異常做處理
方式二:FallbackFactory,可以對遠程調(diào)用的異常做處理,通常都會選擇這種

主要用于處理 服務(wù)調(diào)用失敗 的情況,比如服務(wù)掉線、超時、異常等。它的核心作用是為 Feign 客戶端提供 容錯機制,確保在服務(wù)不可用時,系統(tǒng)仍然能夠正常運行或提供有意義的反饋。

服務(wù)掉線時的處理流程

假設(shè) item-service 服務(wù)掉線,以下是 Feign 客戶端的處理流程:
Feign 客戶端嘗試調(diào)用遠程服務(wù):
調(diào)用 queryItemByIds 或 deductStock 方法。
由于服務(wù)掉線,F(xiàn)eign 會拋出異常(如 FeignException)。
FallbackFactory 捕獲異常:
異常會被 ItemClientFallbackFactory 捕獲。
create 方法中的 Throwable cause 參數(shù)會包含具體的異常信息。
執(zhí)行降級邏輯:
對于 queryItemByIds,返回一個空列表。
對于 deductStock,記錄日志并拋出 RuntimeException。
調(diào)用方處理降級結(jié)果:
如果調(diào)用方是查詢商品列表,可以繼續(xù)使用空列表作為返回值。
如果調(diào)用方是扣減庫存,需要捕獲 RuntimeException 并決定是否重試或回滾事務(wù)。

@Slf4j
public class ItemClientFallbackFactory implements FallbackFactory<ItemClient> {
    @Override
    public ItemClient create(Throwable cause) {
        return new ItemClient() {
            @Override
            public List<ItemDTO> queryItemByIds(Collection<Long> ids) {
                log.error("查詢商品失敗!", cause);
                return CollUtils.emptyList();
            }
            @Override
            public void deductStock(List<OrderDetailDTO> items) {
                log.error("扣減商品庫存失敗!", cause);
                throw new RuntimeException(cause);
            }
        };
    }
}

注入配置類

public class FallbackConfig {
    @Bean
    public ItemClientFallbackFactory itemClientFallbackFactory(){
        return new ItemClientFallbackFactory();
    }
}

@FeignClient 注解:
value = “item-service” 指定了這個 Feign 客戶端將要請求的服務(wù)名稱。
fallbackFactory = ItemClientFallbackFactory.class 提供了容錯機制,當 item-service 不可用時,會使用 ItemClientFallbackFactory 生成的降級邏輯。

@FeignClient(value = "item-service", fallbackFactory = ItemClientFallbackFactory.class)
public interface ItemClient {
    @GetMapping("/items")
    List<ItemDTO> queryItemByIds(@RequestParam Collection<Long> ids);
    @PutMapping("/items/stock/deduct")
    public void deductStock(@RequestParam List<OrderDetailDTO> items);
}

服務(wù)熔斷

熔斷是解決雪崩問題的重要手段。思路是由斷路器統(tǒng)計服務(wù)調(diào)用的異常比例、慢請求比例,如果超出閾值則會熔斷該服務(wù)。即攔截訪問該服務(wù)的一切請求;而當服務(wù)恢復(fù)時,斷路器會放行訪問該服務(wù)的請求。
 

到此這篇關(guān)于Sentinel 斷路器在Spring Cloud使用詳解的文章就介紹到這了,更多相關(guān)Spring Cloud使用Sentinel 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ChatGPT介紹及Java?API調(diào)用

    ChatGPT介紹及Java?API調(diào)用

    本文主要介紹了ChatGPT介紹及Java?API調(diào)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-03-03
  • java實戰(zhàn)之桌球小游戲

    java實戰(zhàn)之桌球小游戲

    這篇文章主要為大家詳細介紹了java實戰(zhàn)之桌球小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • IntelliJ IDEA修改編碼的方法步驟

    IntelliJ IDEA修改編碼的方法步驟

    這篇文章主要介紹了IntelliJ IDEA修改編碼的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-08-08
  • Java中FilterInputStream和FilterOutputStream的用法詳解

    Java中FilterInputStream和FilterOutputStream的用法詳解

    這篇文章主要介紹了Java中FilterInputStream和FilterOutputStream的用法詳解,這兩個類分別用于封裝輸入和輸出流,需要的朋友可以參考下
    2016-06-06
  • Java之定時器Timer和定時任務(wù)TimerTask應(yīng)用以及原理解讀

    Java之定時器Timer和定時任務(wù)TimerTask應(yīng)用以及原理解讀

    文章介紹了Java JDK自帶的定時器Timer和定時任務(wù)TimerTask的使用和原理,Timer和TimerTask成對出現(xiàn),Timer是定時器,TimerTask是定時任務(wù),TimerTask實現(xiàn)Runnable接口的run方法,Timer的屬性TimerThreadthread繼承Thread
    2024-12-12
  • Java實現(xiàn)SSH模式加密

    Java實現(xiàn)SSH模式加密

    這篇文章主要介紹了Java實現(xiàn)SSH模式加密的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Java匿名內(nèi)部類和Lambda(->) 的多種寫法總結(jié)

    Java匿名內(nèi)部類和Lambda(->) 的多種寫法總結(jié)

    這篇文章主要和大家分享一下Java匿名內(nèi)部類和Lambda(->) 的多種寫法,文中的示例代碼講解詳細,對我們學(xué)習Java有一定幫助,需要的可以先看一下
    2022-07-07
  • Java數(shù)組看這篇就夠了

    Java數(shù)組看這篇就夠了

    這篇文章主要介紹了Java數(shù)組的詳細解釋,是Java入門學(xué)習中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 詳解Spring MVC 集成EHCache緩存

    詳解Spring MVC 集成EHCache緩存

    本篇文章主要介紹了詳解Spring MVC 集成EHCache緩存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring依賴注入的兩種方式(根據(jù)實例詳解)

    Spring依賴注入的兩種方式(根據(jù)實例詳解)

    這篇文章主要介紹了Spring依賴注入的兩種方式(根據(jù)實例詳解),非常具有實用價值,需要的朋友可以參考下
    2017-05-05

最新評論