Sentinel實戰(三)、流控規則之流控效果及流控小結

spring cloud Alibaba-Sentinel實戰(三)、流控效果+流控小結

  • 一、流控規則:流控效果
    • 一)、流控效果:預熱
      • 1、概念含義
      • 2、案例
        • 流控規則設置
        • 測試結果
    • 二)、流控效果:排隊等待
      • 1、概念含義
      • 2、案例
        • 流控規則設置
        • 測試及結果
  • 二、流控規則實際使用總結
    • 一)、閾值類型、流控模式、流控效果組合及適用場景
      • 1、閾值為QPS 、流控模式為直接、快速失敗[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
      • 2、閾值為QPS 、流控模式為關聯、快速失敗[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
      • 3、閾值為QPS 、流控模式為鏈路、快速失敗[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
      • 4、閾值為QPS 、流控模式為直接、Warm Up[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
      • 5、閾值為QPS 、流控模式為直接、排隊[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
      • 6、閾值為線程數 、流控模式為直接、快速失敗[的流控效果]
        • 1)規則適用的業務特點
        • 2)適用場景
        • 3)配置時要注意的事項
    • 二)、配置注意事項總結
      • 1、閾值評估
      • 2、規則要動態調整
      • 3、監控與報警
      • 4、規則持久化
      • 5、測試及驗證
    • 小結:

一、流控規則:流控效果

流控效果有當前支持三種:直接失敗、預熱(warm up)、排隊等待。
直接失敗沒什么可說的,下面主要圍繞預熱和排隊等待展開。

一)、流控效果:預熱

主要針對開啟活動之前,系統流量是比較低的,比如秒殺活動即將開始后,系統訪問量突增,可能把系統壓垮,增加預熱流控規則,是個比較好的方案。

1、概念含義

預熱就是下圖流控效果里,Warm Up ;即 預熱/冷啟動方式;這種方式用于系統長期處于低流量的情況,當流量突然激增,由于流量的突然激增可能瞬間會把系統壓垮。通過這種“冷啟動”的方式,讓通過的流量緩慢增加,在一定時間內逐漸增加到閾值上限,給系統一個緩沖的時間,通過這種冷啟動的方式避免系統被壓垮。
預熱公式為 單機閾值/coldFactor(預熱因子,默認為3),經過預熱時間后,才會達到閾值。
在這里插入圖片描述
設置參數后的具體含義通過案例闡述。

2、案例

這種預熱流控的設置,通常的場景類如 秒殺,主要是為了防止瞬間激增的流量打垮系統。關于設置秒殺的代碼及配置如下:

端口9101服務,秒殺接口代碼段:

   /*** 秒殺活動,設置預熱的流控規則*/@GetMapping("/secKill")public String secKill() throws InterruptedException {log.info("---secKill---流控模式為 預熱");Thread.sleep(200);return "ok";}

yaml文件配置內容如下:

server:port: 9101
spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: 192.168.0.101:80sentinel:transport:dashboard: localhost:8080   port: 8720   web-context-unify: falsemanagement:endpoint:web:exposure:include:'*'
service-url:nacos-user-service: http://nacos-provider

主啟動類添加服務發現注解:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumer9101Application {public static void main(String[] args) {SpringApplication.run(NacosConsumer9101Application.class, args);}}

啟動服務訪問,初始化sentinel的簇點鏈路,訪問鏈接:http://localhost:9101/secKill

在資源 /secKill添加流控規則。

流控規則設置

該流控規則設置含義:當單機 QPS達到10,預熱時長是5秒。
在這 5s內流量有個流量突增的過程,預熱因子默認是3,根據預熱公式,當QPS超過單機閾值的三分之一,即超過3時,就開始限流,隨著5s的推移,第一秒可能是3,第二秒是4,第5s是10。這個預熱的流控效果,其實指的就是系統處理流量突增的過程。

在這里插入圖片描述

測試結果

流控規則設置完之后,并發線程數設置為10,持續2min,開始進行壓測【工具jmeter】:
在這里插入圖片描述
觀察資源流量的實時監控情況,可看出QPS超過10 之后,拒絕QPS那列有了數值,說明被限流了。再看下壓測接口響應失敗jmeter的顯示內容,提示被限流了:
在這里插入圖片描述

二)、流控效果:排隊等待

1、概念含義

勻速排隊的方式,可以嚴格控制請求通過的時間間隔,就是讓請求勻速通過,對應算法為漏桶算法。
這種方式主要用來處理間隔性突發流量,類似消息隊列,在某一秒大量請求襲來,而后處于空閑狀態,可以讓空閑時間處理先前這大批量的請求,而不是第一時間拒絕多余的請求。
類似一個勻速器,在固定時間間隔讓請求通過:

  • 若當前請求距離上個通過的請求通過的時間間隔大于預設值,則請求通過。
  • 否則,若當前請求的預期時間<規則預設的超時時間,那當前請求就要等待直到大于預設值則請求通過。
  • 若預期的通過時間超過最大排隊時長,則直接拒絕這個請求。

Sentinel的勻速排隊等待流控效果,是基于漏桶算法結合虛擬隊列等待機制實現的。
注意??:勻速排隊模式暫時不支持QPS超過1000的場景。

2、案例

比如這個例子:QPS單機閾值超過5,則進行排隊等待,在15s內 ,1s處理5個,超過15s 還沒處理完的其他請求,則視為超時。

流控規則設置

在這里插入圖片描述

測試及結果

壓測并發量10,持續2min,訪問鏈接:http://localhost:9101/waiting
觀察Sentinel流量監控平臺的變化以及指標統計情況:

前半段超時時間設置的15s ,可以看到沒有被限流的請求。
后半段藍色折線圖,流控規則排隊等待的超時時間調整為1s,觀察圖表可以看到超過1s的請求視為超時,還沒處理的請求都被限流了:
在這里插入圖片描述

查看響應失敗的接口響應信息展示:
在這里插入圖片描述

二、流控規則實際使用總結

關于流控規則,主要圍繞 :閾值類型,流控模式,流控效果這三個維度,做的測試以及釋義,當然最主要還是實際應用場景,下面是具體闡述這三個維度組合起來,分別適合哪些特點的場景,以及實際對應的業務場景案例, 還有配置時注意事項。

一)、閾值類型、流控模式、流控效果組合及適用場景

其實在上一篇和本文都已陸續說過,但比較零散,還是需要單獨梳理一下,算是鞏固加強印象了,希望能對讀者在工作中有幫助;組合使用大致梳理出6個點。

1、閾值為QPS 、流控模式為直接、快速失敗[的流控效果]

1)規則適用的業務特點

直接限制單個資源每秒請求量,超出的請求會被立即拒絕。這種規則可快速響應流量突發狀況,能有效保護資源不被過度請求。

2)適用場景
  • 驗證碼發送,防止惡意刷驗證碼的行為,可設置QPS閾值,同樣超出閾值則直接拒絕。
3)配置時要注意的事項

具體設置的值要參考日常流量以及歷史高峰流量倍數作壓測指標,進行摸底壓測,大促期間可以此摸底性能為閾值上限,進行設置,注意??,絕不能高于摸底上限,否則無法起到保護作用,也不能太低,否則會影響正常業務。

2、閾值為QPS 、流控模式為關聯、快速失敗[的流控效果]

1)規則適用的業務特點

根據關聯資源的QPS閾值,來控制當前資源的訪問。當關聯資源達到閾值,則對當前資源進行限流,通過關聯關系間接保護關聯資源不被壓垮。

2)適用場景
  • 創單和支付,創單之后,會調用支付接口,可以創建流控規則,關聯資源為支付,設置關聯資源閾值,當支付達到該閾值,則對創單接口進行限流。
  • 訂單系統中,創單和扣減庫存也是一樣的道理,避免賣超的方案之一,可以將扣減庫存設為關聯資源,當其QPS過高,超過閾值,依然要對創單接口進行限流。
  • 支付系統中,支付接口和用戶的資金賬戶 同理,可將用戶的資金賬戶設為關聯資源,當QPS過高,超過其實際承載流量的閾值,這時支付的性能會受到影響,此時可對支付接口進行流控。
3)配置時要注意的事項

要準確識別到關聯資源,確保關聯的合理性,另外還要注意的點是,關聯資源的閾值設置要考慮兩個資源之間的業務邏輯關系。

一般作為關聯資源的,可以是公共服務等設置為關聯資源 或者 特點是業務鏈路的后置服務,如果該資源實際性能較差且不在核心鏈路上,可以設置為關聯資源,以此來保護該資源不被壓垮。
如果該資源在核心鏈路上,除了讓其成為關聯資源,還要進行優化,優化性能指標至少要跟核心鏈路起始資源性能對齊,如果內部涉及到第三方接口調用,無法提升性能,則要考慮技術方案的調整,比如看哪些業務數據可以前置操作,串行調用調整為并發編程,同步改為異步方式實現。具體還是要結合實際業務作技術方案調整的決策。
而且,被設置為關聯的資源,通常是該資源容易遇到性能瓶頸,就是性能不足與當前系統流量高峰或歷史高峰時的需求相匹配,所以要設置為關聯資源以此來保護其功能保持在正常水平。

3、閾值為QPS 、流控模式為鏈路、快速失敗[的流控效果]

1)規則適用的業務特點

只對指定鏈路的資源請求進行QPS限制,即當鏈路入口資源達到閾值,則對其進行限流。能精確控制特定調用鏈路流量,有效避免因該鏈路流量過大影響系統性能。

2)適用場景
  • 微服務架構中,某個服務可能涉及多個調用鏈路,若其中一條調用鏈路過大,可對該鏈路進行流控。場景比如 商品詳情服務調用 加車服務,再調用結算服務這條調用鏈路,可以設置鏈路QPS閾值,超過則拒絕請求。
  • 某個接口有不同的調用來源,可對該特定來源的調用鏈路進行流控,比如結算創單資源接口,可以是普通商品調用鏈路的一個節點,也可以是促銷如秒殺調用鏈路的一個節點,為了保護系統資源能正常服務,可以對秒殺等其他大流量的調用鏈路做鏈路流控配置。
3)配置時要注意的事項

明確要配置的鏈路規則,指定受流控的鏈路。同時,考慮鏈路閾值的動態變化,做出及時調控。

4、閾值為QPS 、流控模式為直接、Warm Up[的流控效果]

1)規則適用的業務特點

系統啟動初期QPS較低,隨時間推移,閾值逐漸增加到日常流量最大值,流控效果為預熱模式,啟動階段可讓系統有個流量適應過程。

2)適用場景

新上線服務,系統初始化階段性能不穩定,可通過設置預熱流控效果,能有效避免大量流量短時間涌入系統造成崩潰;比如服務版本升級重啟,防止大量請求在瞬間擊垮系統,可設置流控效果為預熱模式。

促銷活動,在活動開始之前,就會有一個流量持續增加的過程,比如秒殺前,系統流量會在段時間內迅速增加,所以要設置預熱,即提前限流,會超過系統負載導致崩潰無法正常工作,對此場景,可設置QPS閾值,超出直接拒絕。

3)配置時要注意的事項

要合理設置預熱時間和初始閾值,預熱時間過短無法起到預熱效果,過長則影響系統響應速度。

5、閾值為QPS 、流控模式為直接、排隊[的流控效果]

1)規則適用的業務特點

請求超過QPS閾值,會進入排隊等待, 從隊列中勻速取出請求進行處理,可保證請求有序處理。此流控效果,適合非核心業務,比如某些營銷類(不是全部哈,根據當前階段業務重要程度,杠精請口下留情哈),對實時性要求不高,甚至可以滯后或降級處理的業務。

2)適用場景
  • 文件上傳接口,對該操作的響應時間要求相對較低,可接受一定時間內的等待。當上傳請求過多時,超出閾值的請求進入隊列進行排隊等待,然后按順序勻速處理(類比mq的削峰填谷)。
  • 處理批量任務的時候,比如批量導入商品數據,可采用排隊等待的流控效果,保證數據處理的有序性。
3)配置時要注意的事項

設置合理隊列長度和超時時間,隊列長度過長占用系統大量資源,超時時間設置過長會導致用戶等待時間過長。
其實根源還是在接口本身的性能上要有所提升,如果時間允許,還是需要提升這種批量操作的性能,從而提升用戶體驗。

6、閾值為線程數 、流控模式為直接、快速失敗[的流控效果]

1)規則適用的業務特點

設置當前資源線程數量的閾值,當線程數達到閾值則后續線程會被直接拒絕,防止系統因線程過多導致資源耗盡。

2)適用場景

比如一些計算密集型的服務,像大數據分析任務處理接口,一定程度上要限制線程數來避免cpu出現資源過度占用的情況。
還有就是數據庫的連接數,我們通常在配置連庫信息時會設置,但是粒度不夠細,可以通過限制請求庫連接的線程數,來規避過多線程競爭數據庫連接的情況,比如查庫接口。

3)配置時要注意的事項

根據系統硬件資源和業務需求合理進行設置線程數閾值,避免過低影響系統正常并發處理能力,閾值過高那么流控規則就形同虛設了。

二)、配置注意事項總結

1、閾值評估

結合系統硬件資源(如cpu ,磁盤,內存,網絡等)、資源重要度(業務的核心程度級別)以及歷史流量峰值【大促期間和日常流量】,準確預估閾值,作為摸底性能測試基礎數據,在此基礎上,中小廠2到3倍,大廠10-20倍,留足余量,以此標準作壓力測試期望指標,以系統實際性能指標,作為閾值依據。

若接口性能不達標:
對于核心流程資源接口,則要進行優化,不能一味去做限流處理。
對于非核心資源接口,則要根據當前項目周期緊急程度,評估是否作限流或降級處理。

2、規則要動態調整

隨著時間的推移,業務在不停的迭代,用戶體量以及系統的流量也會因此發生變化,以往的規則不足以恒久滿足對系統性能的要求,所以要基于當前對系統性能的要求,對規則作動態調整。

3、監控與報警

結合Sentinel控制臺或其他監控工具(如阿里云的arms監控),實時監控系統流量以及性能,cpu,磁盤,內存,網絡等指標,合理設置報警的閾值,當流量接近或超過閾值時,及時通知相關人員。

4、規則持久化

使用Nacos、Zookeeper等配置中心存儲流控規則,確保規則在服務重啟后不會丟失,且可實現動態調整。

這個會在本欄目Sentinel文章的最后通過案例形式落地

5、測試及驗證

在正式環境使用新的流控規則前,要在測試環境充分測試,驗證規則的有效性以及合理性,避免影響正式環境
的業務。

看到這的小伙伴,你真的很棒!但是要堅持奧。

小結:

在保障核心業務穩定性的同時,最大化利用系統資源,滿足不同業務場景的需求。實際應用中需結合壓測數據、監控指標和業務特性動態調整規則。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75582.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ (通用引用)和(左值引用)區別

問&#xff1a; for (auto &&ipKF : vpKFs) {} 使用 一個& 和 兩個&& 區別和聯系&#xff1f; c 在 C 中&#xff0c;auto&& 和 auto& 在范圍基于的 for 循環中有重要的區別&#xff0c;涉及到引用類型和值類別的處理。讓我們詳細解釋它們的區…

使用高德api實現天氣查詢

創建應用獲取 Key 天氣查詢-基礎 API 文檔-開發指南-Web服務 API | 高德地圖API 代碼編寫 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

XEOS 與 AutoMQ 推出聯合方案,共筑云原生 Kafka 新生態

近日&#xff0c;XSKY 星辰天合旗下企業級對象存儲產品 XEOS 與 AutoMQ 云原生消息隊列系統完成了產品兼容性適配互認證&#xff0c;致力于為客戶在私有云和混合云環境中提供云原生的 Kafka 解決方案。 在云計算和大數據時代&#xff0c;消息隊列作為分布式系統的重要組成部分…

Synology NAS 部署WPS-Office

記錄在群暉NAS上部署WPS-Office實現網頁上編輯文檔 目錄 1.思考及想法由來2.問題解決2.1 群暉NAS Docker使用2.2 部署wps-office參考1:【Docker+WPS Office】遠程辦公:Docker + WPS Office 私人云辦公室2.3 群暉NAS映射文件夾權限參考1:參考2:群暉NAS中普通用戶獲取Docker容…

Vue自定義指令最佳實踐教程

Vue 3 顯著增強了自定義指令的功能&#xff0c;使其封裝更加靈活和易用。本文將分為基礎和進階兩部分&#xff0c;介紹如何實現常用的自定義指令&#xff0c;并提供最佳的項目組織方式。 前言 本文以復制文本的自定義指令詳細介紹自定義指令的基礎知識 多個自定義指令如何進行…

用DrissionPage升級維基百科爬蟲:更簡潔高效的數據抓取方案

一、原方案痛點分析 原代碼使用urllibBeautifulSoup組合存在以下問題&#xff1a; 動態內容缺失&#xff1a;無法獲取JavaScript渲染后的頁面內容 反爬能力弱&#xff1a;基礎請求頭易被識別為爬蟲 代碼冗余&#xff1a;需要單獨處理SSL證書驗證 擴展性差&#xff1a;難以應…

23種設計模式-結構型模式-代理

文章目錄 簡介問題解決方案代碼核心設計要點 總結 簡介 代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在把請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f…

基于Transformer框架實現微調后Qwen/DeepSeek模型的非流式批量推理

在基于LLamaFactory微調完具備思維鏈的DeepSeek模型之后(詳見《深入探究LLamaFactory推理DeepSeek蒸餾模型時無法展示<think>思考過程的問題》),接下來就需要針對微調好的模型或者是原始模型(注意需要有一個本地的模型文件,全量微調就是saves下面的文件夾,如果是LoRA,…

基于OpenCV的指紋驗證:從原理到實戰的深度解析

指紋識別的技術革命與OpenCV的輕量級方案 在生物特征識別領域&#xff0c;指紋識別始終以獨特性和穩定性占據核心地位。隨著OpenCV等開源視覺庫的普及&#xff0c;這項看似"高大上"的技術正逐步走向民用化開發。本文將突破傳統算法框架&#xff0c;提出一套基于OpenC…

十五屆藍橋杯省賽Java B組(持續更新..)

目錄 十五屆藍橋杯省賽Java B組第一題&#xff1a;報數第二題&#xff1a;類斐波那契數第三題&#xff1a;分布式隊列第四題&#xff1a;食堂第五題&#xff1a;最優分組第六題&#xff1a;星際旅行第七題&#xff1a;LITS游戲第八題&#xff1a;拼十字 十五屆藍橋杯省賽Java B…

多模態學習(八):2022 TPAMI——U2Fusion: A Unified Unsupervised Image Fusion Network

論文鏈接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9151265 目錄 一.摘要 1.1 摘要翻譯 1.2 摘要解析 二.Introduction 2.1 Introduciton翻譯 2.2 Introduction 解析 三. related work 3.1 related work翻譯 3.2 relate work解析 四…

電腦屏幕亮度隨心控,在Windows上自由調整屏幕亮度的方法

調整電腦屏幕的亮度對于保護視力和適應不同環境光線條件非常重要。無論是在白天強光下還是夜晚昏暗環境中&#xff0c;合適的屏幕亮度都能讓您的眼睛更加舒適。本文中簡鹿辦公小編將向您介紹幾種在 Windows 系統中調整屏幕亮度的方法。 方法一&#xff1a;使用快捷鍵 大多數筆…

AF3 OpenFoldDataset類looped_samples方法解讀

AlphaFold3 data_modules 模塊的 OpenFoldDataset 類的 looped_samples 方法用于 循環采樣數據,確保數據能被不斷地提供,適用于 PyTorch 的 DataLoader 在訓練過程中迭代讀取數據。dataset_idx 指定了當前要處理的數據集(即 self.datasets[dataset_idx]) 源代碼: def loo…

lua表table和JSON字符串互轉

--print("local ssxc{\n"..string.gsub(str,":","").."\n}") Utils {} ---------------------------------------------------------------------------------- -- Lua-Table 與 string 轉換 local function value2string(value, isA…

請談談分治算法,如何應用分治算法解決大規模問題?

分治算法實戰解析與前端應用指南 分治算法本質剖析 分治算法的核心在于"分而治之"&#xff0c;其工作流程可分解為三個關鍵階段&#xff1a; 分解階段&#xff08;Divide&#xff09;&#xff1a;將復雜問題拆分為若干個相互獨立的子問題攻克階段&#xff08;Conqu…

基于BusyBox構建ISO鏡像

1. 準備 CentOS 7.9 3.10.0-957.el7.x86_64VMware Workstation 建議&#xff1a;系統內核<3.10.0 使用busybox < 1.33.2版本 2. 安裝busybox # 安裝依賴 yum install syslinux xorriso kernel-devel kernel-headers glibc-static ncurses-devel -y# 下載 wget https://…

Node.js 與 MySQL:深入理解與高效實踐

Node.js 與 MySQL:深入理解與高效實踐 引言 隨著互聯網技術的飛速發展,Node.js 作為一種高性能的服務端JavaScript運行環境,因其輕量級、單線程和事件驅動等特點,受到了廣大開發者的青睞。MySQL 作為一款開源的關系型數據庫管理系統,以其穩定性和可靠性著稱。本文將深入…

Android學習總結之handler源碼級

一、核心類關系與線程綁定&#xff08;ThreadLocal 的核心作用&#xff09; 1. Looper 與 ThreadLocal 的綁定 每個線程的 Looper 實例通過 ThreadLocal<Looper> sThreadLocal 存儲&#xff0c;確保線程隔離&#xff1a; public final class Looper {// 線程本地存儲&…

群體智能優化算法-算術優化算法(Arithmetic Optimization Algorithm, AOA,含Matlab源代碼)

摘要 算術優化算法&#xff08;Arithmetic Optimization Algorithm, AOA&#xff09;是一種新穎的群體智能優化算法&#xff0c;靈感來源于加、減、乘、除四種基本算術運算。在優化過程中&#xff0c;AOA 通過乘除操作實現全局探索&#xff0c;通過加減操作強化局部開發&#…

廣告推薦算法:COSMO算法與A9算法的對比

COSMO算法與A9算法的概念解析 1. A9算法 定義與背景&#xff1a; A9算法是亞馬遜早期為電商平臺研發的核心搜索算法&#xff0c;主要用于優化商品搜索結果的排序和推薦&#xff0c;其核心邏輯圍繞產品屬性與關鍵詞匹配展開。自2003年推出以來&#xff0c;A9通過分析商品標題…