熔断及算法
熔斷與雪崩
上游服務(wù)切斷或減緩對下游服務(wù)的訪問。
熔斷這一概念來源于電子工程中的斷路器(Circuit Breaker)。在互聯(lián)網(wǎng)系統(tǒng)中,當下游服務(wù)因訪問壓力過大而響應(yīng)變慢或失敗,上游服務(wù)為了保護系統(tǒng)整體的可用性,可以暫時切斷對下游服務(wù)的調(diào)用。犧牲局部,保全整體的措施就叫做熔斷。
假設(shè)當前系統(tǒng)中有A,B,C三個服務(wù),服務(wù)A是上游,服務(wù)B是中游,服務(wù)C是下游。一旦下游服務(wù)C因某些原因變得不可用,堆積大量的請求,服務(wù)B的請求線程也隨之阻塞。線程資源逐漸耗盡,使得服務(wù)B也變得不可用。緊接著,服務(wù)A也變?yōu)椴豢捎?#xff0c;整個調(diào)用鏈路被拖垮。這種調(diào)用鏈路的連鎖故障叫做雪崩。
服務(wù)熔斷是應(yīng)對雪崩效應(yīng)的一種微服務(wù)鏈路保護機制。例如在高壓電路中,如果某個地方的電壓過高,熔斷器就會熔斷,對電路進行保護。同樣,在微服務(wù)架構(gòu)中,熔斷機制也是起著類似的作用。當調(diào)用鏈路的某個微服務(wù)不可用或者響應(yīng)時間太長時,會進行服務(wù)熔斷,不再有該節(jié)點微服務(wù)的調(diào)用,快速返回錯誤的響應(yīng)信息。當檢測到該節(jié)點微服務(wù)調(diào)用響應(yīng)正常后,恢復調(diào)用鏈路。
一種簡單的思路
用單位時間內(nèi)總請求數(shù)與成功或失敗請求數(shù)之比來確定是否熔斷,單位時間請求次數(shù)的計算可以使用粒度較小的滑動窗口。熔斷的狀態(tài)可以有open、half-open或closed,當消耗完堆積的請求后,就可以調(diào)整成closed狀態(tài),進行正常的服務(wù)。
熔斷算法與框架
Google sre彈性熔斷算法:https://sre.google/sre-book/handling-overload/#eq2101
Google sre彈性熔斷算法的實踐:
bilibili kratos:https://github.com/go-kratos/kratos/tree/v1.0.x/pkg/net/netutil/breaker
go-zero:https://github.com/zeromicro/go-zero/tree/master/core/breaker
Hystrix:https://github.com/Netflix/Hystrix
hystrix-go:https://github.com/afex/hystrix-go
gobreaker:https://github.com/sony/gobreaker
Reference
https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern
https://blog.51cto.com/u_15197573/5163214
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247506440&idx=4&sn=5719c4fa0b9c80ed2ea0ab3c35d19a6b&chksm=fbb153f6ccc6dae02cf5caae458cd245bde5ecf9ca3aa2905eab9a47cc4586064928ef82a314&scene=27
https://landscape.cncf.io/
總結(jié)
- 上一篇: 计算机技术为艺术设计提供,计算机技术艺术
- 下一篇: 【uni-app】懂你找图--创建项目到