Android客户端网络DNS优化实践
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 解决方案
- 调整DNS服务器解析顺序, 将系统解析放在首位
- 设置DNS超时时间, 规避超长慢请求
经过两次的调整, 新版本上线后, 网络错误率下降了一倍, 响应时间也降低了30%; 目前还在观察中中, 后续持续优化中;
3.3 优化源码
关于DNS优化的源码, 可以参考https://download.csdn.net/download/qq_23992393/86819442
不足之处,请大佬指出;
Android客户端网络DNS优化实践相关推荐
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享 ...
- 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半...
本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. ...
- 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半
本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...
- 华为开发者大会主题演讲:抖音短视频网络性能优化实践
内容来源:华为开发者大会2021 HMS Core 6 System技术论坛,主题演讲<抖音短视频网络性能优化实践>. 演讲嘉宾:卡涛,抖音Android架构师 大家好!我是来自字节跳动抖 ...
- android系统电量优化,基于Android系统网络耗电量优化方法的.pdf
基于Android系统网络耗电量优化方法的 2012年第10期,第 45卷 通 信 技 术 Vol.45,No.10,2012 总第250期 Communications Technology No. ...
- af dns 刷新时间_APP网络优化之DNS优化实践
一.前言 移动端APP网络优化是客户端技术优化方向中比较重要的一个方向之一,绝大多数APP都需要有网络请求这一步,大多数APP在发起请求之前第一步要做的事情就是DNS域名解析,只有将域名解析成正确的I ...
- APP网络优化之DNS优化实践
黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Python开发 点击右侧关注,探讨技术话题! 作者丨每日优鲜大前端团队 链接: https://juejin ...
- 深度解读京东金融App(Android)的秒开优化实践
一.启动优化项目背景 2018年京东数科成立中台部门,要求将公司各种技术沉淀复用,实现降本增效提质,京东数科mPaaS应运而生,解耦.组件化.能力提升改造等成为重要的工作之一,启动速度正是在中台大战略 ...
最新文章
- 设置让TortoiseGit记住账号和密码
- 皮一皮:考试了,全国统一舔狗学校招生考试!
- 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
- 【数据平台】python语言NLP库Gensim初识
- HDU 1243 最长公共子序列 动态规划
- php 数据库 文件转移 1146 错误
- PointNet++详解与代码
- 【动态规划】多重背包
- Android 百度地图开发问题----解决地图有时候加载不出来问题
- 查找 --- Search Insert Position --- 图解
- Centos7.x 安装JDK、Jenkins、Jmeter、ant
- Spring Tool Suite环境搭建
- 电商产品设计:购物车管理
- php获取ip所有方式,php获取用户(客户端)真实IP地址的三种方法
- Android自定义View:带你了解神秘的MeasureSpec类
- 微波遥感原理(武汉大学出版社2003年6月30号 舒宁《微波遥感原理》)
- [蓝桥杯][算法提高VIP]盾神与砝码称重
- 使用OLED屏显示汉字
- 2021-11-17每日刷题打卡
- PyTorch多进程子进程瘫痪,解决办法
热门文章
- 大聪明教你学Java | 一文解决安全头部 X-Content-Type-Options 导致 jsonp 无法加载的问题
- 使用点九图在Android Studio中实现与Axure设计图一致的阴影效果
- 【电子电路】AO3401控制3.3V 5V电源电路
- nbiot mqtt调试-onenet注册BC20
- 拟合和预测的区别心得
- PYQT + ico图标制作
- 使用HttpClient登录微博开放平台,获取授权code
- 数字经济时代的开源数据库创新 | 2022开放原子全球开源峰会数据库分论坛圆满召开
- strtotime用法
- android贝塞尔曲线,一文解析 Android 贝塞尔曲线