HttpDNS 的一种简单实现思路

原创
2021/02/08 07:30
阅读数 107

互联网公司,基本都有针对DNS[1]域名解析的优化处理。有些公司甚至会构建自己的智能 DNS 解析系统,来解决 LocalDNS 存在的一系列问题[2],如域名劫持、调用精度和实时性等问题。

现如今,HttpDNS 已经成为一种比较常用的优化方案之一。HttpDNS 是基于 http 协议的具有 DNS 域名解析能力的一种服务。现在各大云厂商都已经构建了自己的 HttpDNS 服务。如阿里云 HttpDNS[3]腾讯云 HttpDNS[4]等。

HttpDNS 原理分析

HttpDNS 的原理非常简单:

  • 客户端将域名作为参数来访问 HttpDNS 的解析接口,HttpDNS 根据客户端 IP和请求的域名,经过一定的策略从「域名配置管理系统」中选择最优 IP 返回。若没有,则返回原域名,走运营商 LocalDNS 解析域名的方式;
  • 客户端再向获取到的 IP 发送业务协议请求即可。以 Http 请求为例,通过在 header 中指定 host 字段,向该 IP 发送标准的 Http 请求即可。

HttpDNS 将域名解析过程显式的体现了出来。绕过了 LocalDNS 的域名递归解析过程,这样就直接避免了 LocalDNS 的一系列问题。

通过 HttpDNS 原理,可以看出 HttpDNS 主要有两部分构成,高可用的Http API 服务和一个可高效查询的域名解析配置管理系统。前者主要用来提供Http Server的功能,后者负责域名解析和选优策略的管理。

HttpDNS 的一种简单实现思路

下面我们来探讨一种简单的实现方式,利用自己可控的 DNS 系统和 dig 命令来实现简单 HttpsDNS 服务。我用只需构建简单的Http Server服务,域名解析和策略管理交给DNS服务器。

大致思路如下:

  • 1、将域名和 ip 的配置在公司自建 DNS 或第三方的 DNS 系统配置好。可实现地区或运营商的动态调度解析。
  • 2、开发 Http Server 服务,用来提供域名查询服务接口。
  • 3、在 Http Server 服务接口业务逻辑中,拿到客户端的 IP,通过如下命令查询域名的解析 IP,返回该 IP 即可。
dig @ns服务器 要解析的域名 +subnet=客户端ip
dig @ns4.baidu.com.  baidu.com +subnet=112.80.248.64

该方式利用了 DNS 系统的动态调度功能和域名 IP 的管理功能,结合 Http Server 服务提供 Http 协议的 DNS 解析能力。绕过了 LocalDNS 的递归查询,解决了 DNS 劫持问题和精度问题。

该方式,只是一个简单的思路探索,其中还有很多细节的问题需要深究。DNS 解析是业务系统的一个强依赖服务,可用性和稳定性不容忽视。

好了,今天的分享就到这里,欢迎留言探讨!

我是 DeanWu,一个努力成为真正 SRE 的人。

关注公众号「码农吴先生」, 可第一时间获取最新文章。回复关键字「go」「python」获取我收集的学习资料,也可回复关键字「小二」,加我 wx 拉你进技术交流群,聊技术聊人生~

参考资料

[1]

DNS: https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F

[2]

一系列问题: http://www.52im.net/thread-2121-1-1.html

[3]

阿里云HttpDNS: https://help.aliyun.com/product/30100.html

[4]

腾讯云HttpDNS: https://cloud.tencent.com/product/hd


本文分享自微信公众号 - 码农吴先生(CoderMrWu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部
返回顶部
顶部