DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大
DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大
故事背景
在目前的公司中,同一款应用,iOS平台和Android平台,在访问相同的接口的时候,表现出很大的时间差异性。其中主要表现为在iOS平台上应用获取到数据紧紧只需要300ms左右。但是使用Android获取数据在30s-70s左右,但是奇怪的是,可能某一个时刻,Android平台的应用获取数据也能在300ms获取。如此不稳定,非常让人头疼
下图使用postman来模拟客户端网络请求,红色表明部分,使用时间为75s左右,对于如此长的时间,一般都已经超过了设置的超时时间了。
数据请求很慢的情况
模拟客户端发起网络请求-75s.png数据请求正常的情况
Paste_Image.png以上请求的是相同的接口,时间会相差很大。
发现问题端倪
这个问题困扰了我们Android工程师很久,经过多方面的努力。最后再一次数据处理抓包过程中,发现访问时间长和访问时间短的两次ip地址不一样。由此打开了一扇窗户
问题分析
-
使用
nslookup解析DNS.pngnslookup
分析DNS域名解析,如下图不论是Windows下的Dos还是mac下bash,键入
nslookup
后输入你的域名,就可以看到域名解析出来的ip地址,一般而言,我们可以在地址栏中,使用ip替换域名直接访问对应的网址。有兴趣者可以解析百度的域名。- 重点是从图片可以看出,改域名解析出两个ip地址,然后如何能在终端中知道哪个ip地址可以快速访问,哪个不能呢?或者两个都可以快速的访问
-
使用
使用telnet测试是否访问到接口服务器.pngtelnet
测试ip是否可以访问到接口服务端 -
使用postman,通过使用ip替换域名验证访问效率
使用终端中一致trying的ip替换域名,结果
Paste_Image.png使用终端中可以访问通的ip替换域名,如下
Paste_Image.png
综上多个测试,可以发现,导致Android上的应用访问慢是由于DNS域名解析,返回一个无效的ip地址导致的。经过多次测试,发现DNS解析出两个ip的顺序不是确定的,所以在Android应用中有时候快是因为android应用获取ip是至上而下的,所以当有效的ip是第一个获取的ip时候,android应用表现的则很快的得到了数据。反正,则不能
疑问
虽然是相同的接口,但是在iOS平台表现则良好。这无疑让人产生很大的疑问,为什么。
猜想
- 在iOS中,对DNS解析出来的两个ip地址同时发起请求,response优先选择可以访问通的。
- 通过查找资料,在iOS平台,对DNS解析做了缓存,而且清理缓存的时间周期为24小时,所以,可能只是某一次数据请求成功后,缓存了成功的ip地址到本地,然后每次请求都使用这个ip地址。
希望但是没有做到的
本希望搞清楚iOS平台是对DNS解析出多ip的情况是如何选择ip进行请求的。
希望可以打印出DNS解析的日志,以及接口请求选择ip的日志。这样就可以知道iOS选择的ip的工作原理了。
有知道希望告知方法,方案等,Th
喜欢请随意
图片发自App
更多相关文章
- Android之Http网络编程(二)
- Android(安卓)RxJava实际应用案例讲解:使用RxJava的最佳开发场景
- Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连
- Android(安卓)Q 带来哪些变化
- Android与电脑局域网共享之:Samba Server
- Android电量优化
- Android(安卓)简历
- Android用无线调试真机及在Eclipse的File Explorer中访问真机的D
- Android中获取手机IMEI,IMSI, MAC(Android(安卓)6.0、支持4G环境获