趣谈网络协议——HTTPDNS

DNS功能

(1)根据名称查到具体的地址;
(2)可以针对多个地址做负载均衡,而且可以在多个地址中选择一个距离你近的地方访问。

传统DNS存在的问题

(1)域名缓存问题:

  • 缓存失效问题
  • 静态页面缓存在本运营商服务器内,不需要到真正缓存服务器访问
  • 缓存数据不是最新数据
  • 本次缓存内容不是距离用户最近的

(2)域名转发问题

  • 域名查询是逐层递归的,有可能在递归过程中产生跨运营商的问题

(3)出口NAT(网络地址转换)问题

  • 使用网络地址转换后IP地址会发生变化,权威的DNS服务器无法通过IP地址判断客户端运营商,导致跨运营商访问。

(4)域名更新问题

  • 本地 DNS 服务器是由不同地区、不同运营商独立部署的。对域名解析缓存的处理上,实现策略也有区别,有的会偷懒,忽略域名解析结果的 TTL 时间限制,在权威 DNS 服务器解析变更的时候,解析结果在全网生效的周期非常漫长。但是有的时候,在DNS 的切换中,场景对生效时间要求比较高。

(5)解析延迟问题

  • DNS 的查询过程需要递归遍历多个 DNS 服务器,才能获得最终的解析结果,这会带来一定的时延,甚至会解析超时。

HTTPDNS工作模式

HTTPNDS 就是,不走传统的 DNS 解析,而是自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候,直接通过HTTP 协议进行请求这个服务器集群,得到就近的地址。

使用 HTTPDNS 需要绕过默认的 DNS 路径,就不能使用默认的客户端。使用 HTTPDNS 的,往往是手机应用,需要在手机端嵌入支持 HTTPDNS 的客户端 SDK。

在客户端的 SDK 里动态请求服务端,获取 HTTPDNS 服务器的 IP 列表,缓存到本地。随着不断地解析域名,SDK 也会在本地缓存 DNS 域名解析的结果。

(1)当手机应用要访问一个地址的时候,首先看是否有本地的缓存,如果有就直接返回。这个缓存和本地 DNS 的缓存不一样的是,这个是手机应用自己做的,而非整个运营商统一做的。如何更新、何时更新,手机应用的客户端可以和服务器协调来做这件事情。

(2)如果本地没有,就需要请求 HTTPDNS 的服务器,在本地 HTTPDNS 服务器的 IP 列表中,选择一个发出 HTTP 的请求,会返回一个要访问的网站的 IP 列表。
在这里插入图片描述
手机客户端自然知道手机在哪个运营商、哪个地址。由于是直接的 HTTP 通信,HTTPDNS服务器能够准确知道这些信息,因而可以做精准的全局负载均衡。

HTTPDNS缓存设计

传统DNS存在的问题
解析 DNS 过程复杂,通信次数多,对解析速度造成很大影响。为了加快解析,因而有了缓存,但是这又会产生缓存更新速度不及时的问题。
HTTPDNS解决方案
(1)解析的过程,不需要本地 DNS 服务递归的调用一大圈,一个 HTTP 的请求直接搞定,要实时更新的时候,马上就能起作用;
(2)为了提高解析速度,本地也有缓存,缓存是在客户端 SDK 维护的,过期时间、更新时间,都可以自己控制。

HTTPDNS同步解析

优点
实时性好
缺点
如果有多个请求都发现过期的时候,同时会请求HTTPDNS 多次,是一种浪费。

HTTPDNS异步解析

优点

  • 可以将多个请求都发现过期的情况,合并为一个对于 HTTPDNS 的请求任务,只执行一次,减少 HTTPDNS 的压力。
  • 在即将过期的时候,就创建一个任务进行预加载,防止过期之后再刷新,称为预加载。
    缺点
  • 当前请求拿到过期数据的时候,如果客户端允许使用过期数据,需要冒一次风险。如果过期的数据还能请求,就没问题;如果不能请求,则失败一次,等下次缓存更新后,再请求方能成功。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值