移動應用APP的網絡優化三大重點方向即成功率、耗時與流量。其中,APP成功率即網絡請求成功率,他的重要性直接體現於它能直接決定APP服務的可用性,直接影響到視頻播放、廣告展示、支付便捷等服務質量。本文將介紹愛奇藝APP對網絡請求成功率優化的實踐之路。緩存
致使請求失敗的因素服務器
想要優化請求成功率先來了解移動端網絡請求全鏈條可能致使請求失敗的環節有哪些,這些環節每每由如下兩類因素致使:微信
第一類,不可改善因素網絡
iOS系統對APP的網絡訪問權限控制、飛行模式或者無網絡鏈接。檢測和識別這三種狀況,經過適當方式提示用戶。併發
路由器故障。app
第二類,能夠改善因素負載均衡
對於不可改善因素,目前只能經過網絡診斷識別出故障類型,引導用戶手動去受權訪問網絡或者鏈接可用網絡。其中,若是是路由器故障,能夠引導用戶重啓路由器或者切換4G。經過愛奇藝APP的數據監控,大體能夠看到用戶無網鏈接的時長佔比有3.8%左右,這說明提供好的無網提示變得十分重要,而從用戶使用蜂窩信號的弱信號(0格和1格信號)時長佔比有9%左右時長,也能夠看出移動端網絡環境的複雜性。curl
針對能夠改善的因素可大體分爲三類:tcp
爲了提升網絡請求成功率,首先須要創建監控體系,從而使得基線網絡庫可以經過網絡統計模塊向APM投遞各類維度的網絡請求數據。有了APM的數據統計後,纔能有效的發現致使端上網絡失敗的緣由,進而解決問題。除此以外,因爲端上網絡請求數據巨大,存儲空間的限制使得APM只能採樣2%的用戶,所以針對重點業務的網絡請求(好比首頁)則進行了全量採集,從而對成功率的優化實現更客觀全面的評估。工具
基線網絡庫針對不一樣業務手段
除了單個重試手段能夠重試屢次,基礎網絡庫也支持多種重試手段的組合,四種重試手段的優先次序爲IP直連重試>超級管道重試>HTTP重試>原URL重試。扣除無網狀況,首頁推薦頁CARD接口成功率經過組合重試在2020第一季度末達到了99.76%。
重試類型 |
成功率 |
備註 |
無重試 |
98.26% |
- |
HTTP重試 |
99.42% |
原始URL是HTTPs會被改成HTTP,減小SSL握手帶來的失敗可能。同時確保HTTP1.1協議 |
超級管道重試 |
99.55% |
超級管道是IP直連的HTTP請求,減小了DNS解析和SLL握手帶來的失敗可能。同時確保HTTP1.1協議。 |
2 * 超級管道重試 + HTTP重試 |
99.76% |
兩次超級管道,確保超級管道的異地容災能力被激活,HTTP重試是對超級管道的兜底策略。 |
網絡請求成功率因素
提升魯棒性並防止故障措施
在完成優化後,愛奇藝APP基礎網絡庫的構成以下:
統一網絡庫提供一個網絡接口層,全部業務接口都對接使用網絡接口層。
統一網絡庫提供一個網絡封裝層,對接了iOS系統網絡層NSURLSession、ASIHTTPRequest(基於CFNetwork)、和公司自研的長鏈接網關。
網絡統計模塊:將從業務調用開始到回調給業務方的各個環節的耗時及狀態值,變成統計數據,上傳到APM匯合。
網絡診斷模塊:對關鍵業務進行診斷,包括dns解析,ping,tcpconnect,trace等工具對具體IP進行分析,分析結果上傳到APM匯合。
弱網檢測模塊:經過借鑑Facebook的弱網檢測是基於網速擬合的網絡等級分級,分爲網絡狀況很是差(2G或者無網)、網絡狀況較差(3G)、網絡狀況通常、網絡狀況較好、網絡狀況很是好五個等級。
HTTPDNS模塊:有效的解決了運營商劫持問題。
超級管道重試:基於HTTP的網關代理,具備異地容災代理能力。
ipv4/ipv6模塊:識別端上是ipv4 only環境、v4/v6雙棧仍是ipv6 only環境。
複合鏈接模塊:能夠在server IP緩存池選出最佳IP,手段包括目標IP鏈接競速,IP歷史請求統計數據排序。
網絡日誌模塊:記錄了最近發生的失敗網絡請求詳細數據和網絡診斷數據。隨反饋一併提交,能夠便捷的排查線上網絡問題。
目標與優化措施
爲了持續優化網絡成功率,下一步目標是扣除無網狀況,重點業務成功率達到99.9%。後續考慮的優化措施以下:
Multipath
當Wifi假鏈接的時能夠走蜂窩流量,iOS9開始支持Multipath特性。
QUIC
QUIC是基於UDP的,因爲運營商對UDP有針對性的丟包,實測QUIC並無體現出優點。然而,考慮到libcurl在2019已提供完整QUIC能力,NSURLSession不久也會支持QUIC。隨着運營商對UDP包的干擾減小,QUIC的優點將獲得體現。
智能調度併發
更精準更靈敏的弱網識別,弱網下對關鍵核心業務進行傾斜。
HTTPDNS的push能力
HTTPDNS打通APM的質量監控體系後,經過push及時下線故障IP。
也許你還想了解2020愛奇藝卡通人物檢測識別挑戰賽,點擊「閱讀原文」,前往大賽通道!
掃一掃下方二維碼,更多精彩內容陪伴你!
本文分享自微信公衆號 - 愛奇藝技術產品團隊(iQIYI-TP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。