彭 瀛,韋 凱,陳禹樵
(中移互聯網有限公司云產品事業部 廣東 廣州 510000)
本文從客戶端開發人員的角度分析,探索Android應用網絡錯誤率優化方案。Android應用的網絡錯誤率優化主要經過3個過程:網絡數據采集、網絡數據分析、制定實施方案。
Android應用可以通過接入聽云SDK實現網絡數據采集。聽云平臺是國內權威的應用性能監控平臺之一,基于真實用戶的數據基礎,實現網絡性能監控和問題定位,幫助開發者更精準、有效地進行性能優化[1]。
聽云SDK通過虛擬機技術在應用打包編譯過程中對特定的網絡請求方法嵌碼,實現對應用采樣點的數據采集。嵌碼操作會在指定方法前后部署聽云SDK探針(圖1),整個過程不會對業務邏輯產生改變。聽云SDK在Android端支持常見的網絡請求框架,包括HttpURLConnection、HttpClient、Volley、OkHttp、Retrofit等[2],并且支持WebView和X5WebView。

圖1 聽云SDK通過嵌碼實現數據采集原理
集成SDK后,當應用發起網絡請求時,SDK探針就會采集網絡數據并上傳到服務器整理,最后以報表形式展現,包括網絡錯誤率、錯誤追蹤列表、錯誤詳情、應用響應時間、DNS解析時間、TCP建立連接時間、SSL握手時間、首包時間、剩余包時間、訪問量等信息。
在網絡請求模塊中,聽云支持按照響應時間、吞吐率、響應時間耗時、平均傳輸數據量4種維度對所有主機的性能進行排序(圖2)。響應時間是選定時間內平均響應時間,吞吐率是平均每分鐘的HTTP請求數量,響應時間耗時是選定時間內的累計響應時長,平均傳輸數據量是選定時間內數據傳輸的均值。

圖2 服務器主機性能排序
此外,還可以通過平均響應時間的時間折線(圖3)和訪問吞吐率時間折線(圖4)來跟蹤服務的性能波動。

圖3 服務器主機平均響應時間的時間曲線

圖4 服務器主機訪問吞吐率的時間曲線
在網絡錯誤模塊中,聽云支持按照主機錯誤率、HTTP錯誤類型、網絡錯誤類型3種維度分析,整理出類似錯誤追蹤列表(圖5)。從列表進入類似錯誤追蹤頁面,可以看到相同類型錯誤的信息,包括錯誤類型、錯誤代碼、錯誤總數、URL、設備信息等。

圖5 類似錯誤追蹤
從類似錯誤追蹤頁面進入錯誤詳情頁面(圖6),可以看到請求參數、調用堆棧、響應頭、響應內容等更詳細的信息匯總,真實還原客戶端錯誤現場信息,精準定位到發生錯誤代碼的位置。

圖6 網絡錯誤詳情
(1)HTTP 404錯誤。可能服務端資源缺失或者客戶端訪問地址有誤,應該檢查服務端資源是否存在,檢查客戶端是否訪問已下線的資源或者訪問地址錯誤。
(2)SSL證書錯誤??赡芊斩俗C書過期或者服務器與客戶端SSL/TLS版本不兼容,應該檢查服務端證書的有效期,檢查各個版本的安卓系統支持的協議版本是否和服務端支持的版本相匹配。
(3)未知主機。可能域名錯誤或者客戶端DNS解釋過程失敗,應該檢查域名是否可以被DNS服務器正確解釋,優化客戶端DNS解釋模塊,使用HttpDNS[3]等。
(4)請求超時、建立連接失敗??赡芸蛻舳司W絡問題或者服務器性能問題,應該檢查客戶端發送請求時的網絡狀態,適當調整客戶端網絡請求框架參數,聯系運維人員排查服務端是否存在性能問題。
(1)請求邏輯優化。減少不必要的網絡請求,將多接口數據請求整合為單接口數據請求,單一數據上報整合為集中數據上報。
(2)網絡環境判斷。在網絡請求前先判斷當前網絡狀態,在網絡狀態良好的情況下再發起請求,如果當前網絡狀態不佳,網絡請求不僅不會成功,還增加不必要的線程等資源開銷,增加耗電量。
(3)并發機制優化。并發請求數量太多容易造成網絡擁塞,應當減少同一時間網絡請求的數量,需要控制網絡請求線程的并發數量,根據網絡狀態動態調整并發數量大小,對于需要請求同一數據的業務,應當采用緩存機制減少請求次數。
(4)重試機制優化。頻繁地進行網絡重試會增加不必要的資源開銷,重試間隔應該根據重試次數動態調整,在用戶體驗得到保障的前提下,盡量減少重試次數,減少重試失敗的次數。
本文探討了Android應用網絡錯誤率的一些優化方案,從客戶端開發人員的角度出發,通過網絡數據采集、網絡數據分析、制定實施方案3個過程實現應用的網絡錯誤率優化。網絡問題錯綜復雜,網絡錯誤有可能發生在網絡連接里面的每一個節點,解決網絡錯誤問題需要客戶端開發人員、服務端開發人員、運維人員等共同排查解決問題。