成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一次帶寬拉滿引發(fā)的百分百超時血案!

網(wǎng)絡(luò) 通信技術(shù)
鏖戰(zhàn)兩周有余,為了排查線上某接口百分百超時的原因,如今總算有些成果。雖然仍有疑慮但是礙于時間不允許和個人能力問題先做如下總結(jié)以備來日再戰(zhàn)。

[[421757]]

偈語: 未經(jīng)他人苦,莫勸他人善

鏖戰(zhàn)兩周有余,為了排查線上某接口百分百超時的原因,如今總算有些成果。雖然仍有疑慮但是礙于時間不允許和個人能力問題先做如下總結(jié)以備來日再戰(zhàn)。

出口帶寬拉滿

能夠發(fā)現(xiàn)這個問題實屬僥幸。依稀記得這是一個風(fēng)雨交加的夜晚,這風(fēng)、這雨注定了今夜的不平凡。果然線上百分百超時的根因被發(fā)現(xiàn)了!

我們的線上接口需要對外請求,而我們的流出帶寬被拉滿自然耗時就長因此導(dǎo)致超時。當(dāng)然這都是結(jié)果,畢竟中間過程的艱辛已經(jīng)遠(yuǎn)遠(yuǎn)超出老許的文字所能描述的范圍。

反思

結(jié)果有了,該有的反思仍舊不能少。比如流出帶寬被拉滿為什么沒有提前預(yù)警!無論是自信帶寬足夠還是經(jīng)驗不足都值得老許記上一筆。

而在帶寬問題被真正發(fā)現(xiàn)之前,老許內(nèi)心對帶寬其實已有所懷疑,但是卻沒有認(rèn)真進(jìn)行驗證,只聽信了他人的推測導(dǎo)致發(fā)現(xiàn)問題的時間被推遲。

httptrace

有時候不得不吹一波Go對http trace的良好支持。老許也是基于此做了一個demo,該demo可以打印http請求各階段耗時。

上述為一次http請求各階段耗時輸出,有興趣的可去https://github.com/Isites/go-coder/blob/master/httptrace/trace.go拿到源碼。

老許對帶寬的懷疑主要就是基于此demo中的源碼進(jìn)行線上分析測試給到的推測。

框架問題

本部分更加適合騰訊系的兄弟們?nèi)ラ喿x,其他非騰訊系技術(shù)可以直接跳過。

我司的框架為TarsGo,我們在線上設(shè)置handletimeout為1500ms,該參數(shù)主要用于控制某一接口總耗時不超過1500ms,而我們的超時告警均為3s,因此即使帶寬已滿這個百分百超時告警也不應(yīng)出現(xiàn)。

為了研究這個原因,老許只好花些零碎的時間去閱讀源碼,最終發(fā)現(xiàn)了TarsGo@v1.1.6的handletimeout控制是無效的。

下面看一下有問題的源碼:

  1. func (s *TarsProtocol) InvokeTimeout(pkg []byte) []byte { 
  2.  rspPackage := requestf.ResponsePacket{} 
  3.  rspPackage.IRet = 1 
  4.  rspPackage.SResultDesc = "server invoke timeout" 
  5.  return s.rsp2Byte(&rspPackage) 

當(dāng)某接口總執(zhí)行時間超過handletimeout時,會調(diào)用InvokeTimeout方法告知client調(diào)用超時,而上述的邏輯中忽略了IRequestId的響應(yīng),這就導(dǎo)致client收到響應(yīng)包時無法將響應(yīng)包和某次的請求對應(yīng)起來,從而導(dǎo)致客戶端一直等待響應(yīng)直至超時。

最終修改如下:

  1. func (s *TarsProtocol) InvokeTimeout(pkg []byte) []byte { 
  2.  rspPackage := requestf.ResponsePacket{} 
  3.  //  invoketimeout need to return IRequestId 
  4.  reqPackage := requestf.RequestPacket{} 
  5.  is := codec.NewReader(pkg[4:]) 
  6.  reqPackage.ReadFrom(is
  7.  rspPackage.IRequestId = reqPackage.IRequestId 
  8.  rspPackage.IRet = 1 
  9.  rspPackage.SResultDesc = "server invoke timeout" 
  10.  return s.rsp2Byte(&rspPackage) 

后來老許在本地用demo驗證handletimeout終于可以控制生效。當(dāng)然本次修改老許已經(jīng)在github上面提交issue和pr,目前已被合入master。相關(guān)issue和pr如下:

https://github.com/TarsCloud/TarsGo/issues/294

https://github.com/TarsCloud/TarsGo/pull/295

仍有疑慮

到這里,事情依然沒有得到完美的解決。

上圖為我們對外部請求做的最大耗時統(tǒng)計,毛刺嚴(yán)重且耗時簡直不符合常理。圖中標(biāo)紅部分耗時約為881秒,而實際上我們在發(fā)起http請求時均做了嚴(yán)格的超時控制,這也是令老許最為頭疼的問題,這幾天臉上冒的痘都是為它熬夜的證明。

更加令人驚恐的事情是,我們將官方的http替換為fasthttp后,毛刺沒有了!老許自認(rèn)為對go的http源碼還有幾分淺薄的理解,而殘酷的現(xiàn)實簡直令人懷疑人生。

到目前,老許再次簡閱了一遍http的源碼,仍未發(fā)現(xiàn)問題,這大概率會成為一樁懸案了,還望各位有經(jīng)驗的大佬分享一二,至少讓這篇文章有始有終。

替換fasthttp時還未發(fā)現(xiàn)帶寬被拉滿

美好愿景

最后,別無他言,直接上圖!

 

責(zé)任編輯:武曉燕 來源: Gopher指北
相關(guān)推薦

2016-09-22 09:12:45

Windows 10優(yōu)化Cortana

2020-01-06 09:43:14

賠償TSB遷移

2011-06-22 15:54:47

2014-06-16 14:14:45

wifi

2017-01-19 07:59:17

實名制手機(jī)實名制電話實名制

2022-06-14 08:00:28

切換包管理器版本

2023-08-21 12:19:11

ChatGPTAI

2024-12-25 13:50:00

訓(xùn)練數(shù)據(jù)AI

2021-11-01 17:29:02

Windows系統(tǒng)Fork

2011-04-06 10:57:11

Cacti監(jiān)控

2011-03-31 16:16:43

Cacti監(jiān)控

2020-11-09 11:10:46

運營商短信網(wǎng)絡(luò)

2022-10-10 07:34:36

TCP三次握手區(qū)塊鏈

2017-03-20 19:40:29

AndroidSwipeRefres下拉刷新

2021-07-27 07:12:11

Getter接口Setter

2017-08-24 17:37:18

DNS緩存分析

2021-01-11 05:30:04

Boot 單機(jī)片

2021-05-20 07:58:02

Appium環(huán)境搭建Windows10

2024-05-13 08:37:17

炫技H5UI

2023-07-13 09:12:37

CNCF項目云原生
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日日日色 | 国产熟熟 | 日本h片在线观看 | 亚洲一区二区三区免费在线观看 | 欧美成人精品一区二区男人看 | 亚洲一区二区三 | 91色视频在线观看 | www.99热| 国产在线精品区 | 精品久久久久久久久久 | 日韩一二区 | 亚洲小视频在线播放 | 国产精品海角社区在线观看 | 久久久999成人 | 国产福利91精品一区二区三区 | 精品国产高清一区二区三区 | 久久久www成人免费精品 | 91n成人| 欧美精品一区二区三区在线播放 | 中文字幕免费视频 | 精品人伦一区二区三区蜜桃网站 | 一区福利视频 | 欧美不卡在线 | 亚洲精品一区二区在线观看 | 一级做a爰片久久毛片免费看 | 九九热在线免费观看 | 888久久久| 视频在线一区二区 | 韩国电影久久 | 99久久精品国产一区二区三区 | 精品视频免费在线 | 狠狠色网 | 精品久久网 | 亚洲电影中文字幕 | 91免费在线视频 | 日韩久久综合网 | 日日碰狠狠躁久久躁96avv | 九九久久这里只有精品 | 欧美国产日韩精品 | 欧美亚洲视频 | 午夜爽爽爽男女免费观看影院 |