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

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

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

[[421757]]

偈語: 未經他人苦,莫勸他人善

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

出口帶寬拉滿

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

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

反思

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

而在帶寬問題被真正發現之前,老許內心對帶寬其實已有所懷疑,但是卻沒有認真進行驗證,只聽信了他人的推測導致發現問題的時間被推遲。

httptrace

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

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

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

框架問題

本部分更加適合騰訊系的兄弟們去閱讀,其他非騰訊系技術可以直接跳過。

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

為了研究這個原因,老許只好花些零碎的時間去閱讀源碼,最終發現了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) 

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

最終修改如下:

  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終于可以控制生效。當然本次修改老許已經在github上面提交issue和pr,目前已被合入master。相關issue和pr如下:

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

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

仍有疑慮

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

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

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

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

替換fasthttp時還未發現帶寬被拉滿

美好愿景

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

 

責任編輯:武曉燕 來源: Gopher指北
相關推薦

2016-09-22 09:12:45

Windows 10優化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

實名制手機實名制電話實名制

2022-06-14 08:00:28

切換包管理器版本

2023-08-21 12:19:11

ChatGPTAI

2024-12-25 13:50:00

訓練數據AI

2021-11-01 17:29:02

Windows系統Fork

2011-04-06 10:57:11

Cacti監控

2011-03-31 16:16:43

Cacti監控

2020-11-09 11:10:46

運營商短信網絡

2021-07-27 07:12:11

Getter接口Setter

2017-03-20 19:40:29

AndroidSwipeRefres下拉刷新

2022-10-10 07:34:36

TCP三次握手區塊鏈

2017-08-24 17:37:18

DNS緩存分析

2021-01-11 05:30:04

Boot 單機片

2024-05-13 08:37:17

炫技H5UI

2023-07-13 09:12:37

CNCF項目云原生

2019-11-04 10:37:53

MongoDB宕機日志
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美美乳| 亚洲看片| 久草色视频 | 欧美激情精品久久久久 | 欧美lesbianxxxxhd视频社区 | 国产欧美一区二区精品久导航 | 欧美aaaaaaaaaa | 久久99精品视频 | 国产一区二区自拍 | 久久一区二区三区电影 | 一级看片免费视频囗交动图 | av日韩一区 | 淫片专区| 日韩精品一区二区三区在线观看 | 97精品超碰一区二区三区 | 欧美三区| 精品亚洲一区二区三区 | 日本视频在线播放 | 亚洲国产视频一区二区 | a视频在线观看 | 欧美精品99| 国产一区在线免费观看 | 成人毛片在线视频 | 亚洲成人在线免费 | 国产精品一区在线观看 | 婷婷久久五月 | 狠狠干综合视频 | 精品综合久久 | 色约约视频 | 欧美日韩亚洲国产 | 亚洲精品一区二区网址 | 亚洲精品成人网 | 免费久久网 | 先锋资源网站 | 日韩精品视频在线观看一区二区三区 | 99热电影| 91夜色在线观看 | julia中文字幕久久一区二区 | 欧美激情综合网 | 婷婷久久精品一区二区 | 黄免费在线 |