客戶端設(shè)置超時時間真的很重要
概述
在一條慢SQL導致購物車服務(wù)無法使用的解決方案一文中,提到了客戶端調(diào)用購物車服務(wù)的時候,超時了。如果當時客戶端沒有設(shè)置超時時間的話,會在客戶端中產(chǎn)生級聯(lián)故障。先用一張圖來說明一下。
聚合層除了調(diào)用購物車微服務(wù),還調(diào)用了營銷系統(tǒng)微服務(wù)。如果購物車服務(wù)的接口響應(yīng)時間很慢,而客戶端聚合層調(diào)用購物車服務(wù)時,又沒有設(shè)置超時時間,那么將占有大量的連接,如果請求購物車服務(wù)的請求量比較大,瞬間就會把連接占用完,直接導致聚合層調(diào)用營銷系統(tǒng)時,需要阻塞住等待獲取連接,這樣的話,整個小程序的很多功能就都用不了了。
從這里我們可以看到,最終小程序端會整體響應(yīng)很慢,因為它調(diào)用了聚合層,而聚合層又調(diào)用了一個性能很差的購物車服務(wù)。產(chǎn)生級聯(lián)故障了,小程序端和聚合層都在等待中耗盡了資源,這個是非??膳碌氖虑?。
設(shè)置超時時間
聚合層是使用了Spring Cloud Ribbon
,我們可以設(shè)置一下Ribbon
的超時時間。具體的可以參看SpringCloud Edgware.SR3版本中Ribbon的timeout設(shè)置方法
ribbon:
ReadTimeout: 2000
ConnectTimeout: 2000
這樣的話,聚合層調(diào)用購物車服務(wù),如果兩秒鐘沒有返回結(jié)果,則超時報錯。這樣做有兩個好處。
- 快速失敗,釋放資源;
- 聚合層調(diào)用購物車雖然失敗了,但是聚合層調(diào)用營銷系統(tǒng)則仍然可以進行,不受影響。小程序端使用到營銷系統(tǒng)接口的功能也能繼續(xù)使用;
知識擴展
客戶端保持彈性真心很重要,因此像客戶端中的
- 負載均衡模式
- 斷路器模式
- 后備模式
- 艙壁模式
都是需要了解的。要做一個彈性客戶端,可以借助一些工具,像Netflix
的Hystrix
組件就非常不錯,并且已經(jīng)被Spring Cloud
集成進去了,使用起來也比較簡單。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Stream distinct根據(jù)list某個字段去重的解決方案
這篇文章主要介紹了Stream distinct根據(jù)list某個字段去重,stream的distinct去重方法,是根據(jù) Object.equals,和 Object.hashCode這兩個方法來判斷是否重復(fù)的,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-05-05Java Tree結(jié)構(gòu)數(shù)據(jù)中查找匹配節(jié)點方式
這篇文章主要介紹了Java Tree結(jié)構(gòu)數(shù)據(jù)中查找匹配節(jié)點方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09使用SpringMVC訪問Controller接口返回400BadRequest
這篇文章主要介紹了使用SpringMVC訪問Controller接口返回400BadRequest,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03