SpringCloud Alibaba微服務-- Sentinel的使用(筆記)

雪崩問題:

小問題引發大問題,小服務出現故障,處理不當,可能導致整個微服務宕機。
假如商品服務出故障,購物車調用該服務,則可能出現處理時間過長,如果一秒幾十個請求,那么處理時間過長,那么卡的人越來越多,那么就會導致資源耗盡。原本服務B可以使用,此時此刻也宕機了,然后其他服務去調用服務B那么也會出現該情況,然后出現連鎖反應。因為資源耗盡導致宕機等可能

最后導致:出現級聯反應,小問題不解決,越滾越大,原本就一個小問題,某一微服務提供者出現故障,負責調用它的人等待時間多長,就是滾雪球,沒有進行異常處理

解決方案:

一、不管請求多少,服務承受的都是固定的,從狂暴的到柔和的,限制到每秒中只有幾個,避免崩掉

但是也無法保證百分百沒有問題(避免卡死,等待導致雪崩)引入線程隔離。
我們去限定每個業務線程的數量,那么當有請求,就必須去線程池去取 然后去調用服務B,
業務二:那么即使四個線程去取的時候全故障了,那么也不會耗盡服務A的資源,關進黑屋里面,起到故障隔離,服務B影響不到

那么也不能百分百解決問題:假如一直來請求,那么雖然說已經隔離了四個,那么也一直不斷有新的請求資源,雖然不會導致服務A宕機,但是也會消耗CPU資源等。

所以應該拒絕它訪問,這個叫服務壟斷,攔截請求,就像是電路的保險開關。“斷路器”自動斷開,防止進一步請求
例如:假如訪問時間過長,那么發現請求的異常比例 比如五次四次掛的或者慢調用太高,那么直接熔斷該業務
fallback:提前寫好邏輯,后備處理方案,對于服務C的一個補充。

當有再次新的請求那么直接拒絕走fallback,少了等待卡死

不僅上面故障隔離,避免了服務A被拖死。還在這個熔斷策略,避免無效資源浪費,提高了前端的響應速度

sentinel配置:導入相關依賴和配置,與控制臺相連接,方便管理

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

以上多調用幾次該微服務就可以顯示,例如調用購物車列表


簇點鏈路:意思就是那些Controller接口(監控http接口)

這里把carts作為簇點名稱,以這個為唯一標識,但是我們發現我們這個都是restful風格的,路徑都是相同,但是請求方式不同

如何解決呢 加上這行

訪問該微服務的各個接口,每個接口都分別地去做監控

詳細分析:過程使用Jmeter

請求限流:

1.以購物車為例,QPS: 每秒鐘請求的數量單機閾值:每秒鐘多少個

Jmeter:在TestPlan->線程(用戶)->然后線程組(模擬多個用戶)
用戶100個,發起請求總共耗時多久,多久把請求發完 100%10=10,就是每秒鐘10個
每個用戶發起一個請求

然后添加HTTP請求

那么啟動之后

我們可以查看報告十個里面有4個就是說被拒絕了,并且異常為百分之40
報告如下:(如果訪問的是429的狀態碼),比如秒殺,有可能你被限流了


成功的案例:

線程隔離:

1.舉例:查詢購物車列表。模擬商品服務需要加載兩秒到三秒然后才能返回給服務A,
把服務A的各個業務各自分配相應的線程數

2.找到查詢購物車的業務,?這個也是線程隔離也是流控的一部分,因為你要去隔離。
并發線程數:線程可用資源數量。單機閾值,表示你可以用五個線程數;假設接口比較慢 返回一次需要500ms,那么一秒可以處理兩次請求,一個線程每秒鐘可以處理兩個,五個就是每秒鐘可以處理十個請求,也就是該接口允許每秒鐘處理十個請求


我們現在就是模擬說并發比較高,把資源耗盡導致,添加購物車商品受影響

原本添加只需要22ms,查詢:500ms

Jmeter模擬:

以上就是模擬了每秒鐘最大的連接數,我們在tomcat已經設置好50

tomcat:? max-connections: 50

剛剛只需要22ms,現在添加的接口資源被耗盡了。

以及極大可能導致查詢失敗。很慢很慢,查詢連進都進不去,
商品服務變慢,導致了 購物車服務也被連累拖慢。如果并發進一步提高,那么可能掛了

如何解決?
我們設置好線程隔離


畫紅色部分為添加購物車訪問時長,絲毫沒有受到影響,而查詢直接訪問失敗

fallback:

我們在測試的時候,把線程數打滿的情況下,添加和修改的訪問時長沒有受到任何影響,查詢這個接口,響應時長很慢很慢,甚至出現報錯,前端得不到響應,資源被耗盡,這個時候我們應該如何去解決?

通過fallback去緩解

一瞬間來了很多請求,不會影響其他業務。但是,自身不可用,自身的資源被耗盡拒絕不再報錯,而是給用戶一個友好的提示。我們只對查詢商品,我們對商品服務feign線程隔離,對購物車查詢商品做fallback

所以
第一:讓http遠程調用也能被sentinel識別成為簇點。

2.代表feign監控開啟,開啟流控,線程隔離,當線程打滿的時候,拒絕新的請求,不想報錯,添加fallback返回友好提示


又多了一個鏈路,內部通過feign發起請求,開啟feign監控后,那么就出現了

那么我現在不用對整個購物車中的查詢商品進行線程隔離和流量控制,我僅僅對查這個feign的商品服務做線程隔離和流量控制,當我們的商品微服務出現故障的時候,我們只對商品微服務進行隔離,這樣就沒有問題,盡管你并發很高也不會把整個微服務資源耗盡

這里我配置的參數

不建議對整個查詢購物車業務進行流量控制,一旦失敗就都失敗了,所以只針對feign

服務熔斷:

但是我們盡管做了線程隔離,但是我們卡的不會太多線程數,但是每一次請求來了都要做遠程調用,又很耗時,浪費,這還是超時,如果掛了沒必要再發起請求
如果異常比例比較高,直接熔斷,拒絕發起請求,然后再走fallback這是優化后的最優解。
熔斷也不能一直斷開,如果恢復正常還要取消熔斷。

現在還有一個問題就是,什么時候熔斷,什么時候斷開?
斷路器可以幫助我們
默認是綠色狀態,表示可以正常訪問,同時會去監控經過斷路器的請求,如果發現比例過高達到閾值,直接open(持續時間可配置),熔斷時間到期后,會去走到測試half,那么
檢查一下服務有沒有恢復,沒有恢復就回到open,到期后,再次進行檢查,如果成功了,就關閉

我們僅僅要做的就是在sentinel中做好配置 點擊熔斷查看規則

慢調用比例:十次請求多少次請求很慢
RT:最大響應時間 代表如果我發出這個請求超出200ms,那么就算是慢的,低于兩百不統計
比例閾值:那么就是慢多少達到閾值,超過百分之50,那么就達到閾值我就需要給你熔斷,比如十次有五次
熔斷時長:就是觸發熔斷,open的臨時狀態,拒絕所有的請求,不發起遠程調用,減少資源浪費
最小請求次數:就是統計的次數,最少發起幾次 然后查看是否達到0.5
統計時長:多少作為周期進行統計,1s只要請求數量為幾次,失敗多少次然后就觸發


測試:

熔斷后你會發現查詢購物車速度變快很多,因為它不會再去遠程調用,不會再去查商品

之前:

改進后:

熔斷結束了,我們發行一次檢測都是七百多那么沒事了,如果有超過繼續熔斷

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

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

相關文章

5:OpenCV—圖像亮度、對比度變換

1.更改圖像和視頻的亮度 更改亮度 更改圖像的亮度是常用的點操作。在此操作中,圖像中每個像素的值應增加/減少一個常數。要更改視頻的亮度,應對視頻中的每一幀執行相同的操作。 如果要增加圖像的亮度,則必須為圖像中的每個像素添加一些正常…

【工作流】Fastgpt配置豆包模型-火山引擎

V4.9.7 Fastgpt現在不通過oneapi 來配置模型和渠道了, 可以直接在頁面進行設置 首先在賬號- 模型提供商里面 填入豆包的信息: 渠道名隨便填,廠商選豆包, 然后選3個模型,如圖所示 如果沒有填入模型映射的話是沒辦法 …

2025年系統架構師---綜合知識卷

1.進程是一個具有獨立功能的程序關于某數據集合的一次運行活動,是系統進行資源分配和調度的基本單位(線程包含于進程之中,可并發,是系統進行運算調度的最小單位)。一個進程是通過其物理實體被感知的,進程的物理實體又稱為進程的靜態描述,通常由三部分組成,分別是程序、…

LangChain4j入門AI(六)整合提示詞(Prompt)

前言 提示詞(Prompt)是用戶輸入給AI模型的一段文字或指令,用于引導模型生成特定類型的內容。通過提示詞,用戶可以告訴AI“做什么”、 “如何做”以及“輸出格式”,從而在滿足需求的同時最大程度減少無關信息的生成。有…

如何使用 Docker Compose 部署 Immich

如何使用 Docker Compose 部署 Immich Immich 是一個開源的自建照片和視頻備份解決方案,通過 Docker 部署可以快速構建一個穩定的自主管理系統。本文將帶你一步步完成使用 Docker Compose 部署 Immich 的過程,幫助你在生產環境中實現高效的媒體管理。 1…

Mac遠程連接Windows電腦教程

在 Mac 上通過微軟官方遠程桌面工具(Windows App)連接局域網內的 Windows 電腦,需按照以下步驟操作: 一、準備工作 確認 Windows 版本支持遠程連接 Windows 專業版/企業版/教育版 支持遠程桌面功能。家庭版不支持,需使…

從0到1打造AI Copilot:用SpringBoot + ChatGPT API實現智能開發助手

本文將從0到1系統性地講解如何基于SpringBoot與OpenAI ChatGPT API打造一款智能開發助手(AI Copilot)。文章首先介紹AI Copilot的背景與價值,接著深入架構設計與環境準備,然后通過詳盡的代碼示例演示SpringBoot項目的搭建、依賴配…

Crawl4AI:高效的AI數據抓取工具

在大數據時代,抓取并處理大量數據是進行人工智能(AI)研究與開發的基礎。而網絡爬蟲是獲取網頁數據的重要工具。今天,我想介紹一個功能強大的爬蟲框架——Crawl4AI,它為數據抓取和機器學習任務提供了無縫的支持。Crawl4…

從單鏈表 list 中刪除第 i 個元素--Python

從單鏈表 list 中刪除第 i 個元素 一、問題引入二、解題步驟1.思維導圖2.解題步驟 三、代碼實現四、個人總結 一、問題引入 請編寫程序,將 n 個整數順次插入一個初始為空的單鏈表的表頭。隨后對任意給定的位序 i,刪除鏈表中第 i 個結點。注意&#xff1…

git學習與使用(遠程倉庫、分支、工作流)

文章目錄 前言簡介git的工作流程git的安裝配置git環境:git config --globalgit的基本使用新建目錄初始化倉庫(repository)添加到暫存區新增/修改/刪除 文件狀態會改變 提交到倉庫查看提交(commit)的歷史記錄git其他命令…

九、日志分析和系統故障排查

目錄 1、日志分析1.1、日志介紹1.1.1、日志的功能1.1.2、日志文件的分類1.1.3、日志保存位置1.2、rsyslog服務1.2.1、發送日志到遠程日志服務器1.3、查看日志文件1.3.1、/var/log/messages文件的內容示例1.3.2、用戶登錄、退出系統的相關日志1.4、日志級別1.5、程序日志分析1.6…

C++ 非類成員變量 非類成員函數 全局變量 使用

1 使用特點 加 :: 變量使用 #include <iostream> using namespace std; int qwer 100; int asdf 900; void sitl(){std::cout <<"globe dog is sitting." << std::endl; }class Cat { public:static int num;}; int Cat::num 99;class Dog { …

【小烏龍問題】stm32供電,用過的ch340缺無法被識別

解決&#xff1a;更換正確供電&#xff08;stlink&#xff09;&#xff0c;不能用usb-ttl的僅供電&#xff0c;會干擾的&#xff01;&#xff01;&#xff01;&#xff01; 原來用stlink供電&#xff0c;今天沒拿就想著usb-ttl的電源供電&#xff0c;然后用ch340傳輸數據&…

使用 Navicat 17 for PostgreSQL 時,請問哪個版本支持 PostgreSQL 的 20150623 版本?還是每個版本都支持?

&#x1f9d1;?&#x1f4bb; PostgreSQL 用戶 使用 Navicat 17 for PostgreSQL 時&#xff0c;請問哪個版本支持 PostgreSQL 的 20150623 版本&#xff1f;還是每個版本都支持&#xff1f; &#x1f9d1;?&#x1f527; 官方技術中心 Navicat Premium 17 和 Navicat for P…

游戲引擎學習第305天:在平臺層中使用內存 Arena 的方法與思路

回顧前一天內容&#xff0c;并為今天的開發工作設定方向 我們正在直播制作完整游戲&#xff0c;當前正在實現一個精靈圖&#xff08;sprite graph&#xff09;的排序系統。排序的代碼已經寫完&#xff0c;過程并不復雜&#xff0c;雖然還沒做太多優化&#xff0c;但總體思路比…

PHP-FPM 調優配置建議

1、動態模式 pm dynamic; 最大子進程數&#xff08;根據服務器內存調整&#xff09; pm.max_children 100 //每個PHP-FPM進程大約占用30-50MB內存(ThinkPHP框架本身有一定內存開銷)安全值&#xff1a;8GB內存 / 50MB ≈ 160&#xff0c;保守設置為100 ; 啟動時創建的進程數&…

騰訊2025年校招筆試真題手撕(一)

一、題目 有n 把鑰匙&#xff0c;m 個鎖&#xff0c;每把鎖只能由一把特定的鑰匙打開&#xff0c;其他鑰匙都無法打開。一把鑰匙可能可以打開多把鎖&#xff0c;鑰匙也可以重復使用。 對于任意一把鎖來說&#xff0c;打開它的鑰匙是哪一把是等概率的。但你無法事先知道是哪一把…

【北郵通信系統建模與仿真simulink筆記】(2)2.3搭建仿真模型模塊操作運行仿真

【聲明】 本博客僅用于記錄博主學習內容、分享筆記經驗&#xff0c;不得用作其他非學術、非正規用途&#xff0c;不得商用。本聲明對本博客永久生效&#xff0c;若違反聲明所導致的一切后果&#xff0c;本博客均不負責。 目錄 【聲明】 一、搭建第一個仿真模型 二、模塊操作…

系統與賬戶安全

SYS-01&#xff1a;Windows的賬戶安全 安全配置核心原則&#xff1a; 強密碼策略&#xff1a; 通過組策略設置密碼復雜度&#xff1a; # 啟用密碼復雜度要求 secedit /export /cfg secpolicy.inf # 修改文件中的 "PasswordComplexity 1" secedit /configure /db …

COMPUTEX 2025 | 廣和通5G AI MiFi解決方案助力移動寬帶終端邁向AI新未來

隨著5G與AI不斷融合&#xff0c;穩定高速、智能的移動網絡已成為商務、旅行、戶外作業等場景的剛需。廣和通5G AI MiFi方案憑借領先技術與創新設計&#xff0c;重新定義5G移動網絡體驗。 廣和通5G AI MiFi 方案搭載高通 4nm制程QCM4490平臺&#xff0c;融合手機級超低功耗技術…