移动端APM网络监控与优化方案
01 背景
企业为了能够提升线上服务的可靠性和竞争力,需要从代码端的视角来监控自己线上应用的质量和性能,因此,APM系统(应用性能监控系统)应运而生。APM系统是互联网公司最重要的基础设施之一,它可以帮助发现并解决生产环境中遇到的各种问题。
APM系统为了能够实现帮助企业确保自身的IT支撑系统高效地运行,它需要建立一个强大的IT运维管理体系,用来时刻监控IT环境各组件的性能和质量,并且通过多维度实时分析监控指标的异常,快速定位并解决线上应用的问题。其中,网络环境质量是线上服务最基本的性能指标之一,网络耗时,网络请求错误率等指标极大地影响着线上应用的服务质量,APM系统应系统地建立起网络性能的监控。
在爱奇艺移动端APM系统上线之前,网络监控只是针对后端服务,因用户手机性能和网络环境复杂性相关,用户的真实使用体验和后台服务监控之间存在很大差异。因此,我们建立了一套基于用户层面的、实时、多维度的网络监控系统,并建立了针对端上的错误率、劫持率和网络性能的评估标准。经过多年的积累,爱奇艺移动端APM系统已经建立包括崩溃、网络、卡顿、日志、内存、图片等多项监控功能。
本文主要介绍移动端网络监控系统的建立及优化。
02 系统设计
根据移动端网络错误的特点,计算错误率时,将其划分为三类:
网络层错误
(错误发生在三次握手,SSL校验,数据传输过程中,如ConnectException)
HTTP响应错误
(服务端已明确返回错误码,如404)
解析错误
(服务端返回200,但数据格式有问题,导致前端无法正确解析)
由于重试机制的存在,我们只按照一组数据中的最后一次请求的结果,评判该次用户网络行为成功或者失败。
维度信息设计:
在后端存储的字段里,除了上述网络字段,还包括APM平台和用户设备的基础字段信息,这里就不一一赘述。
2.1 SDK设计
因端上网络请求频繁,数据采样需要考虑对手机性能影响的同时,也要保证数据的准确可分析,采样有如下措施可参考:
· 云控采样:云控下发采样指令,动态控制数据量;
· 合并压缩:缓存数据在达到时间或者数量的阈值时,进行批量压缩投递;
· 失败重投:投递失败的数据,会进行本地存储,下次启动尝试投递。
由于数据投递可能滞后,分析时可使用:端上发生时间和投递到达后端时间,利用两个时间戳分别进行分析。
2.2 后端设计
在后端系统设计中,需要支持高数据实时性、较大的存储数据量、灵活的查询和准确及时的报警。具体措施有:
· 实时性:秒级别
· 存储:支持千万级别数据量的搜索,聚合,TOP等
· 报警:分钟级别多维度报警, 通过邮件、短信、热聊、电话等形式通知责任人。
2.3 Web设计
Web展现错误率监控时,主要考虑是:
1. 快速查看整体状态
2. 查看所有业务错误数/错误率/请求数的top列表
3. 可分析具体原因
基于上述三个基本出发点,我们设计了首页,错误分布,占比详情,详情信息,耗时分析,劫持分析等页面
排查问题时,如果错误码集中,可以判断具体错误类型; 如果服务IP集中,可以判断出问题的服务器信息。
03 优化
网络监控和标准建立完成后,为了降低了网络错误率、劫持率和请求耗时等问题,又引入一些优化方案。
3.1 DNS优化
在HTTP协议里,DNS作用是解析出正确的IP地址,网络请求首先进行DNS解析,然后根据IP进行后续流程,所以,DNS的优化很关键。DNS优化主要从以下几个点考虑:
DNS劫持:在移动请求里,劫持指的是运营商DNS服务器被攻击,域名解析时返回了错误的IP地址,导致请求失败。
DNS TTL过长:TTL时间过长,可能导致两个问题:
1. 正常下线了某些服务器,运营商可能长时间未更新缓存。
2. 后台服务故障,需要及时更新服务器列表。
跨运营商:跨运营商可能导致访问慢。
LocalDNS获取失败:在网络较差或者特殊情况下,获取失败或者时间过长。
3.1.1 三层缓存
建立内存+网络请求+本地持久化的三层缓存机制。缓存都设置有一定的时效,内存缓存过期,使用网络请求;网络不通时,会使用本地的持久化缓存。
好处在于:
1. 快速获取域名DNS解析信息。
2. 网络较差或者获取LocalDNS失败时,可以从本地获取结果,进行尝试。
3. 可记录上次请求时,成功的IP,会记录其成功率和性能数据,下次重建连接,优先使用上次成功率较高,性能较好的IP。
3.1.2 HTTPDNS
HTTPDNS是业内比较完善DNS优化方案,通过HTTPS请求,主动去自己的基础平台拉取域名对应的IP信息,好处也显而易见。
防劫持:由于接口存在于自己后台,不存在运营商劫持问题。
高时效:如果后台服务IP有更新,可以立刻更新上线,解决了运营商TTL问题。
结果最优:HTTPDNS可以根据当前后台服务状况,选择最优的IP排序返回。
上线后,观察到劫持率下降了80%。
在使用HTTPDNS时,设计了降级方案,如果HTTPDNS不可用,会降级为LocalDNS,在时效性方面,设计有超时机制,并且在网络环境改变时,会主动更新。
3.2 弱网优化
移动端上网络环境复杂,用户随时可能处于弱网环境下,为了保证用户体验,需要在弱网环境下进行特殊优化。
3.2.1 弱网模型
首先,需要进行弱网判断,甄别出用户当前所处的网络状况。
计算标准:
网络流畅分级模型,参考了多个维度数据,包括上行/下行网速、请求失败率、网络延迟等。针对不同维度的因素,设置不同的阈值,综合多个网络因素等级,最终确认整体网络等级。目前策略里,只要有一个因素落在VERY_POOR,POOR区间,就认为是弱网环境。
等级划分:
根据网速值,划分为六个等级,网络状态会投递至后端,判断时,在value<=1,表示弱网。
3.2.2 弱网优化
在建立好弱网模型后,我们又进行了一系列的优化,包括:
Brotli压缩:Brotli相对Gzip压缩效率提高17-25%,不过由于其更耗服务端资源,前后台约定,会在弱网下使用Brotli压缩。
减小并发:网络库中,存在网络请求线程池,弱网下,减小并发数。
建立优先级:重要域名使用优先级更高线程池处理。
减少响应数据:对返回数据大小进行缩减,比如,页面相关的,减少分页数,减少card数。
3.3 网关方案
网关方案——通过后台一个中转服务,分发请求,端上所有请求都复用现有的长连接,相当于间接实现了域名收敛。
相对正常HTTP请求,其优势有:
1. 多域名连接共享,实现0RTT多路复用。
2. 避免了DNS解析,防止DNS劫持。
3. protobuf编码私有协议,节省流量。
在一个接口上A/B实验的结果看,平均请求耗时从595ms降低至371ms,成功率也有所提升。
网络架构图:
3.4 超级管道兜底
这是爱奇艺自研的一种基于HTTP/HTTPS IP直连的低成本高通用性的业务代理服务。能够赋予业务异地多活功能。
前端:通过一个统一的域名进行请求,使用该服务的请求,可以将其请求信息,作为参数拼接在统一的请求里。
后端:通过中转服务,将不同的请求分发,并且,会进行异地容灾分发,减小单个地区服务器故障造成的影响。
在一次线上故障中,使用超级管道的接口错误率是3.95%,未使用超级管道的错误率高达28.96%。
3.5 合理重试
对于用户而言,需要最终的成功结果,所以,请求失败后,内部进行重试是十分有必要的,合理的重试,可以有效降低错误率。
我们使用的重试策略有:
原样重试:业务方可配置重试次数,防止网络波动引起的请求失败。
HTTPS降级重试:如HTTPS降级为HTTP重试,防止SSLException导致的请求失败。
HTTP2.0降级重试:网络状况较好时,HTTP2.0多路复用,带来了性能上的优势,但在网络不稳定时,HTTP1.1错误率低于HTTP2.0。
IP直连重试:直接进行IP直连,防止域名解析导致的错误。
超级管道重试:利用超级管道,进行兜底重试,进行异地容灾,防止单个机房故障导致服务中断。
3.6 其他
竞速连接:对于重要域名,使用TCP连接进行测试,选择最优的IP。
TLS1.3:TLS1.3相较之前版本,由2RTT降低为1RTT,降低了SSL握手失败的概率。
连接优化:预建连接,连接重建,备用/复用连接。
04 成果
错误率下降趋势显著
爱奇艺APP的网络错误率,随着版本的持续优化,Android端错误率从最初5.3%,目前稳定在0.48%; IOS端错误率从最初4.63%,目前稳定在0.35%。
05 结尾
网络监控系统上线后,已在爱奇艺APP各端,随刻、电影票、奇秀等独立APP落地。经过多个部门的合作,使爱奇艺APP的网络错误率有了较大幅度下降,并建立了网络性能监控体系,为爱奇艺APP网络服务质量保驾护航。
网络监控解决了APP整体网络请求质量的监控问题,对于单个业务网络请求质量监控的问题,又引入了全链路监控,网络诊断,日志聚合等功能,同时和用户反馈平台打通,方便排查单用户反馈的问题。后续会继续完善全链路监控,以及引入QUIC等其他方案,优化爱奇艺APP网络请求质量,提高问题排查效率。
参考阅读:
你可能未曾使用的新 Java 特性
Java中9种常见的CMS GC问题分析与解决
江南白衣的2020架构师书单(上)
泛型和元编程的模型:Java, Go, Rust, Swift, D等
ARM环境下Java应用卡顿优化案例
APM时代的质量保障之路:腾讯互娱品质管理部性能负责人访谈
技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
高可用架构
改变互联网的构建方式
移动端APM网络监控与优化方案相关推荐
- 百络网警网络监控软件部署方案
网络监控不仅仅是一种趋势也是生产力.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&q ...
- 局域网网络监控软件部署方案探讨
计算机网络的普及应用已渗透到社会各个层面,给社会带来便利的同时也随之带来的安全和管理问题.互联网络是一把双刃剑:就如一个企业而言有些员工利用工作时间看新闻.玩游戏.干私活.聊天.泄密公司资料.炒股票. ...
- 【前端】移动端白屏问题及其优化方案
很多无线端都使用前端模板进行数据渲染,在糟糕的网速情况下,一进去页面,看到的不是白屏就是 loading,这就是白屏问题. 此问题发生的原因基本可以归结为网速.静态资源. 1.css文件加载需要一些时 ...
- 射频传输线单端转差分模型的优化方案
在高速pcb设计中,单端线.差分线是比较常用的传输线.我在pcb设计中,经常涉及到差分线转单端模型的绘制.本文设计一个单端线转差分线的模型,并进行优化.模型如下图: 左侧的两个端口为单端线端口,右侧的 ...
- 端到端的网络流量监控
全面的网络监控 网络结构更加复杂,网络流量数据量更加庞大是当前网络环境发展的大趋势.网络可用性是企业工作的基础,因此必须对我们的网络进行全面的监控,以获得整个基础设施的可见性,帮助我们实时查看网络问题 ...
- kvm性能优化方案---cpu/内存/磁盘/网络
kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...
- 数字网络监控系统解决方案1
真正数字网络监控系统解决方案(全动态IP,局域网或广域网) Post By:2004-9-11 12:05:00 数字网络监控系统解决方案 一.XM3216.NET系统特点近年来,网络信息业取得了 ...
- 【虹科】-网络监控协议总结
网络监控协议的重要性 企业网络作为一个系统由众多组件组成,并且由于其功能的复杂性,可能无法立即观察到的某些组件而被忽视.在某些情况下,长期忽视此类组件可能会导致灾难性的网络性能问题.网络监控协议是存在 ...
- 爱奇艺移动端网络优化实践分享:网络请求成功率优化篇
本文原始内容由爱奇艺技术产品团队原创分享,本次有修订和改动. 1.引言 由于移动网络的复杂性特点,编写高质量.体验好的具备网络通信能力的移动端应用(尤其是即时通讯这类网络质量高度敏感的应用)有很大的挑 ...
最新文章
- WdatePicker,js日期插件 ,时间相加
- Linux入门(7)——Ubuntu16.04安装wps并解决系统缺失字体问题
- 数据类型与数据传送指令
- msp430入门编程17
- 数据机房建设常用材料有哪些?
- 2021阿里云“API满意度”调研
- 请求参数绑定实体类型
- java Byte Stream and Character Stream的不同
- 咱们从头到尾讲一次 Flink 网络流控和反压剖析
- Python自然语言处理—停用词词典
- c++ IP地址离线查询
- Linux如何永久以命令行界面形式登录
- Java开发前景怎么样?值得学吗?
- 关于 无法打开chormdriver 因为无法验证开发者 的解决方案[已解决]
- 再说说TCP和UDP源端口的确定
- win系统进入mysql
- 读取文件路径中的图片
- RK3399 Android7.1修改系统串口设备的权限
- VC6.0實踐——sketchpad
- pkr车牌识别系统服务器,JAT-PKR-交安通PKR停车场车牌识别管理系统
热门文章
- 一个很有创意的DIY网站
- 糖尿病足最新研究成果进展(2021年)
- 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断
- 周鸿祎:把职业程序员进行到底
- Error:(5, 26) java: 程序包javax.servlet.http不存在
- 查看笔记本win自带的电池报告
- windows server 2012 r2 standard 通过堡垒机远程桌面服务器报错Remote Desktop Service CALs Request Failed
- 护卫神 mysql 升级_护卫神php套件 php版本升级方法(php5.5.24)
- JS+COOKIES实现健壮的购物车
- python去水印如何制作mask_浅谈图像处理中掩膜(mask)的意义