常見的流量問題
- 冗余內容
? 同類請求被間隔執行,請求的內容包含一些相對靜態的信息,正確的處理是第一次請求包括靜態信息就好,后面的同類請求只包含必要的即時變化信息即可。錯誤的處理方式是每次請求服務器都返回一次靜態信息。
?
- 冗余請求
? 有的時候會發現應用短時間內發出多個同樣的請求,收到結果也都幾乎一樣,這種情況應該盡量減少請求次數,同時注意排查程序邏輯錯誤,也許問題不像表面看起來那么簡單。
?
- 無用請求
? 有的請求,你會發現誰也不知道它是干嘛的,很可能是以前版本遺留下來的無用請求,或者是引用的其他代碼包偷偷發出的,甚至是間諜請求,請收集一切證據后,毫不猶豫的干掉它。
?
- 永遠無法得到回應的請求
? 如果見到某類請求永遠的連接失敗或被返回404之類的失敗結果,那它不是歷史遺留的多余請求,就是某個不易察覺的功能已經失效了。
?
- 過多的失敗請求
? 有見過一類或一組請求,n個成功之中夾著m個失敗的嗎?舉個簡單的場景,某類請求,間隔1分鐘后連續發兩次,總是先有一次失敗的請求,1s后馬上再次發出一次同樣的請求就成功了(這里1s后發出的請求是指業務邏輯層判斷前面請求失敗后延遲1s后重傳的)。很好奇為什么第一次總失敗是吧,就有這么種情況,客戶端兩次請求樂觀的想要復用同一個TCP連接(長連接半長連接),但是服務端不這么想,也許是客戶端發起兩次請求的間隔,超出了服務端長設置的長連接無響應時限。。如何判斷呢?看看失敗的那次請求,是否和前一次成功的請求復用了同一個TCP連接(體現在Wireshark的streamId)。
?
- 非預期請求
? 比如一種常見的情況,應用退后臺后,有些請求就沒必要了,觀察下自己的產品,是否在后臺真的沒有發出這些請求。
?
如何判斷一個應用的流量消耗偏高
? 如果看流量的絕對值看不出高低,那就找幾個同類型的產品對比一下。如果完成同樣的事務,被測應用比同類產品高很多,那就是偏高了,可能有優化空間。
如何找到有效的優化點
? 把分析的不同類數據包,按包占總流量大小的比例,和包的數量排序,占比多的,和消息數量多的,一個優化空間大,一個精簡請求次數的機會大。