17 HTTPDNS详解

前情概要

  1. 我们知道 DNS 的两项功能,第一是根据名称查到具体的地址,另外一个是可以针对多个地址做负载均衡,而且可以在多个地址中选择一个距离你近的地方访问。
  2. 然而有时候,DNS也会出现偏差,没有指定离你近的ip,而指向了一个远处的ip。

一、本地的 DNS 服务器

传统 DNS 存在哪些问题?

1.请求会先连接到运营商本地的 DNS 服务器,但是本地的DNS会有自己的小九九

1. 域名缓存问题

它可以在本地做一个缓存,也就是说,不是每一个请求,它都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地,当其他人来问的时候,直接就返回这个缓存数据。

上述问题,如果本地缓存没有及时更新的话,则会出现问题。

有的运营商会把一些静态页面,缓存到本运营商的服务器内,这样用户请求的时候,就不用跨运营商进行访问,这样既加快了速度,也减少了运营商之间流量计算的成本。在域名解析的时候,不会将用户导向真正的网站,而是指向这个缓存的服务器

很多情况下是看不出问题的,但是当页面更新,用户会访问到老的页面,问题就出来了。

再就是本地的缓存,往往使得全局负载均衡失败,因为上次进行缓存的时候,缓存中的地址不一定是这次访问离客户最近的地方,如果把这个地址返回给客户,那肯定就会绕远路

2.域名转发问题

1.如果你是A运营商的客户,访问自己运营商的 DNS 服务器,如果 A 运营商去权威 DNS服务器查询的话,权威 DNS 服务器知道你是 A 运营商的,就返回给一个部署在 A 运营商的网站地址,这样针对相同运营商的访问,速度就会快很多。
2.但是 A 运营商偷懒,将解析的请求转发给 B 运营商,B 运营商去权威 DNS 服务器查询的话,权威服务
  器会误认为,你是 B 运营商的,那就返回给你一个在 B 运营商的网站地址吧,结果客户的每次访问都要跨运营商,速度就会很慢。

3.出口 NAT 问题

1.在网络出口的时候,很多机房都会配置NAT,也即网络地址转换,使得从这个网关出去的包,都换成新的 IP 地址。
2.请求返回的时候,在这个网关,再将 IP 地址转换回去,这对与请求响应来说是没有问题的。
3.一旦做了网络地址的转换,权威的 DNS 服务器,就没办法通过这个地址,来判断客户到底是来自哪个运营商,极有可能因为转换过后的地址,误判运营商,导致跨运营商的访问.

4. 域名更新问题

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

举例
双机房部署的时候,跨机房的负载均衡和容灾多使用 DNS 来做。当一个机房出问题之后,需要修改权威 DNS,将域名指向新的 IP 地址,但是如果更新太慢,那很多用户都会出现访问异常。

5. 解析延迟问题
从以上可知,DNS 的查询过程需要递归遍历多个 DNS 服务器,才能获得最终的解析结果,这会带来一定的时延,甚至会解析超时。

二、HTTPDNS 的工作模式

因为DNS域名解析存在这样那样的问题,所以就想着搭建自己的HTTP协议的DNS服务器集群。
什么是HTTPDNS?

1.HTTPNDS 其实就是,不走传统的 DNS 解析,而是自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商.
2.当客户端需要 DNS 解析的时候,直接通过 HTTP 协议进行请求这个服务器集群,得到就近的地址。
3.使用 HTTPDNS 需要绕过默认的 DNS 路径,就不能使用默认的客户端
4.使用 HTTPDNS 的,往往是手机应用,需要在手机端嵌入支持 HTTPDNS 的客户端 SDK

工作模式
我理解是跟原先的DNS域名的逻辑大致不差,只是自己搞了一套而已

1.在客户端的 SDK 里动态请求服务端,获取 HTTPDNS 服务器的 IP 列表,缓存到本地。随着不断地解析域名,SDK 也会在本地缓存 DNS 域名解析的结果.
2.当手机应用要访问一个地址的时候,首先看是否有本地的缓存,如果有就直接返回.
3.这个缓存和本地DNS 的缓存不一样的是,这个是手机应用自己做的,而非整个运营商统一做的。如何更新、何时更新,手机应用的客户端可以和服务器协调来做这件事情。
4.如果本地没有,就需要请求 HTTPDNS 的服务器,在本地 HTTPDNS 服务器的 IP 列表中,选择一个发出 HTTP 的请求,会返回一个要访问的网站的 IP 列表.
5.手机客户端自然知道手机在哪个运营商、哪个地址,由于是直接的 HTTP 通信,HTTPDNS 服务器能够准确知道这些信息,因而可以做精准的全局负载均衡。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值