彭 瀛,韋 凱,陳禹樵
(中移互聯(lián)網(wǎng)有限公司云產(chǎn)品事業(yè)部 廣東 廣州 510000)
本文從客戶端開發(fā)人員的角度分析,探索Android應(yīng)用網(wǎng)絡(luò)錯誤率優(yōu)化方案。Android應(yīng)用的網(wǎng)絡(luò)錯誤率優(yōu)化主要經(jīng)過3個過程:網(wǎng)絡(luò)數(shù)據(jù)采集、網(wǎng)絡(luò)數(shù)據(jù)分析、制定實施方案。
Android應(yīng)用可以通過接入聽云SDK實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)采集。聽云平臺是國內(nèi)權(quán)威的應(yīng)用性能監(jiān)控平臺之一,基于真實用戶的數(shù)據(jù)基礎(chǔ),實現(xiàn)網(wǎng)絡(luò)性能監(jiān)控和問題定位,幫助開發(fā)者更精準(zhǔn)、有效地進(jìn)行性能優(yōu)化[1]。
聽云SDK通過虛擬機(jī)技術(shù)在應(yīng)用打包編譯過程中對特定的網(wǎng)絡(luò)請求方法嵌碼,實現(xiàn)對應(yīng)用采樣點的數(shù)據(jù)采集。嵌碼操作會在指定方法前后部署聽云SDK探針(圖1),整個過程不會對業(yè)務(wù)邏輯產(chǎn)生改變。聽云SDK在Android端支持常見的網(wǎng)絡(luò)請求框架,包括HttpURLConnection、HttpClient、Volley、OkHttp、Retrofit等[2],并且支持WebView和X5WebView。
圖1 聽云SDK通過嵌碼實現(xiàn)數(shù)據(jù)采集原理
集成SDK后,當(dāng)應(yīng)用發(fā)起網(wǎng)絡(luò)請求時,SDK探針就會采集網(wǎng)絡(luò)數(shù)據(jù)并上傳到服務(wù)器整理,最后以報表形式展現(xiàn),包括網(wǎng)絡(luò)錯誤率、錯誤追蹤列表、錯誤詳情、應(yīng)用響應(yīng)時間、DNS解析時間、TCP建立連接時間、SSL握手時間、首包時間、剩余包時間、訪問量等信息。
在網(wǎng)絡(luò)請求模塊中,聽云支持按照響應(yīng)時間、吞吐率、響應(yīng)時間耗時、平均傳輸數(shù)據(jù)量4種維度對所有主機(jī)的性能進(jìn)行排序(圖2)。響應(yīng)時間是選定時間內(nèi)平均響應(yīng)時間,吞吐率是平均每分鐘的HTTP請求數(shù)量,響應(yīng)時間耗時是選定時間內(nèi)的累計響應(yīng)時長,平均傳輸數(shù)據(jù)量是選定時間內(nèi)數(shù)據(jù)傳輸?shù)木怠?/p>
圖2 服務(wù)器主機(jī)性能排序
此外,還可以通過平均響應(yīng)時間的時間折線(圖3)和訪問吞吐率時間折線(圖4)來跟蹤服務(wù)的性能波動。
圖3 服務(wù)器主機(jī)平均響應(yīng)時間的時間曲線
圖4 服務(wù)器主機(jī)訪問吞吐率的時間曲線
在網(wǎng)絡(luò)錯誤模塊中,聽云支持按照主機(jī)錯誤率、HTTP錯誤類型、網(wǎng)絡(luò)錯誤類型3種維度分析,整理出類似錯誤追蹤列表(圖5)。從列表進(jìn)入類似錯誤追蹤頁面,可以看到相同類型錯誤的信息,包括錯誤類型、錯誤代碼、錯誤總數(shù)、URL、設(shè)備信息等。
圖5 類似錯誤追蹤
從類似錯誤追蹤頁面進(jìn)入錯誤詳情頁面(圖6),可以看到請求參數(shù)、調(diào)用堆棧、響應(yīng)頭、響應(yīng)內(nèi)容等更詳細(xì)的信息匯總,真實還原客戶端錯誤現(xiàn)場信息,精準(zhǔn)定位到發(fā)生錯誤代碼的位置。
圖6 網(wǎng)絡(luò)錯誤詳情
(1)HTTP 404錯誤??赡芊?wù)端資源缺失或者客戶端訪問地址有誤,應(yīng)該檢查服務(wù)端資源是否存在,檢查客戶端是否訪問已下線的資源或者訪問地址錯誤。
(2)SSL證書錯誤??赡芊?wù)端證書過期或者服務(wù)器與客戶端SSL/TLS版本不兼容,應(yīng)該檢查服務(wù)端證書的有效期,檢查各個版本的安卓系統(tǒng)支持的協(xié)議版本是否和服務(wù)端支持的版本相匹配。
(3)未知主機(jī)??赡苡蛎e誤或者客戶端DNS解釋過程失敗,應(yīng)該檢查域名是否可以被DNS服務(wù)器正確解釋,優(yōu)化客戶端DNS解釋模塊,使用HttpDNS[3]等。
(4)請求超時、建立連接失敗??赡芸蛻舳司W(wǎng)絡(luò)問題或者服務(wù)器性能問題,應(yīng)該檢查客戶端發(fā)送請求時的網(wǎng)絡(luò)狀態(tài),適當(dāng)調(diào)整客戶端網(wǎng)絡(luò)請求框架參數(shù),聯(lián)系運維人員排查服務(wù)端是否存在性能問題。
(1)請求邏輯優(yōu)化。減少不必要的網(wǎng)絡(luò)請求,將多接口數(shù)據(jù)請求整合為單接口數(shù)據(jù)請求,單一數(shù)據(jù)上報整合為集中數(shù)據(jù)上報。
(2)網(wǎng)絡(luò)環(huán)境判斷。在網(wǎng)絡(luò)請求前先判斷當(dāng)前網(wǎng)絡(luò)狀態(tài),在網(wǎng)絡(luò)狀態(tài)良好的情況下再發(fā)起請求,如果當(dāng)前網(wǎng)絡(luò)狀態(tài)不佳,網(wǎng)絡(luò)請求不僅不會成功,還增加不必要的線程等資源開銷,增加耗電量。
(3)并發(fā)機(jī)制優(yōu)化。并發(fā)請求數(shù)量太多容易造成網(wǎng)絡(luò)擁塞,應(yīng)當(dāng)減少同一時間網(wǎng)絡(luò)請求的數(shù)量,需要控制網(wǎng)絡(luò)請求線程的并發(fā)數(shù)量,根據(jù)網(wǎng)絡(luò)狀態(tài)動態(tài)調(diào)整并發(fā)數(shù)量大小,對于需要請求同一數(shù)據(jù)的業(yè)務(wù),應(yīng)當(dāng)采用緩存機(jī)制減少請求次數(shù)。
(4)重試機(jī)制優(yōu)化。頻繁地進(jìn)行網(wǎng)絡(luò)重試會增加不必要的資源開銷,重試間隔應(yīng)該根據(jù)重試次數(shù)動態(tài)調(diào)整,在用戶體驗得到保障的前提下,盡量減少重試次數(shù),減少重試失敗的次數(shù)。
本文探討了Android應(yīng)用網(wǎng)絡(luò)錯誤率的一些優(yōu)化方案,從客戶端開發(fā)人員的角度出發(fā),通過網(wǎng)絡(luò)數(shù)據(jù)采集、網(wǎng)絡(luò)數(shù)據(jù)分析、制定實施方案3個過程實現(xiàn)應(yīng)用的網(wǎng)絡(luò)錯誤率優(yōu)化。網(wǎng)絡(luò)問題錯綜復(fù)雜,網(wǎng)絡(luò)錯誤有可能發(fā)生在網(wǎng)絡(luò)連接里面的每一個節(jié)點,解決網(wǎng)絡(luò)錯誤問題需要客戶端開發(fā)人員、服務(wù)端開發(fā)人員、運維人員等共同排查解決問題。