您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關java架構之微服務架構雪崩效應的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
前言
微服務化產品線,每一個服務專心于自己的業(yè)務邏輯,并對外提供相應的接口,看上去似乎很明了,其實還有很多的東西需要考慮,比如:服務的自動擴充,熔斷和限流等,隨著業(yè)務的擴展,服務的數量也會隨之增多,邏輯會更加復雜,一個服務的某個邏輯需要依賴多個其他服務才能完成。
一但一個依賴不能提供服務很可能會產生雪崩效應,最后導致整個服務不可訪問。
微服務之間進行rpc或者http調用時,我們一般都會設置調用超時,失敗重試等機制來確保服務的成功執(zhí)行,看上去很美,如果不考慮服務的熔斷和限流,就是雪崩的源頭。
假設我們有兩個訪問量比較大的服務A和B,這兩個服務分別依賴C和D,C和D服務都依賴E服務
A和B不斷的調用C,D處理客戶請求和返回需要的數據。當E服務不能供服務的時候,C和D的超時和重試機制會被執(zhí)行
由于新的調用不斷的產生,會導致C和D對E服務的調用大量的積壓,產生大量的調用等待和重試調用,慢慢會耗盡C和D的資源比如內存或CPU,然后也down掉。
A和B服務會重復C和D的操作,資源耗盡,然后down掉,最終整個服務都不可訪問。
常見的導致雪崩的情況有以下幾種:
程序bug導致服務不可用,或者運行緩慢
緩存擊穿,導致調用全部訪問某服務,導致down掉
訪問量的突然激增。
硬件問題,這感覺只能說是點背了⊙︿⊙。
雖然雪崩效應的產生千萬條,保證服務的不掛機,和流暢運行是我們不可推卸的責任,對應雪崩效應還是有很多保護方案的。
服務的橫向擴充
現(xiàn)在我們可以利用很多工具來保證服務不會掛掉,然后流量比較大的時候,可以橫向擴充服務來保證業(yè)務的流暢。比如我們最常使用k8s,能保證服務的運行狀態(tài),也可以讓服務自動的橫向擴充。對于用戶訪問量的激增情況這樣處理還是很不錯的,但是,橫向擴充也是有盡頭的,如果在一定環(huán)境下E服務的響應時間過長,依然有可能導致雪崩效應的產生。
限流
限制客戶端的調用來達到限流的做法是很常見的,比如,我們限制每秒最大處理200個請求,超過個數量直接拒絕請求。常見的算法如令牌桶算法
以一定的速度在桶里放令牌,當客戶端請求服務的時候,要先從桶里得到令牌,才能被處理,如果桶里的令牌用完了,則拒絕訪問。
熔斷
在客戶端控制對依賴的訪問,如果調用的依賴不可用時,則不再調用,直接返回錯誤,或者降級處理。開源的庫比如hystrix-go,也是我接下來要寫的源碼分析的一個庫。很好的實現(xiàn)了熔斷和降級的功能。他的主要思想是,設置一些閥值,比如,最大并發(fā)數,錯誤率百分比,熔斷嘗試恢復時間等。能過這些閥值來轉換熔斷器的狀態(tài):
關閉狀態(tài),允許調用依賴
打開狀態(tài),不允許調用依賴,直接返回錯誤,或者調用fallback
半開狀態(tài),根據熔斷嘗試恢復時間來開啟,允許調用依賴,如果調用成功則關閉失敗則繼續(xù)打開
關于“java架構之微服務架構雪崩效應的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。