亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud中如何使用Sentinel實現限流

發布時間:2022-01-19 14:45:44 來源:億速云 閱讀:186 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringCloud中如何使用Sentinel實現限流的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringCloud中如何使用Sentinel實現限流文章都會有所收獲,下面我們一起來看看吧。

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

Sentinel可以作為Hystrix的替代品,為系統提供服務熔斷和服務降級的功能。

  • 服務熔斷:根據保險絲的熔斷是一個原理,當調用目標服務大量超時和失敗,這時候應該熔斷掉該服務的調用,從而快速釋放資源,這段時間所有對其調用都是快速返回,保證整體服務系統的穩定

  • 服務降級:針對核心業務服務的壓力劇增,根據當前業務場景和流量對其他非核心服務進行降級處理,可以進行限流,快速返回等處理,釋放資源保證核心任務的正常運行。

SpringCloud中如何使用Sentinel實現限流

Sentinel的限流原理

  • SentinelBucket(桶)為單位記錄一個時間窗口內的請求總數、異常總數、總耗時等指標數據。

  • 而一個Bucket可以是記錄一秒內的數據,也可以是10毫秒內的數據,我們稱這個時間窗口為Bucket的統計單位,由使用者自定義。

所以Sentinel是基于滑動窗口算法來實現的。

設置Sentinel的閾值指標:

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

  • 線程池隔離:為應對太多線程占用的情況,業內有使用隔離的方案,比如通過不同業務邏輯使用不同線程池來隔離業務自身之間的資源爭搶,這種隔離方案雖然隔離性比較好,但是代價就是線程數目太多,線程上下文切換的 overhead 比較大,特別是對低延時的調用有比較大的影響。

  • 信號隔離sentinel采用的是信號隔離的方案,簡單統計當前請求上下文的線程數目(正在執行的調用數目),如果超出閾值,新的請求會被立即拒絕。

所以業務處理是多線程的情況下使用線程數模式。

Sentinel采用信號隔離的方式,通過并發線程數模式,并結合基于響應時間的熔斷降級模式,可以在不穩定的平均相應時間比較高的時候自動降級,防止過多的慢調用占滿并發數,影響整個系統,避免慢調用引起依賴雪崩的現象。

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

  • 直接拒絕 :直接失敗

  • Warm Up: 即請求 QPSthreshold / 3 開始,經預熱時長逐漸升至設定的 QPS 閾值,通常用于秒殺系統。

  • 勻速排隊:設置一個等待時間, 勻速處理請求,保證服務的均勻性,不能處理QPS>1000的場景。

Sentinel 兩種計算閾值的模式:

  • 集群總體模式:即限制整個集群內的某個資源的總體 qps 不超過此閾值。

  • 單機均攤模式:單機均攤模式下配置的閾值等同于單機能夠承受的限額,token server 會根據連接數來計算總的閾值(比如獨立模式下有 3個 client 連接到了 token server,然后配的單機均攤閾值為 10,則計算出的集群總量就為30),按照計算出的總的閾值來進行限制。這種方式根據當前的連接數實時計算總的閾值,對于機器經常進行變更的環境非常適合。

這里要說明的是:qps是每秒查詢數, tps是每秒內的事務數, pv 是指頁面被瀏覽的次數。

Sentinel流控模式

  • 直接模式: 接口達到限流條件時,開啟限流

  • 關聯模式: 當關聯的資源達到限流條件時,開啟限流

  • 鏈路模式:當從某個接口過來的資源達到限流條件時,開啟限流

Sentinel限流的方式

  • Sentinel控制臺中根據url進行限流設置

  • 通過注解的方式進行自定義限流,又可以分為:自定義url限流和自定義資源限流。

第一步:部署sentinel-dashboard

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

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

SpringCloud中如何使用Sentinel實現限流

第二步:在項目中整合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中的相關配置

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";
    }

}

SpringCloud中如何使用Sentinel實現限流

設置限流,快速訪問,從而觸發服務降級

設置Sentinel的資源

SpringCloud中如何使用Sentinel實現限流

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

SpringCloud中如何使用Sentinel實現限流

關于“SpringCloud中如何使用Sentinel實現限流”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringCloud中如何使用Sentinel實現限流”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平昌县| 济宁市| 大竹县| 永修县| 理塘县| 永平县| 恩平市| 随州市| 石首市| 屏东县| 镇巴县| 兴国县| 麻阳| 安庆市| 吐鲁番市| 庆云县| 剑阁县| 安新县| 句容市| 丽江市| 彰化县| 原平市| 淄博市| 那坡县| 增城市| 崇州市| 宜都市| 公安县| 衡东县| 浦北县| 福建省| 长泰县| 清徐县| 墨江| 龙里县| 天峻县| 铜梁县| 上犹县| 连山| 安阳县| 涞水县|