SpringCloud學(xué)習(xí)筆記(六)-Zuul及Feign的超時(shí)時(shí)間測試

image.png

springcloud中Ribbon常常用來做負(fù)載均衡忙厌,其超時(shí)時(shí)間可以用以下公式來計(jì)算铃岔。
RibbonTime=(ReadTimeout+ConnectTimeout)*(1+MaxAutoRetries)*(1+MaxAutoRetriesNextServer)
ReadTimeout:處理超時(shí)時(shí)間
ConnectTimeout:連接建立超時(shí)時(shí)間
MaxAutoRetries:當(dāng)前服務(wù)器的重試次數(shù)(不包括當(dāng)前請求)
MaxAutoRetriesNextServer:負(fù)載到其他服務(wù)器的請求次數(shù)

上圖中T1指網(wǎng)關(guān)轉(zhuǎn)發(fā)請求到服務(wù)A時(shí)涉馁,總共的超時(shí)時(shí)間门岔。
T2指服務(wù)A調(diào)用服務(wù)B的超時(shí)時(shí)間,如果服務(wù)是采用Feign烤送,則代表是FeignClient的超時(shí)時(shí)間寒随。

一、服務(wù)A到服務(wù)B的超時(shí)時(shí)間測試

服務(wù)A中FeignClient的超時(shí)配置如下(其中網(wǎng)關(guān)的超時(shí)時(shí)間是60秒)

#--------------超時(shí)配置----------------------
#hystrix超時(shí)
hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=70000
#開啟重試機(jī)制
spring.cloud.loadbalancer.retry.enabled=true
#當(dāng)前服務(wù)器連接次數(shù)
ribbon.MaxAutoRetries=2
#下個(gè)負(fù)載均衡服務(wù)器連接次數(shù)
ribbon.MaxAutoRetriesNextServer=1
#請求處理的超時(shí)時(shí)間
ribbon.ReadTimeout=14000
#請求連接超時(shí)時(shí)間
ribbon.ConnectTimeout=10000
#--------------超時(shí)配置----------------------

執(zhí)行超時(shí):14秒,連接超時(shí):10秒妻往,熔斷:150秒互艾,本服務(wù)器重試次數(shù):2次,下個(gè)服務(wù)器重試次數(shù):1次蒲讯,假如服務(wù)B執(zhí)行需要200秒忘朝,
Feign是get接口,實(shí)際需要84秒超時(shí)
Feign是post接口判帮,實(shí)際需要14秒超時(shí)
由此可以看出得出如下結(jié)論

結(jié)論一:get請求時(shí)會重試局嘁。post請求不會重試,主要是考慮到冪等性問題晦墙。當(dāng)然可以通過配置強(qiáng)制所有接口都重試(不推薦)

由實(shí)際測試結(jié)果看悦昵,實(shí)際的超時(shí)時(shí)間并沒有包括配置的連接超時(shí)時(shí)間,這一點(diǎn)跟官網(wǎng)給出的超時(shí)時(shí)間的計(jì)算是有出入的晌畅,原因未知但指。
get:T2 = 14*(1+2)*(1+1) = 84秒
post:T2 = 14*1*1 = 14秒

如果把熔斷超時(shí)修改為70秒,其他配置不變
則實(shí)際超時(shí)時(shí)間如下
get:min(14*(1+2)*(1+1), 70)=70
Post: min(14*1*1, 70)=14

結(jié)論二:熔斷的超時(shí)時(shí)間要大于執(zhí)行超時(shí)

這是在服務(wù)A中看到的時(shí)間結(jié)果抗楔,但是由于zuul配置的超時(shí)時(shí)間是60秒棋凳,所以返回給用戶的信息是60秒就已經(jīng)超時(shí)。

二连躏、網(wǎng)關(guān)的超時(shí)時(shí)間測試

FeignClient的超時(shí)時(shí)間不變剩岳,網(wǎng)關(guān)的超時(shí)配置如下:

#--------------超時(shí)配置----------------------
#hystrix超時(shí)
hystrix.command.default.execution.timeout.enabled=true
zuul.ribbonIsolationStrategy=THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=90000
#開啟重試機(jī)制
zuul.retryable=true
#當(dāng)前服務(wù)器連接次數(shù)
ribbon.MaxAutoRetries=1
#下個(gè)負(fù)載均衡服務(wù)器連接次數(shù)
ribbon.MaxAutoRetriesNextServer=1
#請求處理的超時(shí)時(shí)間
ribbon.ReadTimeout=15000
#請求連接超時(shí)時(shí)間
ribbon.ConnectTimeout=10000
#--------------超時(shí)配置----------------------

實(shí)際超時(shí)時(shí)間:
Get請求時(shí): T1 = 15*(1+1)*(1+1) = 60秒
Post請求時(shí): T1 = 15秒

如果把熔斷的超時(shí)時(shí)間改為40秒,其他不變

#--------------超時(shí)配置----------------------
#hystrix超時(shí)
hystrix.command.default.execution.timeout.enabled=true
zuul.ribbonIsolationStrategy=THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=40000
#開啟重試機(jī)制
zuul.retryable=true
#當(dāng)前服務(wù)器連接次數(shù)
ribbon.MaxAutoRetries=1
#下個(gè)負(fù)載均衡服務(wù)器連接次數(shù)
ribbon.MaxAutoRetriesNextServer=1
#請求處理的超時(shí)時(shí)間
ribbon.ReadTimeout=15000
#請求連接超時(shí)時(shí)間
ribbon.ConnectTimeout=10000
#--------------超時(shí)配置----------------------

Get請求時(shí): T1 = min(40, 15*(1+1)*(1+1)) = 40秒
Post請求時(shí): T1 = min(40, 15) = 15秒

結(jié)論三:從上面配置可以看出,feign與zuul開啟超時(shí)重試的參數(shù)是不一致的入热。另外hytrix默認(rèn)的隔離策略是信號量隔離拍棕,需要配置zuul.ribbonIsolationStrategy=THREAD,否則熔斷不會生效勺良。
結(jié)論四:如果FeignClient的超時(shí)大于網(wǎng)關(guān)的超時(shí)時(shí)間時(shí)绰播,網(wǎng)關(guān)會直接超時(shí)返回或熔斷返回,通過ZuulFallbackProvider接口實(shí)現(xiàn)尚困,網(wǎng)關(guān)是服務(wù)級的超時(shí)蠢箩。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市事甜,隨后出現(xiàn)的幾起案子忙芒,更是在濱河造成了極大的恐慌,老刑警劉巖讳侨,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呵萨,死亡現(xiàn)場離奇詭異,居然都是意外死亡跨跨,警方通過查閱死者的電腦和手機(jī)潮峦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門囱皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忱嘹,你說我怎么就攤上這事嘱腥。” “怎么了拘悦?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵齿兔,是天一觀的道長。 經(jīng)常有香客問我础米,道長分苇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任屁桑,我火速辦了婚禮医寿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蘑斧。我一直安慰自己靖秩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布竖瘾。 她就那樣靜靜地躺著沟突,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捕传。 梳的紋絲不亂的頭發(fā)上事扭,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音乐横,去河邊找鬼。 笑死今野,一個(gè)胖子當(dāng)著我的面吹牛葡公,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播条霜,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼催什,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宰睡?” 一聲冷哼從身側(cè)響起蒲凶,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拆内,沒想到半個(gè)月后旋圆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麸恍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年灵巧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搀矫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刻肄,死狀恐怖瓤球,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敏弃,我是刑警寧澤卦羡,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站麦到,受9級特大地震影響绿饵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隅要,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一蝴罪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧步清,春花似錦要门、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谴轮,卻和暖如春炒瘟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背第步。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工疮装, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粘都。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓廓推,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翩隧。 傳聞我的和親對象是個(gè)殘疾皇子樊展,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355