彭 瀛,韦 凯,陈禹樵
(中移互联网有限公司云产品事业部 广东 广州 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证书错误。可能服务端证书过期或者服务器与客户端SSL/TLS版本不兼容,应该检查服务端证书的有效期,检查各个版本的安卓系统支持的协议版本是否和服务端支持的版本相匹配。
(3)未知主机。可能域名错误或者客户端DNS解释过程失败,应该检查域名是否可以被DNS服务器正确解释,优化客户端DNS解释模块,使用HttpDNS[3]等。
(4)请求超时、建立连接失败。可能客户端网络问题或者服务器性能问题,应该检查客户端发送请求时的网络状态,适当调整客户端网络请求框架参数,联系运维人员排查服务端是否存在性能问题。
(1)请求逻辑优化。减少不必要的网络请求,将多接口数据请求整合为单接口数据请求,单一数据上报整合为集中数据上报。
(2)网络环境判断。在网络请求前先判断当前网络状态,在网络状态良好的情况下再发起请求,如果当前网络状态不佳,网络请求不仅不会成功,还增加不必要的线程等资源开销,增加耗电量。
(3)并发机制优化。并发请求数量太多容易造成网络拥塞,应当减少同一时间网络请求的数量,需要控制网络请求线程的并发数量,根据网络状态动态调整并发数量大小,对于需要请求同一数据的业务,应当采用缓存机制减少请求次数。
(4)重试机制优化。频繁地进行网络重试会增加不必要的资源开销,重试间隔应该根据重试次数动态调整,在用户体验得到保障的前提下,尽量减少重试次数,减少重试失败的次数。
本文探讨了Android应用网络错误率的一些优化方案,从客户端开发人员的角度出发,通过网络数据采集、网络数据分析、制定实施方案3个过程实现应用的网络错误率优化。网络问题错综复杂,网络错误有可能发生在网络连接里面的每一个节点,解决网络错误问题需要客户端开发人员、服务端开发人员、运维人员等共同排查解决问题。