高可用架构中的DNS

DNS简介

1.概念

DNS(Domain Name System,域名系统),DNS 服务用于在网络请求时,将域名转为 IP 地址。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。


7528671-a9d78c380494050f.png
image.png

2.解析机制

  • 递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。

  • 迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:你下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。


    7528671-28e82be6ce84859d.png
    image.png

由此可见,客户端到 Local DNS 服务器,Local DNS 与上级 DNS 服务器之间属于递归查询;DNS 服务器与根 DNS 服务器之前属于迭代查询。

传统DNS存在的问题

但凡使用域名来给用户提供服务的互联网企业,都或多或少地无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存、用户跨网访问缓慢等问题。那么对于腾讯这样的域名数量在10万级别的互联网公司来讲,域名解析异常的情况到底有多严重呢?每天腾讯的分布式域名解析监测系统在不停地对全国所有的重点LocalDNS进行探测,腾讯域名在全国各地的日解析异常量是已经超过了80万条。

1. 域名缓存导致的问题

域名缓存就是LocalDNS缓存了腾讯的域名的解析结果,不向权威DNS发起递归


7528671-609dcc4a558d54b9.png
image.png
  • 页面不能及时更新
    国内的各互联网接入运营商的带宽资源、网间结算费用、IDC机房分布、网内ICP资源分布等存在较大差异。为了保证网内用户的访问质量,同时减少跨网结算,运营商在网内搭建了内容缓存服务器,通过把域名强行指向内容缓存服务器的IP地址,就实现了把本地本网流量完全留在了本地的目的,这就导致了用户不能访问到实时页面,只是访问到了运营商提供的本地缓存。
    A、仅对80端口的http服务做了缓存,如果域名是通过https协议或其它端口提供服务的,用户访问就会出现失败。比如支付服务、游戏通过指定端口连接connect server服务等。
    B、缓存服务器的运维水平参差不齐,时有出现缓存服务器故障导致用户访问异常的问题。

  • 推送广告
    有部分LocalDNS会把部分域名解析结果的所指向的内容缓存,并替换成第三方广告联盟的广告。这就是我们经常在页面右下角看到的一些莫名广告,这些广告可能就是运营商添加进来的。(改用https协议可避免运营商推送广告)

2. LocalDNS解析转发导致用户被导向错误的IDC

除了域名缓存以外,运营商的LocalDNS还存在解析转发的现象。解析转发是指运营商自身不进行域名递归解析,而是把域名解析请求转发到其它运营商的递归DNS上的行为。

7528671-7c22cfbc178bfb70.png
image.png

而部分小运营商为了节省资源,就直接将解析请求转发到了其它运营的递归LocalDNS上去了。
这样的直接后果就是权威DNS收到的域名解析请求的来源IP就成了其它运营商的IP,最终导致用户流量被导向了错误的IDC,用户访问变慢。


7528671-4b68c472b2dd7577.png
image.png

3. LocalDNS递归出口NAT导致用户被导向了错误的IDC

LocalDNS递归出口NAT指的是运营商的LocalDNS按照标准的DNS协议进行递归,但是因为在网络上存在多出口且配置了目标路由NAT,结果导致LocalDNS最终进行递归解析的时候的出口IP就有概率不为本网的IP地址。
这样的直接后果就是GSLB DNS收到的域名解析请求的来源IP还是成了其它运营商的IP,最终导致用户流量被导向了错误的IDC,用户访问变慢。


7528671-0aec4d16757f487c.png
image.png

4. DNS劫持

传统的基于 UDP 协议的公共 DNS 服务极易发生 DNS 劫持,从而造成安全问题。

常规解决办法

1.实时监控+商务推动

  • 通过商务手段推动运营商解决上述问题;
  • 通过用户投诉本地运营商解决DNS问题;
    耗时并且效果一般。

2. 绕过自动分配DNS

使用114dns(114.114.114.114)或者google public dns(8.8.8.8)

  • 需要指导用户在PC、wifi移动端进行相应设置,存在门槛;
  • 修改移动互联网(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,能够精确定位客户端地理位置、运营商信息,从而有效改进调度精确性。

7528671-4579047f33cddf50.png
image.png

2. HttpDNS基本原理

HttpDNS的原理非常简单,主要有两步:
A、客户端直接访问HttpDNS接口,获取业务在域名配置管理系统上配置的访问延迟最优的IP。(基于容灾考虑,还是保留次选使用运营商LocalDNS解析域名的方式)
B、客户端获取到的IP后就直接往此IP发送业务协议请求。以Http请求为例,通过在header中指定host字段,向HttpDNS返回的IP发送标准的Http请求即可。


7528671-fd8e8aeff448fd44.jpg
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配置,管理成本也非常低。总而言之,就是以最小的改造成本,解决了业务遭受域名解析异常的问题,并满足业务精确流量调度的需求。


    7528671-75505cbd19311320.png
    image.png
  • 扩展性强:HttpDNS提供可靠的域名解析服务,业务可将自有调度逻辑与HttpDNS返回结果结合,实现更精细化的流量调度。比如指定版本的客户端连接请求的IP地址,指定网络类型的用户连接指定的IP地址等。

4. HttpDNS延伸

用户将首选的域名解析方式切换到了HttpDNS,那么HttpDNS的高可用又是如何保证的呢?另外不同运营商的用户访问到同一个HttpDNS的服务IP,用户的访问延迟如何保证?
为了保证高可用及提升用户体验,HttpDNS通过接入了腾讯公网交换平台的BGP Anycast网络,与全国多个主流运营商建立了BGP互联,保证了这些运营商的用户能够快速地访问到HttpDNS服务;另外HttpDNS在多个数据中心进行了部署,任意一个节点发生故障时均能无缝切换到备份节点,保证用户解析正常。

7528671-0669fe9c5ae56821.png
image.png

如果只有一个VIP(虚拟IP),即可以增加DNS记录的TTL,减少解析的延迟。
Anycast可以使用一个IP,将数据路由到最近的一组服务器,通过BGP宣告这个IP,但是这存在两个问题:

  • 如果某个节点承载过多的用户会过载
  • BGP路由计算可能会导致连接重置
    因此需要一个”稳定anycast“技术来实现。

转载于:https://www.jianshu.com/p/c945e427d788

猜你喜欢

转载自blog.csdn.net/weixin_34117522/article/details/91140661