自建APM之网络优化

本文深入探讨了网络优化的各种维度,包括流量消耗监控、网络请求质量和流量优化策略。介绍了NetWorkProfiler、Charles和Stetho等网络诊断工具,并提出了精准获取流量消耗的方法,如使用TrafficStats和NetworkStatsManager。此外,文章还讨论了数据缓存、增量更新、协议版本升级以及HttpDNS优化等网络请求流量优化措施,旨在提升用户体验和降低成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络优化纬度

介绍

正确认识:
网络优化纬度:多维
仅仅重视流量不够
网络流量的消耗:精确
整体均值掩盖单点问题
网络相关监控:全面
粗粒度监控不能帮助我们发现、解决深层次的问题

纬度

流量消耗

  • 一段时间流量消耗的精准度量,网络类型、前台后台
  • 监控相关:用户流量消耗均值、异常率(消耗多、次数多)
  • 完整链路全部监控(Request、Response),主动上报
    网络请求质量
  • 用户体验:请求速度、成功率
  • 监控相关:请求时长、业务成功率、失败率、Top失败接口
    其它
  • 公司成本:带宽、服务器数、CDN
  • 手机耗电
误区

只关注流量消耗,忽略其他纬度
只关注均值、整体,忽略个体

网络优化工具选择

NetWorkProfiler

显示实时网络活动:发送、接收数据及连接
需要启用高级分析
只支持HttpURLConnection和OkHttp网络库

抓包工具

Charles(java开发,跨平台)

  • 断点功能
  • Map Local
  • 弱网环境模拟
    Fiddler
    Wireshark
    TcpDump
Stetho

强大的应用调试桥,连接Android和Chrome
网络监控、视图查看、数据库查看、命令行扩展等

使用:
com.facebook.stetho:stetho-okhttp3:1.5.0
Stetho.initializeWithDefaults(this);
addNetworkInterceptor
Chrome浏览器:chrome://inspect

精准获取流量消耗

线上线下流量获取
前台后台流量获取

问题思考

如何判断App流量消耗偏高

  • 绝对值看不出高低
  • 对比竞品,相同case对比流量消耗
  • 异常监控超过正常指标
测试方案
  • 设置----流量管理
  • 抓包工具:只允许本App联网
  • 可以解决大多数问题,但是线上场景线下可能遇不到
线上流量获取方案

TrafficStats:API18以上重启以来的流量数据统计
getUidRxBytes(int uid)指定Uid的接收流量
getTotalTxBytes()总发送流量

总结:
无法获取某个时间段内的流量消耗

NetworkStatsManager:API23之后的流量统计
可以获取指定时间间隔内的流量信息
可以获取不同网络类型下的消耗

前后台流量获取方案

难题:线上反馈App后台跑流量
只获取一个时间段的值不够全面

后台定时任务-》获取间隔内流量-》记录前后台-》分别计算
上报APM后台-》流量治理依据

总结:
有一定误差,可接受范围内
结合精细化的流量异常报警针对性的解决后台跑流量

网络请求流量优化

使用网络的场景

数据:Api、资源包(升级包、H5、RN)、配置信息
图片:下载、上传
监控:APM相关、单点问题相关

数据缓存

服务端返回加上过期时间,避免每次重新获取
节约流量大幅提升数据访问速度,更好的用户体验
OkHttp、Volley都有较好的实践

增量数据更新

加上版本的概念,只传输有变化的数据
配置信息、省市区县等更新

数据压缩

Post请求Body使用GZip压缩
请求头压缩
图片上传之前必须压缩

优化发送频率和时机

合并网络请求、减少请求次数
性能日志上报:批量+特定场景上报

图片相关

图片使用策略细化:优先缩略图
使用WebP格式图片

网络请求质量优化

质量指标

网络请求成功率
网络请求速度

Http请求过程
  • 请求到达运营商的Dns服务器并解析成对应的IP地址
  • 创建连接,根据IP地址找到对应的服务器,发起一个请求
  • 服务器找到对应的资源原路返回访问的用户
DNS相关
  • 问题:DNS被劫持、DNS解析慢
  • 方案:使用HttpDNS,绕过运营商域名解析过程
  • 优势:降低平均访问时长、提高连接成功率
协议版本升级

1.0:版本TCP连接不复用(slow start)
1.1:引入持久连接,但是数据通讯按次序进行
2:多工,客户端、服务器双向实时通信

网络请求质量监控

接口请求耗时、成功率、错误码
图片加载的每一步耗时

网络容灾机制

备用服务器分流
多次失败后一定时间内不进行请求,避免雪崩效应

其它

CDN加速、提高带宽、动静资源分离(更行后清理缓存)
减少传输量,注意请求时机及频率
OkHttp请求池

网络体系化方案建设

线下测试相关

方案:只抓单独App
侧重点:请求有误、多余,网络切换、弱网、无网测试

线上监控相关

服务端监控
请求耗时:地域、时间段、版本、机型
失败率(业务失败与请求失败)
Top失败接口、异常接口

客户端监控
接口的每一步详细信息(DNS、连接时间、请求、网络包大小)
请求次数、网络包大小、失败原因
图片监控

异常监控体系
服务器防刷:超限拒绝请求
客户端:大文件预警、异常兜底策略
单点问题追查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值