推荐的超时设置策略是:首次请求的超时可以小一点,而重试的超时应该大一些。3. 接口请求过于密集并发可能降低请求成功率比如播放记录的upload接口在加上多次重试后,成功率仍然只有98.2%。APM监控此接口在IPv4环境失败率只有0.47%,而IPv6失败率高达7.07%。通过端上优化请求策略,降低接口的并发密度后,IPv6环境和IPv4环境同时提高到99.85%的成功率。4. 接口数据体积越小,请求成功率越高H2和HTTP1.1都是基于TCP连接的,接口数据体积越小,需要传输的TCP包越少,传输失败的概率也就降低了。目前爱奇艺APP正在从gzip转向压缩率更高的br。
提高鲁棒性并防止故障措施
在经过各种优化措施提高网络成功率后,我们还通过下面几个措施成功的防止线上故障造成的成功率瞬时下降,提高了网络请求的鲁棒性。1. 超级管道本身的鲁棒性下面案例显示使用了超级管道重试的接口错误率只有3.95%,而没有使用超级管道重试的接口错误率高达28.96%。这个案例的时间点还没有使用异地容灾IP,在叠加异地容灾IP之后,错误率曲线几乎可以抹平。
2. HTTP重试和原URL重试在v4v6双栈环境下,优先IPv4由于IPv6仍在建设中,有些接口在IPv6的表现弱于IPv4,那么可以指定重试走IPv4。3. TLS1.3– 1RTT的节省TLS1.3将SSL握手2个RTT降为1个RTT,降低了SSL握手失败的概率。iOS12.2开始,NSURLSession支持TLS1.3。只需要服务器升级支持TLS1.3即可,端上无须改动。4. IP复合连接竞速使用TCP连接测速,目的是剔除坏IP,选择最优IP,从而提高请求的成功概率。
经上述措施的持续优化,爱奇艺APP在2020Q1末,扣除无网情况后,业务成功率达到了99.7%,而网络层成功率达到了99.77%。
业务成功率 = 网络层成功率 HTTP响应成功率 解析成功率
在完成优化后,爱奇艺APP基础网络库的构成如下: