网络协议之传统DNS存在的问题以及httpdns - 详解

写在前面

传统的DNS虽然应用的非常广泛,但是也是存在一些疑问的,本文就来一起来看下,以及其解决方案http dns。

1:传统DNS存在的问题

1.1:域名缓存问题

用户某次访问时,可能已经有了距离用户更近的服务IP,但是因为还是使用缓存的那种服务IP(注意并不是不能用了),所以就无法拿到最优的那个IP了。

1.2:域名转发疑问

存在该困难的原因是,有些运营商,自己并不会取获取DNS信息,而是将这个工作转发到其他的运营商来做,而DNS服务器来返回IP地址时会根据当前请求者所在的运营商,优先返回同一个运营商的IP地址,这样访问的速度会更快,而因为中间转发了一次,因此,最终返回的IP地址就不一定和用户是同一个运营商了。如下:
在这里插入图片描述

1.3:NAT

域名转发,可能会造成返回非同一个运营商下IP的问题。

1.4:域名更新难题

传统的DNS服务器解析流程如下:
在这里插入图片描述
这里的域名更新问题,就出在本地DNS服务器上,这个本地DNS服务器,是网络所属的运营商提供的,是不受我们自己控制的,而不同的运营商提供的本地DNS服务器的质量也是参差不齐,所以,就会存在对缓存处理上的不足,比如明明已经过期了却还不重新请求(忽略TTL,一种不负责的做法),而源于这不是我们自己的服务,所以对此也无能为力。

1.5:解析延迟

传统的DNS服务器解析流程如下:
在这里插入图片描述
一层套一层,应该多个请求,对于延时比较敏感的应用不是很友好,甚至可能造成解析超时。

2:httpDNS

httpDNS就是搭建一个基于http协议的服务或者是服务集群,然后通过访问这些http服务来获取IP地址,而因为是自己的服务,所以对于过期时间,更新啥的都好说,而不用受制于运营商的本地DNS缓存。因为需要绕过默认的DNS解析流程,所以需要额外的SDK的支持。但这种方式目前主要还是使用在手机移动客户端,架构如下:
在这里插入图片描述
主要是缓存设计,和智能调度两部分。分别看下。

2.1:缓存

为了方便理解httpDNS缓存,来和应用架构的缓存做个对比:
在这里插入图片描述

  • 同步更新
    同步更新就是,倘若是本地缓存过期,则直接请求httpDNS服务器,对应到应用架构就是Cache-aside 机制,即先读缓存,缓存读不到再请求HTTP DNS服务,如下图:
    在这里插入图片描述
    这种方式好处是保证数据最新,坏处是对httpDNS服务器在过期那一刻,可能会存在并发访问,增加httpDNS服务器的压力,当然也是一种浪费。
  • 异步更新
    对应到应用架构缓存就是refresh-aside 机制,即借助异步的方式来更新缓存,好处是保证只有一个请求更新缓存,坏处是如果是更新不及时可能会读到过期的数据。如下图:
    在这里插入图片描述

2.2:智能调度

否存活(健康检测),为了能够综合处理这些信息,就必须智能调度这样的一个组件。当然HTTP DNS也需要开放接口来让用户对调度策略进行查看和管理,所以最终架构如下:就是为了能够保证返回最优的一个IP地址给客户端,需要综合考虑各方面的因素,除了距离之外,还要考虑,服务器响应速度(sdk上报),错误率(sdk上报),服务是
在这里插入图片描述

写在后面

参考文章列表

网络协议之DNS

posted on 2025-12-09 22:30  ljbguanli  阅读(0)  评论(0)    收藏  举报