App网络优化是体验中很重要的一部分, 最近做了一些网络优化相关的工作, 想把最近的工作总结一下;

1. 分析app网络现状:

通过对最新版本最近一周的网络数据统计,

网络错误率中各项占比:

  • 未知主机: 1.33%

  • 请求超时: 0.33%

  • SSL证书错误: 0.13%

  • 建立连接失败: 0.23%

平均网络请求响应时间:

  • 1237ms

从数据看, 最高的网络错误来自于未知主机, 请求响应时长偏高;

然后通过各种更多维度的数据查看发现, 总结出了下面几个问题:

  • 慢请求中有很多是DNS时间超长, 最长的有几百秒
  • 错误请求中, DNS错误占比最高

当然,还有其他一些错误和响应时长的问题, 比如http错误, 需要通过错误码从业务方面解决; 请求连接时长,传输和处理时长, 这些可以通过服务端优化;本次哇们主要做的是DNS相关的优化

2.DNS如何优化

2.1 关于DNS原理简单介绍:

关于DNS的相关介绍:https://www.51cto.com/article/674906.html

传统的DNS解析:

  • 当开始 DNS 解析的时候,如果 LocalDNS 没有缓存,那就会向 LocalDNS 服务器请求(通常就是运营商),如果还是没有,就会一级一级的,从根域名查对应的顶级域名,再从顶级域名查权威域名服务器,最后通过权威域名服务器,获取具体域名对应的 IP 地址。

  • 传统DNS缺点: 不稳定(DNS服务器被劫持或故障), 访问慢

2.2 传统DNS替代

使用HttpDNS解析:

  • HttpDNS其实也是对DNS解析的另一种实现方式,只是将域名解析的协议由DNS协议换成了Http协议,并不复杂。使用HTTP协议向D+服务器的80端口进行请求,代替传统的DNS协议向DNS服务器的53端口进行请求,绕开了运营商的Local DNS,从而避免了使用运营商Local DNS造成的劫持和跨网问题;

HttpDNS核心是需要稳定且速度快的DNS服务器, 一般都是需要收费的;  目前有阿里DNS,腾讯云DNS等选择; (我没有尝试过收费的); 免费的有开源的七牛sdk, 需要自己配置服务器与连接方式;

  • 七牛开源地址:  https://github.com/qiniu/happy-dns-android
DnsManager dns;
if(DnsManager.needHttpDns()){IResolver[] resolvers = new IResolver[2];// dohResolver 需要配置一个支持 Doh(Dns over http) 协议的 urlresolvers[0] = new DnhResolver("https://dns.alidns.com/dns-query");resolvers[1] = AndroidDnsServer.defaultResolver(getContext());dns = new DnsManager(NetworkInfo.normal, resolvers);
}else{IResolver[] resolvers = new IResolver[2];resolvers[0] = AndroidDnsServer.defaultResolver(getContext());resolvers[1] = new DnsUdpResolver("8.8.8.8");dns = new DnsManager(NetworkInfo.normal, resolvers);
}

可支持httpDNS服务器解析(DnhResolver), 也支持自定义udp服务器(DnsUdpResolver);

对于我们项目来说, 目前没有速度快且稳定的httpDns服务器, 为了速度和成功率, 我们增加了udp服务器的配置,通过一些业务策略, 可以修改dns服务器的顺序以及数量, 然后通过观察对比选出较合适的服务器;

关于开放的dns服务器, 可以参考一下:

2022 国内外免费公共 DNS 服务推荐 - 知乎

3. DNS再次优化

3.1 上线分析

通过增加dns服务器解析兜底策略, 发现DNS的错误率降低了一半,颇具效果;  但是看另一个数据就不是那么乐观了, 网络请求响应时间也增加了近一倍; 这不是我们想看到的, 紧急关掉了配置, 网络又恢复了之前水平;

经过观察, 增加了时长都集中在DNS解析中; 经过本地测试, 系统的dns时长一般都在10ms内, 而三方的dns服务器时长在30~100ms, 这是在网络良好的情况下; 线上网络复杂的情况下, 这个差距肯定还会增大; 所以照这样看来, 系统dns解析还是所有dns的首选;

而且慢请求中, DNS解析有记录会超过几百秒, 但是项目中okhttp的超时时间connectTimeout已经设置了30s, 说明很遗憾, 这个超时对DNS没有作用; 也就是说 dns,没有超时时间;

3.2 解决方案

  1. 调整DNS服务器解析顺序, 将系统解析放在首位
  2. 设置DNS超时时间, 规避超长慢请求

经过两次的调整, 新版本上线后, 网络错误率下降了一倍, 响应时间也降低了30%; 目前还在观察中中, 后续持续优化中;

3.3 优化源码

关于DNS优化的源码, 可以参考https://download.csdn.net/download/qq_23992393/86819442​​​​​​

不足之处,请大佬指出;

Android客户端网络DNS优化实践相关推荐

  1. 百度APP移动端网络深度优化实践分享(一):DNS优化篇

    本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享 ...

  2. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半...

    本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...

  3. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. ...

  4. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半

    本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...

  5. 华为开发者大会主题演讲:抖音短视频网络性能优化实践

    内容来源:华为开发者大会2021 HMS Core 6 System技术论坛,主题演讲<抖音短视频网络性能优化实践>. 演讲嘉宾:卡涛,抖音Android架构师 大家好!我是来自字节跳动抖 ...

  6. android系统电量优化,基于Android系统网络耗电量优化方法的.pdf

    基于Android系统网络耗电量优化方法的 2012年第10期,第 45卷 通 信 技 术 Vol.45,No.10,2012 总第250期 Communications Technology No. ...

  7. af dns 刷新时间_APP网络优化之DNS优化实践

    一.前言 移动端APP网络优化是客户端技术优化方向中比较重要的一个方向之一,绝大多数APP都需要有网络请求这一步,大多数APP在发起请求之前第一步要做的事情就是DNS域名解析,只有将域名解析成正确的I ...

  8. APP网络优化之DNS优化实践

    黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Python开发 点击右侧关注,探讨技术话题! 作者丨每日优鲜大前端团队 链接: https://juejin ...

  9. 深度解读京东金融App(Android)的秒开优化实践

    一.启动优化项目背景 2018年京东数科成立中台部门,要求将公司各种技术沉淀复用,实现降本增效提质,京东数科mPaaS应运而生,解耦.组件化.能力提升改造等成为重要的工作之一,启动速度正是在中台大战略 ...

最新文章

  1. 设置让TortoiseGit记住账号和密码
  2. 皮一皮:考试了,全国统一舔狗学校招生考试!
  3. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
  4. 【数据平台】python语言NLP库Gensim初识
  5. HDU 1243 最长公共子序列 动态规划
  6. php 数据库 文件转移 1146 错误
  7. PointNet++详解与代码
  8. 【动态规划】多重背包
  9. Android 百度地图开发问题----解决地图有时候加载不出来问题
  10. 查找 --- Search Insert Position --- 图解
  11. Centos7.x 安装JDK、Jenkins、Jmeter、ant
  12. Spring Tool Suite环境搭建
  13. 电商产品设计:购物车管理
  14. php获取ip所有方式,php获取用户(客户端)真实IP地址的三种方法
  15. Android自定义View:带你了解神秘的MeasureSpec类
  16. 微波遥感原理(武汉大学出版社2003年6月30号 舒宁《微波遥感原理》)
  17. [蓝桥杯][算法提高VIP]盾神与砝码称重
  18. 使用OLED屏显示汉字
  19. 2021-11-17每日刷题打卡
  20. PyTorch多进程子进程瘫痪,解决办法

热门文章

  1. 大聪明教你学Java | 一文解决安全头部 X-Content-Type-Options 导致 jsonp 无法加载的问题
  2. 使用点九图在Android Studio中实现与Axure设计图一致的阴影效果
  3. 【电子电路】AO3401控制3.3V 5V电源电路
  4. nbiot mqtt调试-onenet注册BC20
  5. 拟合和预测的区别心得
  6. PYQT + ico图标制作
  7. 使用HttpClient登录微博开放平台,获取授权code
  8. 数字经济时代的开源数据库创新 | 2022开放原子全球开源峰会数据库分论坛圆满召开
  9. strtotime用法
  10. android贝塞尔曲线,一文解析 Android 贝塞尔曲线