故事要從我讀大學那會說起。
因為功率問題,很多寢室都是不讓用吹風筒和熱水壺的。
但我那時候頭鐵,不僅用,而且還同時開了兩個熱水壺和一個吹風筒。直接給寢室電路來了個壓" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

服務熔斷是指什么?你知道嗎?

來源: 責編: 時間:2024-03-19 09:24:23 180觀看
導讀微服務領域里有個詞叫服務熔斷,你知道這是啥不?
故事要從我讀大學那會說起。
因為功率問題,很多寢室都是不讓用吹風筒和熱水壺的。
但我那時候頭鐵,不僅用,而且還同時開了兩個熱水壺和一個吹風筒。直接給寢室電路來了個壓

aJR28資訊網——每日最新資訊28at.com

微服務領域里有個詞叫服務熔斷,你知道這是啥不?
故事要從我讀大學那會說起。
因為功率問題,很多寢室都是不讓用吹風筒和熱水壺的。
但我那時候頭鐵,不僅用,而且還同時開了兩個熱水壺和一個吹風筒。直接給寢室電路來了個壓測。
不出意外的出了意外,寢室直接停電。
一時間,隔壁寢室燈火通明,我們寢室一片漆黑。
作為本科專業電氣工程的靚仔,我們意識到,這妥妥是電路過載導致斷路器跳閘了。
于是我們趁社管阿姨不注意,偷偷摸進配電房,手動將斷路器開關復位,寢室就來電了。aJR28資訊網——每日最新資訊28at.com

是真的有驚無險。
如果沒有這個斷路器,寢室總電路怕是得因為過載全部燒掉,我們幾個妥妥會提前進入社會大學。
我能畢業,全靠這個斷路器!
看到這里,我們知道了斷路器的作用,就是在電路出問題的時候及時斷開電路,避免過載,從而保護電路。
在微服務領域,我們也可以借鑒斷路器的思路,引入了服務熔斷的概念。aJR28資訊網——每日最新資訊28at.com

服務熔斷是什么

服務熔斷,也就是 Circuit Breaker,本質上是一種軟件設計模式,用于在分布式系統中處理服務調用失敗的情況。aJR28資訊網——每日最新資訊28at.com

假設有個 A 服務調用 B 服務的場景,如果 B 服務已經出現頻繁失敗的情況,A 繼續調用只會加劇 B 服務的負擔,嚴重的時候,有可能導致 B 服務崩潰,甚至出現 B 服務重啟后立馬被打崩的情況。因此,最好的做法是,在一段時間內先不要再頻繁調用 B 服務。aJR28資訊網——每日最新資訊28at.com

為了實現這個保護效果,我們可以在 A 和 B 之間加一個熔斷器。當 B 服務頻繁失敗時,熔斷器可以防止 A 繼續頻繁調用 B 服務,相當于阻斷服務間的請求,并且還能在 B 服務恢復正常之后,恢復 A 對 B 的調用。aJR28資訊網——每日最新資訊28at.com

aJR28資訊網——每日最新資訊28at.com

熔斷器的作用aJR28資訊網——每日最新資訊28at.com

工作原理也和上文提到的宿舍電路里的斷路器類似。當服務調用失敗的次數超過某個閾值時,熔斷器會自動“打開”(Open),阻止進一步的服務調用,防止不斷報錯重試導致壓垮被調用服務。aJR28資訊網——每日最新資訊28at.com

然后在在一段時間之后,熔斷器開始嘗試允許少量的請求通過,以檢查服務是否已經恢復,也就是所謂的“半打開”(HalfOpen)。aJR28資訊網——每日最新資訊28at.com

如果這些請求成功,熔斷器會“關閉”(Close),系統恢復正常的服務調用;但如果調用還是失敗,那熔斷器會繼續再次回到“打開”(Open)狀態。aJR28資訊網——每日最新資訊28at.com

上面提到的三個狀態Open,HalfOpen和Close是服務熔斷中非常重要的三個狀態。aJR28資訊網——每日最新資訊28at.com

  •  Closed(關閉):這是熔斷器的初始狀態。在這種狀態下,可以進行服務間調用,熔斷器會跟蹤服務調用的成功和失敗情況。如果失敗調用次數,到了某個配置的閾值,熔斷器就會切換到 Open(打開)狀態。

aJR28資訊網——每日最新資訊28at.com

熔斷器關閉aJR28資訊網——每日最新資訊28at.com

  • HalfOpen(半開):保持 Open 狀態一段時間后,熔斷器會嘗試進入 HalfOpen 狀態。這個狀態下,熔斷器會嘗試放幾個請求通過,看下被調用服務是否已經恢復。如果這些請求成功,熔斷器就會回到 Closed 狀態;如果失敗,那它會退回到 Open 狀態。

aJR28資訊網——每日最新資訊28at.com

熔斷器半打開aJR28資訊網——每日最新資訊28at.com

  •  Open(打開):當熔斷器檢測到服務調用連續失敗時,它會切換到 Open 狀態。在這種狀態下,熔斷器會阻止所有對服務的調用,直到超時時間過后,或者在 HalfOpen 狀態下的探測請求成功。

aJR28資訊網——每日最新資訊28at.com

熔斷器打開aJR28資訊網——每日最新資訊28at.com

它們的狀態流轉關系就像下圖這樣。aJR28資訊網——每日最新資訊28at.com

aJR28資訊網——每日最新資訊28at.com

熔斷狀態機aJR28資訊網——每日最新資訊28at.com

怎么使用熔斷器?

可以看出,熔斷器的邏輯其實很簡單,而且這么通用的功能,必然有現成的庫可以直接拿來用。
比如阿里開源的sentinel-golang。
使用也比較簡單。只需要三步。aJR28資訊網——每日最新資訊28at.com

1.引入 circuitbreaker 庫

"github.com/alibaba/sentinel-golang/core/circuitbreaker"

2.聲明熔斷規則

通過circuitbreaker.LoadRules加載對應的熔斷規則。aJR28資訊網——每日最新資訊28at.com

_, err = circuitbreaker.LoadRules([]*circuitbreaker.Rule{        // Statistic time span=5s, recoveryTimeout=3s, maxErrorRatio=40%        {            Resource:                     "api_url",            Strategy:                     circuitbreaker.ErrorRatio,            RetryTimeoutMs:               3000,            MinRequestAmount:             10,            StatIntervalMs:               5000,            StatSlidingWindowBucketCount: 10,            Threshold:                    0.4,        },    })

這里面有幾個需要注意的地方:aJR28資訊網——每日最新資訊28at.com

  •  Resource 是想要保護的資源名稱,也就是上面提到的 B 服務,這里可以直接使用被調用方的 url。
  •  Strategy 是指熔斷策略,示例代碼里展示的是錯誤率,也就是說服務達到 xx 比例的錯誤率時就會觸發熔斷。同時這里還支持填其他策略,比如從錯誤率換成錯誤次數或者是慢調用的比例個數。
  •  RetryTimeoutMs 是指熔斷器打開后經過多長時間后進行重試。在熔斷器 Open 期間,請求會被直接拒絕,不會發送到后端 Resource(B 服務)。在指定的超時時間之后,熔斷器將嘗試發送一個請求以檢查后端資源的可用性。
  •  MinRequestAmount 表示在進行熔斷之前必須滿足的最小請求數量。只有當請求的數量達到或超過這個閾值時,熔斷器才會生效。這個參數可以用來避免在系統啟動時就觸發熔斷。
  •  StatIntervalMs 表示統計信息的時間間隔,以毫秒為單位。在這個時間間隔內,熔斷器將收集請求的統計信息,用于計算錯誤率。
  •  Threshold:表示錯誤率的閾值。當錯誤率超過這個閾值時,熔斷器將觸發熔斷,停止發送請求到后端資源。

3.加入熔斷保護

在需要進行熔斷保護的地方,加入下面的代碼:aJR28資訊網——每日最新資訊28at.com

e, b := sentinel.Entry("api_url")        if b == nil {            // 通過檢測,不需要熔斷,直接執行api調用            err := api_call()            if err != nil {                sentinel.TraceError(e, err)            }            // 保證執行完之后退出資源            e.Exit()        }

上面的 sentinel.Entry()方法內部會自動檢測"api_url"這個資源是否需要打開熔斷器,如果 api 調用報錯了,可以通過 sentinel.TraceError 記錄下來,sentinel 內部會根據報錯去計算報錯率,自動判斷要不要熔斷。aJR28資訊網——每日最新資訊28at.com

到這里,就算使用上熔斷器的能力啦。aJR28資訊網——每日最新資訊28at.com

總結

  • 服務熔斷是一種軟件設計模式,用于分布式系統中處理服務調用失敗的情況,可以防止被調用服務因為頻繁失敗被壓垮。它借鑒了電路中的斷路器原理,通過監控服務調用的失敗率等條件來決定是否阻止進一步的調用,以保護系統免受過載。
  • 服務熔斷器有三個主要狀態:關閉(Closed)、半開(HalfOpen)和打開(Open),分別對應不同的保護策略。當服務調用失敗次數超過閾值時,熔斷器打開,阻止服務調用。在一定時間后,熔斷器嘗試半開狀態,允許少量請求通過以測試服務恢復情況。如果服務恢復,熔斷器關閉;如果失敗,熔斷器保持打開狀態。
  • 在 go 語言里可以使用 sentinel-golang 庫實現熔斷功能。

本文鏈接:http://www.www897cc.com/showinfo-26-77684-0.html服務熔斷是指什么?你知道嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: GaussDB WDR分析之集群報告篇

下一篇: 歷史上那些臭名昭著的編程錯誤

標簽:
  • 熱門焦點
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 如何通過Python線程池實現異步編程?

    線程池的概念和基本原理線程池是一種并發處理機制,它可以在程序啟動時創建一組線程,并將它們置于等待任務的狀態。當任務到達時,線程池中的某個線程會被喚醒并執行任務,執行完任
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top 主站蜘蛛池模板: 高邮市| 武宣县| 孟村| 五大连池市| 辽宁省| 花莲市| 柏乡县| 柯坪县| 巩留县| 湘阴县| 高青县| 汝城县| 察哈| 方山县| 梁平县| 博野县| 自贡市| 尚志市| 上思县| 隆德县| 葫芦岛市| 旬邑县| 青河县| 周至县| 吴桥县| 营山县| 琼结县| 大厂| 孝昌县| 高要市| 宜春市| 项城市| 阜南县| 盱眙县| 侯马市| 清水县| 莒南县| 阳原县| 桐城市| 从江县| 社旗县|