背景:有些公司 App 安装量大概几十万。每日日活几万左右。经常会有用户跟我们的客服反馈微信能正常使用,使用我们的 App 就会网络请求失败,或者界面没有数据显示。然后,我们的客服人员协助用户查看了网络也并未被禁用。服务器后端程序也并示收到请求。而我们测试也进行了多个版本进行测试都没有发现任何问题。
针对这个问题,我们进行了如下问题的排查:
1)服务端是否收到请求。
2)服务端是否程序出错,导致客户端数据解析失败。
3)检查用户手机是否打开 App 网络。
4)让用户杀掉系统后台运行的 App 进程。
5)让用户清掉 App 缓存(Android)。
6)让用户卸载重新安装 App。
如果是 App 确实存在一些逻辑上的小问题,通过如上 6 步操作基本上都能解决问题。但是,如果是网络引发的问题,无论如何都无法恢复正常使用。对于我们开发来说,这简直是一种灾难。你很难跟用户解释,毕竟微信可用,而我们的 App 不可用。会给用户造成我们的开发实力太过薄弱。
而我做为技术负责人,必须给用户一个交代,也要给我的领导一个交代。这个交代只能是解决它。
一、DNS(Domain Name System)
DNS(Domain Name System),中文译为:域名系统。
它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。简单来说,它就是一个将域名翻译成 IP 地址的系统。
这个 DNS 系统在全球目前仅有 13 个根节点。所谓根节点是指存储这些域名与 IP 映射数据的系统。由于一些历史原因,中国并没有 DNS 根点。仅有这 13 个根节点的镜像节点。
以上信息均来源于互联网资料。想了解更多资料,可以自行搜索。今天我们的主角是 HTTPDNS,这里就不多作赘述。
二、DNS 原理简述
所谓原理指的是我们访问一个域名开始以及请求到达服务器之间,DNS 在中间如何工作。
据网络上资料显示 DNS 是采用传输层 UDP 协议通信。为什么不采用 TCP 协议呢?如果采用 UDP 协议,只需要发送两个包(查询包、响应包)即可完成域名的解析工作。如果采用 TCP 协议,要完成域名解析工作至少要 9 个包。那么 13 个根服务器明显不够海量的域名解析服务。即使以国内目前设置的 DNS 镜像数量。也无法接受海量的域名解析服务。
这里原理就讲这么多,更多的原理细节这不里展开讲。之所以单独拎出来讲 UDP 协议。是因为跟我们后面所讲的 HTTPDNS 工作原理有关系。
三、HTTPDNS 介绍
为了解决文章开头所讲的因为 DNS 问题引发的网络问题。我们采用了国内阿里云提供的 HTTPDNS 服务。
HTTPDNS 特点:
防劫持:绕过运营商 Local DNS,避免域名劫持,让每一次访问都畅通无阻。
精准调试:基于访问的来源 IP,获得最精准的解析结果,让客户端就近接入业务节点。
低解析时延:通过热点域名预解析、缓存 DNS 解析结果、解析结果懒更新策略等方式实现 0 解析延迟。
快速生效:避免 Local DNS 不遵循权威 TTL,解析结果长时间无法更新的问题。
降低解析失败率:有效降低无线场景下解析失败的比率。
稳定可靠:99.9% 的可用性,确保域名解析服务稳定可靠。
因为我司所有的服务器以及相关的配置服务以及域名都是从阿里云购买。狭隘地认为阿里云 HTTPDNS 对自家的东西支持是最好的。
防劫持这个很重要。经常会发现运营商劫持页面的情况发生。曾经见过无数这种情况发生在我的眼前。
其次是 WIFI 场景下解析的失败率。上当前网络环境下,很多用户都使用的是 WIFI 网络。所以,WIFI 场景下的解析成功率很重要。
总而言之,言而总之。在客户端(Android/iOS)应用中使用 HTTPDNS 之后,网络的稳定性得到大幅度提升。至少,以后不再为网络问题而引发的种种问题而寝食难安。
顺便说一下,这个 HTTPDNS 集成到客户端非常简单。并且,还便宜。百万级别的 PV,几乎不用花钱。所以,推荐大家尽量接入 HTTPDNS,以解尔忧。
根据 HTTPDNS 介绍,淘宝与支付宝这两款应用都在使用。
四、HTTPDNS 原理
HTTPDNS 利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 LocalDNS,有效防止了域名劫持,提高域名解析效率。另外,由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。
传统的 DNS 解析是通过访问运营商 Local DNS 获得解析结果。这种方式容易引发域名劫持、域名解析错误、流量跨网等问题。 从而导致网站无法访问或访问缓慢。HTTPDNS 绕过运营商Local DNS,彻底解决域名劫持问题,并提供给用户精确快速的解析结果。
五、总结
网络问题复杂多样。能通过 HTTPDNS 解决一样少一样。这个世界对开发太过苛刻。我辈当互相勉励前行。