DNS 智能调度原理

今天来说说 Hostker&主机壳 的 DNS 是如何进行智能调度的,对 DNS 查询不太了解的读者请先阅读《DNS 查询全解》。首先来看一张图复习一下查询过程:

dns

智能解析

说到智能解析,用户首先想到的就是根据 IP 地址进行精确的调度。我们开发的 DNS 后端拥有按大洲、中国大陆省级(为什么不是市级稍后说)和运营商 3 个维度的调度能力,把 IP 段的数据整理后按顺序排列保存在内存中,收到解析请求后通过二分搜索算法匹配到调度规则,再按照规则返回解析结果,相比传统的文件 IP 库(类似纯真)性能更好。

截止本文编写时,我们的权威 DNS 已经覆盖中国大陆电信、联通、移动、BGP(包括教育网、铁通等)、日本、美国,基本可以保障亚欧美大部分地区半秒解析。

smartdns

调度坑

也许你会觉得,智能解析无非就是拿到了用户的 IP 地址,根据所在省份、城市进行调度就可以了。不过仔细看看上面的图,有没有发现一个问题?就是我们的权威服务器不可能拿到访客的精确 IP 地址。

在中国大陆,运营商一般是全省共用 2 组递归 DNS 服务,用的人越多缓存数据越多,用户体验就越好,但是又不能太远,因此通常是省级为单位。所以我们在做智能解析的时候,面对中国大陆这一情况,只能精确到省级进行调度。这是所有的 DNS 服务商都无法解决的问题。

※ 针对无法市级或者更精确的调度这一问题,在业务配合的情况下可以《使用 HTTPDNS 进行更精确的 CDN 调度

edns-client-subnet

Google 在提供公共递归 DNS 8.8.8.8/8.8.4.4 的时候,虽然可以做到全球任播来尽量将自己的出口 IP 靠近真实访客,但是一个个地区部署节点成本还是非常惊人,而且调度效果并不好。因此 Google 设计了一个协议 EDNS0(edns-client-subnet),允许递归服务器在查询包中加上访客的实际 IP 地址供权威服务器精准调度。

在 2013 年,EDNS 还不是很流行,国内访问 8.8.8.8 和 OpenDNS 这两个先驱的速度也还行,但是需要申请合作才可以支持。Hostker 的 DNS 在那时候已经实现了 edns-client-subnet 支持,并且申请了 Google、OpenDNS 两家公共递归 edns-client-subnet 的合作,实现了访客的精确调度,避免中国大陆使用他们的访客被调度到美国节点。

递归服务器的建议

任播是一个神奇的技术,可以让不同地区的访客在访问一个 IP 时访问到距离自己最近的服务器上。但是鉴于中国国情(不让一般企业做任播),目前只有腾讯(119.29.29.29)和阿里(223.5.5.5)的递归服务实现了任播,可以把自己的出口 IP 尽可能的接近访客以便于权威服务器精确调度。

使用非常广泛的 114DNS 还没有做到任播,他们在南京,全国使用都会调度到华东地区,因此我们不建议用户使用 114,而是上述两个。 有用户评论告知我们 114DNS 已经有任播,通过路由跟踪发现,114DNS 并没有启用任播,而是将全国的请求统一发送至南京节点,再由该地转发到全国各地的服务器进行出口。因此实际使用质量不如任播。

递归服务器出口 IP 查看

※ 认真看到这里的小伙伴送给你一个小工具!

我们在开发 DNS 的时候,预留了 ip.smartgslb.com 域名供用户检测递归服务器访问权威服务器时使用的真实出口 IP。由于递归服务器通常只有 2 个 IP,后端其实对应了多台服务器,因此出口 IP 往往与用户设置的 IP 不同。

另外如果递归 DNS 支持 EDNS0,在查询的时候用户就不会看到递归服务器的出口 IP 而是用户自己的 IP。这么设计是因为这是我们内部调试智能调度使用的,本意不是供用户查看递归出口 IP。

DNS 篇完结

DNS 主要部分到这里就完结了,接下来 DNS 分类只会聊点技术细节。

我们 CDN 篇见! ヾ( ̄▽ ̄)Bye~Bye~

《DNS 智能调度原理》上有5条评论

    1. 撰写本文的时候,他们还没有实现任播,全国使用114都会调度到江苏南京作为出口。本文今后会修改。

  1. “我们的权威服务器不可能拿到访客的精确 IP 地址。”
    你好,dnspod、cloudxns的自定义线路是什么原理?

    1. 通过获取递归 DNS 拿到的 IP 地址,运营商的递归 DNS 通常全省共用,因此只能获得所在省份和线路信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.