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网络监控与优化方案相关推荐

  1. 百络网警网络监控软件部署方案

    网络监控不仅仅是一种趋势也是生产力.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&q ...

  2. 局域网网络监控软件部署方案探讨

    计算机网络的普及应用已渗透到社会各个层面,给社会带来便利的同时也随之带来的安全和管理问题.互联网络是一把双刃剑:就如一个企业而言有些员工利用工作时间看新闻.玩游戏.干私活.聊天.泄密公司资料.炒股票. ...

  3. 【前端】移动端白屏问题及其优化方案

    很多无线端都使用前端模板进行数据渲染,在糟糕的网速情况下,一进去页面,看到的不是白屏就是 loading,这就是白屏问题. 此问题发生的原因基本可以归结为网速.静态资源. 1.css文件加载需要一些时 ...

  4. 射频传输线单端转差分模型的优化方案

    在高速pcb设计中,单端线.差分线是比较常用的传输线.我在pcb设计中,经常涉及到差分线转单端模型的绘制.本文设计一个单端线转差分线的模型,并进行优化.模型如下图: 左侧的两个端口为单端线端口,右侧的 ...

  5. 端到端的网络流量监控

    全面的网络监控 网络结构更加复杂,网络流量数据量更加庞大是当前网络环境发展的大趋势.网络可用性是企业工作的基础,因此必须对我们的网络进行全面的监控,以获得整个基础设施的可见性,帮助我们实时查看网络问题 ...

  6. kvm性能优化方案---cpu/内存/磁盘/网络

    kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...

  7. 数字网络监控系统解决方案1

    真正数字网络监控系统解决方案(全动态IP,局域网或广域网)   Post By:2004-9-11 12:05:00 数字网络监控系统解决方案 一.XM3216.NET系统特点近年来,网络信息业取得了 ...

  8. 【虹科】-网络监控协议总结

    网络监控协议的重要性 企业网络作为一个系统由众多组件组成,并且由于其功能的复杂性,可能无法立即观察到的某些组件而被忽视.在某些情况下,长期忽视此类组件可能会导致灾难性的网络性能问题.网络监控协议是存在 ...

  9. 爱奇艺移动端网络优化实践分享:网络请求成功率优化篇

    本文原始内容由爱奇艺技术产品团队原创分享,本次有修订和改动. 1.引言 由于移动网络的复杂性特点,编写高质量.体验好的具备网络通信能力的移动端应用(尤其是即时通讯这类网络质量高度敏感的应用)有很大的挑 ...

最新文章

  1. WdatePicker,js日期插件 ,时间相加
  2. Linux入门(7)——Ubuntu16.04安装wps并解决系统缺失字体问题
  3. 数据类型与数据传送指令
  4. msp430入门编程17
  5. 数据机房建设常用材料有哪些?
  6. 2021阿里云“API满意度”调研
  7. 请求参数绑定实体类型
  8. java Byte Stream and Character Stream的不同
  9. 咱们从头到尾讲一次 Flink 网络流控和反压剖析
  10. Python自然语言处理—停用词词典
  11. c++ IP地址离线查询
  12. Linux如何永久以命令行界面形式登录
  13. Java开发前景怎么样?值得学吗?
  14. 关于 无法打开chormdriver 因为无法验证开发者 的解决方案[已解决]
  15. 再说说TCP和UDP源端口的确定
  16. win系统进入mysql
  17. 读取文件路径中的图片
  18. RK3399 Android7.1修改系统串口设备的权限
  19. VC6.0實踐——sketchpad
  20. pkr车牌识别系统服务器,JAT-PKR-交安通PKR停车场车牌识别管理系统

热门文章

  1. 一个很有创意的DIY网站
  2. 糖尿病足最新研究成果进展(2021年)
  3. 51内核单片机实现Bootloader跳转到用户程序,要求两个程序都要支持中断
  4. 周鸿祎:把职业程序员进行到底
  5. Error:(5, 26) java: 程序包javax.servlet.http不存在
  6. 查看笔记本win自带的电池报告
  7. windows server 2012 r2 standard 通过堡垒机远程桌面服务器报错Remote Desktop Service CALs Request Failed
  8. 护卫神 mysql 升级_护卫神php套件 php版本升级方法(php5.5.24)
  9. JS+COOKIES实现健壮的购物车
  10. python去水印如何制作mask_浅谈图像处理中掩膜(mask)的意义