该文章来自阿里巴巴技术协会(ATA)
项目背景
AE无线用户面临的国际网络环境比国内还复杂,网络性能一直是一个瓶颈,为了给用户更快的体验,无线团队在双十一之后陆续做了许多性能优化,
其中针对网络性能的spdy网络改造也已经完成,从性能数据上看网络延迟减少30%到50%。
项目目标
从spdy协议多路并发、头部字典压缩、链路复用等优化来减少网络延迟,提升用户体验,分析性能数据做下一步的优化方向。
技术方案
标准spdy协议
双通道
我们目前api一部分需要加密传输(带accesstoken的api),一部分不需要(产品列表等),为了最大化优化效果,所以我们决定采用spdy over https 和 http双通道的方案。
降级策略
当spdy失败时,降级到HTTP协议,确保线上业务不受影响
1、全局配置降级 (服务端配置降级)
2、spdy链接失败降级(没网络的异常、有spdy成功记录的链接失败)
3、spdy不可用直接降级(链接失败记录超过5次且没有spdy成功记录)
预埋服务端配置逻辑
根据前轻后重的原则,预先在客户端埋下可配置的逻辑,包括:
(1)ssl 和non ssl 通道切换
(2)不可用直接降级的失败次数(无成功记录)
(3)直接降级失败次数(有成功记录)
(4)post 和get切换(get请求在spdy协议中比post请求少一帧数据,速度会快一些)
性能数据
网络耗时
链接复用次数
平均复用次数为15.5次
各api耗时情况,跑步进入1时代,实现无线1秒钟加载完毕的原则
spdy降级分析
从数据看大概1.5%的请求降级为http,大部分是网络问题(无网络、连接不上和超时)和spdy协议错误,后面稳定之后可以通过服务端配置提高不可用直接降级次数到10次,减少因为无网络导致后面直接降级的可能。
错误码3是除了中断异常、超时、协议错误之外的重试仍然失败。
李晔的实时监控数据,72、73为3.8.0和3.8.1支持spdy的版本
潘潘在GA上统计数据
3.7.3数据
3.8.0数据
后续优化方向
(1)限制一些非业务api的调用频率(如检查升级和获取配置信息、获取地址等)
(2)将一些特定api从post动态切换到get,提升速度
(3)增加链接保活时间,提高复用次数
(4)对一些业务数据做缓存
(5)对一些业务数据做预加载
(6)降低降级比例
(7)多IDC部署就近IP接入调度
(8)静态数据CDN加速