美文网首页iOS Developer程序员
DNS负载均衡,导致Android和iOS访问接口,导致导致时间

DNS负载均衡,导致Android和iOS访问接口,导致导致时间

作者: mdiep | 来源:发表于2016-12-28 23:05 被阅读919次

DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大

故事背景

在目前的公司中,同一款应用,iOS平台和Android平台,在访问相同的接口的时候,表现出很大的时间差异性。其中主要表现为在iOS平台上应用获取到数据紧紧只需要300ms左右。但是使用Android获取数据在30s-70s左右,但是奇怪的是,可能某一个时刻,Android平台的应用获取数据也能在300ms获取。如此不稳定,非常让人头疼

下图使用postman来模拟客户端网络请求,红色表明部分,使用时间为75s左右,对于如此长的时间,一般都已经超过了设置的超时时间了。

数据请求很慢的情况

模拟客户端发起网络请求-75s.png

数据请求正常的情况

Paste_Image.png

以上请求的是相同的接口,时间会相差很大。

发现问题端倪

这个问题困扰了我们Android工程师很久,经过多方面的努力。最后再一次数据处理抓包过程中,发现访问时间长和访问时间短的两次ip地址不一样。由此打开了一扇窗户

问题分析

  1. 使用nslookup分析DNS域名解析,如下图

    nslookup解析DNS.png

    不论是Windows下的Dos还是mac下bash,键入nslookup后输入你的域名,就可以看到域名解析出来的ip地址,一般而言,我们可以在地址栏中,使用ip替换域名直接访问对应的网址。有兴趣者可以解析百度的域名。

    • 重点是从图片可以看出,改域名解析出两个ip地址,然后如何能在终端中知道哪个ip地址可以快速访问,哪个不能呢?或者两个都可以快速的访问
  2. 使用telnet测试ip是否可以访问到接口服务端

    使用telnet测试是否访问到接口服务器.png
  3. 使用postman,通过使用ip替换域名验证访问效率

    使用终端中一致trying的ip替换域名,结果

    Paste_Image.png

    使用终端中可以访问通的ip替换域名,如下

    Paste_Image.png

综上多个测试,可以发现,导致Android上的应用访问慢是由于DNS域名解析,返回一个无效的ip地址导致的。经过多次测试,发现DNS解析出两个ip的顺序不是确定的,所以在Android应用中有时候快是因为android应用获取ip是至上而下的,所以当有效的ip是第一个获取的ip时候,android应用表现的则很快的得到了数据。反正,则不能

疑问

虽然是相同的接口,但是在iOS平台表现则良好。这无疑让人产生很大的疑问,为什么。

猜想

  1. 在iOS中,对DNS解析出来的两个ip地址同时发起请求,response优先选择可以访问通的。
  2. 通过查找资料,在iOS平台,对DNS解析做了缓存,而且清理缓存的时间周期为24小时,所以,可能只是某一次数据请求成功后,缓存了成功的ip地址到本地,然后每次请求都使用这个ip地址。

希望但是没有做到的

本希望搞清楚iOS平台是对DNS解析出多ip的情况是如何选择ip进行请求的。

希望可以打印出DNS解析的日志,以及接口请求选择ip的日志。这样就可以知道iOS选择的ip的工作原理了。

有知道希望告知方法,方案等,Th

喜欢请随意


DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大

相关文章

  • DNS负载均衡,导致Android和iOS访问接口,导致导致时间

    DNS负载均衡,导致Android和iOS访问接口,导致导致时间相差很大 故事背景 在目前的公司中,同一款应用,i...

  • 网络请求错误码

    502 DNS被屏蔽导致无法访问某些接口 VPN导致ipa包无法上传,无解。关闭VPN就可以了。

  • 亚马逊云的错误重试策略

    什么是错误重试策略 在网络请求中会遇到各式各样的错误,比如DNS服务、负载均衡等都有可能导致一次请求的失败,这些都...

  • 关于负载均衡的总结

    负载均衡的分类 常见的分为三类,dns负载均衡,硬件负载均衡,软件负载均衡 dns负载均衡 一般实现地域级别的负载...

  • Jdk8 DNS解析

    概述 最近在工作中遇到一个问题:我们后台有个接口,会访问外部接口;外部接口配置域名,通过智能DNS进行负载均衡,但...

  • CDN

    CDN过程: 访问CDN的DNS服务器, 得到了CDN的负载均衡服务器地址 程序访问负载均衡服务器, 得到了缓存服...

  • (一)会话保持导致负载均衡失效

    最近系统按要求迁移到了云平台上,这两天发现一个比较奇怪的现象。当用ELK分析应用日志时,发现集群的负载情况不符合预...

  • Spring Cloud升级之路 - Hoxton - 7. 后

    1. 修正实例列表乱序导致的负载均衡重试相同实例的问题 虽然之前考虑了通过每个请求的traceId隔离负载均衡的p...

  • Flutter--Insecure HTTP is not al

    原因:IOS和Android 9.0+对非HTTPS请求做了一些限制,不能直接访问Http请求或者其他原因导致 解...

  • nginx负载均衡配置

    使用宝塔很长时间了,导致很多原生的nginx的配置都搞忘记了。 恰逢需要原生安装和配置,特此记录: 1:负载均衡配...

网友评论

    本文标题:DNS负载均衡,导致Android和iOS访问接口,导致导致时间

    本文链接:https://www.haomeiwen.com/subject/kskuvttx.html