DNS 简介
1. 概念
DNS(Domain Name System, 域名系统),DNS 服务用于在网络请求时, 将域名转为 IP 地址. 因特网上作为域名和 IP 地址相互映射的一个分布式数据库, 能够使用户更方便的访问互联网, 而不用去记住能够被机器直接读取的 IP 数串.
image.PNG
2. 解析机制
递归查询: 如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址, 那么本地域名服务器就以 DNS 客户的身份, 向其他根域名服务器继续发出查询请求报文, 而不是让该主机自己进行下一步的查询.
迭代查询: 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时, 要么给出所要查询的 IP 地址, 要么告诉本地域名服务器: 你下一步应当向哪一个域名服务器进行查询. 然后让本地域名服务器进行后续的查询, 而不是替本地域名服务器进行后续的查询.
image.PNG
由此可见, 客户端到 Local DNS 服务器, Local DNS 与上级 DNS 服务器之间属于递归查询; DNS 服务器与根 DNS 服务器之前属于迭代查询.
传统 DNS 存在的问题
但凡使用域名来给用户提供服务的互联网企业, 都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存, 用户跨网访问缓慢等问题. 那么对于腾讯这样的域名数量在 10 万级别的互联网公司来讲, 域名解析异常的情况到底有多严重呢? 每天腾讯的分布式域名解析监测系统在不停地对全国所有的重点 LocalDNS 进行探测, 腾讯域名在全国各地的日解析异常量是已经超过了 80 万条.
1. 域名缓存导致的问题
域名缓存就是 LocalDNS 缓存了腾讯的域名的解析结果, 不向权威 DNS 发起递归
image.PNG
页面不能及时更新
国内的各互联网接入运营商的带宽资源, 网间结算费用, IDC 机房分布, 网内 ICP 资源分布等存在较大差异. 为了保证网内用户的访问质量, 同时减少跨网结算, 运营商在网内搭建了内容缓存服务器, 通过把域名强行指向内容缓存服务器的 IP 地址, 就实现了把本地本网流量完全留在了本地的目的, 这就导致了用户不能访问到实时页面, 只是访问到了运营商提供的本地缓存.
A, 仅对 80 端口的 http 服务做了缓存, 如果域名是通过 https 协议或其它端口提供服务的, 用户访问就会出现失败. 比如支付服务, 游戏通过指定端口连接 connect server 服务等.
B, 缓存服务器的运维水平参差不齐, 时有出现缓存服务器故障导致用户访问异常的问题.
推送广告
有部分 LocalDNS 会把部分域名解析结果的所指向的内容缓存, 并替换成第三方广告联盟的广告. 这就是我们经常在页面右下角看到的一些莫名广告, 这些广告可能就是运营商添加进来的.(改用 https 协议可避免运营商推送广告)
2. LocalDNS 解析转发导致用户被导向错误的 IDC
除了域名缓存以外, 运营商的 LocalDNS 还存在解析转发的现象. 解析转发是指运营商自身不进行域名递归解析, 而是把域名解析请求转发到其它运营商的递归 DNS 上的行为.
image.PNG
而部分小运营商为了节省资源, 就直接将解析请求转发到了其它运营的递归 LocalDNS 上去了.
这样的直接后果就是权威 DNS 收到的域名解析请求的来源 IP 就成了其它运营商的 IP, 最终导致用户流量被导向了错误的 IDC, 用户访问变慢.
image.PNG
3. LocalDNS 递归出口 NAT 导致用户被导向了错误的 IDC
LocalDNS 递归出口 NAT 指的是运营商的 LocalDNS 按照标准的 DNS 协议进行递归, 但是因为在网络上存在多出口且配置了目标路由 NAT, 结果导致 LocalDNS 最终进行递归解析的时候的出口 IP 就有概率不为本网的 IP 地址.
这样的直接后果就是 GSLB DNS 收到的域名解析请求的来源 IP 还是成了其它运营商的 IP, 最终导致用户流量被导向了错误的 IDC, 用户访问变慢.
image.PNG
4. DNS 劫持
传统的基于 UDP 协议的公共 DNS 服务极易发生 DNS 劫持, 从而造成安全问题.
常规解决办法
1. 实时监控 + 商务推动
通过商务手段推动运营商解决上述问题;
通过用户投诉本地运营商解决 DNS 问题;
耗时并且效果一般.
2. 绕过自动分配 DNS
使用 114dns(114.114.114.114)或者 google public dns(8.8.8.8)
需要指导用户在 PC,Wi-Fi 移动端进行相应设置, 存在门槛;
修改移动互联网 (3G,4G) 环境的 DNS 配置, 难度很高;
3. 完全抛弃域名, 自建 connectcenter 进行流量调度
需要自建 serverlist 列表, 下发 IP 对应 IP 地址.
如果要采用这种这种方案的话, 首先你就得要拿到一份准确的 IP 地址库来判断用户的归属, 然后再制定个协议搭个 connect center 来做调度, 然后再对接入层做调度改造. 这种方案和第 2 种方案一样, 不是不能做, 只是成本会比较高, 尤其对于腾讯这种业务规模如此庞大的公司而言.
移动互联网的 HttpDNS 解决方案
1. HttpDNS 简介
腾讯公司的 GSLB 团队推出了一种全新的域名解析调度系统: HttpDNS.HttpDNS 是为移动客户端量身定做的基于 Http 协议和域名解析的流量调度解决方案, 专治 LocalDNS 解析异常以及流量调度不准. HttpDNS 利用 HTTP 协议与 DNS 服务器交互, 代替了传统的基于 UDP 协议的 DNS 交互, 绕开了运营商的 Local DNS, 有效防止了域名劫持, 提高域名解析效率. 另外, 由于 DNS 服务器端获取的是真实客户端 IP 而非 Local DNS 的 IP, 能够精确定位客户端地理位置, 运营商信息, 从而有效改进调度精确性.
image.PNG
2. HttpDNS 基本原理
HttpDNS 的原理非常简单, 主要有两步:
A, 客户端直接访问 HttpDNS 接口, 获取业务在域名配置管理系统上配置的访问延迟最优的 IP.(基于容灾考虑, 还是保留次选使用运营商 LocalDNS 解析域名的方式)
B, 客户端获取到的 IP 后就直接往此 IP 发送业务协议请求. 以 Http 请求为例, 通过在 header 中指定 host 字段, 向 HttpDNS 返回的 IP 发送标准的 Http 请求即可.
HttpDNS
3. HttpDNS 优势
从原理上来讲, HttpDNS 只是将域名解析的协议由 DNS 协议换成了 Http 协议, 并不复杂. 但是这一微小的转换, 却带来了无数的收益:
根治域名解析异常: 由于绕过了运营商的 LocalDNS, 用户解析域名的请求通过 Http 协议直接透传到了腾讯的 HttpDNS 服务器 IP 上, 用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰.
LocalDNS 劫持: 由于 HttpDNS 是通过 ip 直接请求 http 获取服务器 A 记录地址, 不存在向本地运营商询问 domain 解析过程, 所以从根本避免了劫持问题.
平均访问延迟下降: 由于是 ip 直接访问省掉了一次 domain 解析过程.
用户连接失败率下降:
通过算法降低以往失败率过高的服务器排序, 通过时间近期访问过的数据提高服务器排序, 通过历史访问成功记录提高服务器排序.
调度精准: HttpDNS 能直接获取到用户 IP, 通过结合腾讯自有专利技术生成的 IP 地址库以及测速系统, 可以保证将用户引导的访问最快的 IDC 节点上.
实现成本低廉: 接入 HttpDNS 的业务仅需要对客户端接入层做少量改造, 无需用户手机进行 root 或越狱; 而且由于 Http 协议请求构造非常简单, 兼容各版本的移动操作系统更不成问题; 另外 HttpDNS 的后端配置完全复用现有权威 DNS 配置, 管理成本也非常低. 总而言之, 就是以最小的改造成本, 解决了业务遭受域名解析异常的问题, 并满足业务精确流量调度的需求.
image.PNG
扩展性强: HttpDNS 提供可靠的域名解析服务, 业务可将自有调度逻辑与 HttpDNS 返回结果结合, 实现更精细化的流量调度. 比如指定版本的客户端连接请求的 IP 地址, 指定网络类型的用户连接指定的 IP 地址等.
4. HttpDNS 延伸
用户将首选的域名解析方式切换到了 HttpDNS, 那么 HttpDNS 的高可用又是如何保证的呢? 另外不同运营商的用户访问到同一个 HttpDNS 的服务 IP, 用户的访问延迟如何保证?
为了保证高可用及提升用户体验, HttpDNS 通过接入了腾讯公网交换平台的 BGP Anycast 网络, 与全国多个主流运营商建立了 BGP 互联, 保证了这些运营商的用户能够快速地访问到 HttpDNS 服务; 另外 HttpDNS 在多个数据中心进行了部署, 任意一个节点发生故障时均能无缝切换到备份节点, 保证用户解析正常.
image.PNG
如果只有一个 VIP(虚拟 IP), 即可以增加 DNS 记录的 TTL, 减少解析的延迟.
Anycast 可以使用一个 IP, 将数据路由到最近的一组服务器, 通过 BGP 宣告这个 IP, 但是这存在两个问题:
如果某个节点承载过多的用户会过载
BGP 路由计算可能会导致连接重置
因此需要一个 "稳定 anycast" 技术来实现.
来源: http://www.jianshu.com/p/c945e427d788