浅析DNS缓存技术及应用考虑

Posted 民生运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析DNS缓存技术及应用考虑相关的知识,希望对你有一定的参考价值。

请点击上方 “民生运维” 添加订阅!
浅析DNS缓存技术及应用考虑


01

引言


DNS技术在互联网得到了广泛应用,是一个相当成熟的网络技术,DNS 缓存为DNS技术中普遍使用的功能,在提升客户访问体验中发挥了重要作用,在实际配置使用过程中,DNS缓存使用不合理,可能会对客户体验及访问带来严重的影响。本文从DNS技术原理入手,结合应用实践重点描述了DNS缓存在实际应用中面临的问题及需要考虑的因素。


02

DNS域名解析过程


浅析DNS缓存技术及应用考虑

1. 当用户访问民生网站时,在WEB浏览器里输入www.cmbc.com.cn时,浏览器先检查是否有该网站的缓存(域名与IP的映射关系),有则直接使用访问,如果没有DNS请求发送到客户端解析器

2. 假设后续环节都没有缓存,解析器将DNS请求发送给运营商Local DNS服务器处理,运营商Local DNS依次向cn.、com.cn.、cmbc.com.cn.域名服务器发起迭代查询,并缓存查询结果,同时将结果返回给用户,实现业务访问。 

企业内网域名解析系统一般设计为一级(仅权威DNS服务器)或两级架构(包含本地DNS服务器和权威DNS服务器),不需要经过上述运营商多级域名迭代查询过程,其它解析过程与上述过程基本一致,客户端和本地DNS服务器同样可提供高速缓功能。


03

DNS缓存作用


高速缓存的缺点在于它需要消耗一定的系统资源,并增加了域名系统的复杂性。决定解析结果在高速缓存中保留多长时间是在DNS域名建设和维护时需要重点考虑的问题。如果缓存时间过短,则可能会导致产生多余的不必要的解析请求,如果缓存时间过长,则可能导致域名变更时客户访问恢复时间过长。


04

DNS缓存使用面临的问题


缓存技术在用户业务访问过程中起到了加速访问、提升用户体验的重要作用,若缓存设置使用不当,则可能给用户访问体验带来负面影响,甚至影响用户正常业务访问。缓存被使用在互联网非受控环境和内网相对可控环境,在不同的环境会面临不同的使用问题,下面来看看缓存在互联网和内网环境使用中可能会面临哪些问题。


互联网环境缓存应用面临的问题


在互联网环境,缓存存在于浏览器、操作系统、运营商Local DNS服务器,其中运营商Local DNS是最重要且最不受用户和网站管理员控制的一个环节,如果缓存值设置不合理,将直接影响用户访问,会给企业形象带来负面影响。对于网站管理员来说,互联网环境的缓存面临两大方面问题:

缓存刷新不受控:一般企业为实现线路冗余都会使用多家运营商,因此域名就会被缓存在多家运营商Local DNS服务器,当企业域名发生改变时,涉及Local DNS服务器众多,在当前环境下,管理员无法刷新运营商Local DNS服务器缓存,在缓存未超时的情况下,客户无法获取到正确的域名进行业务访问,只能等待Local DNS服务器缓存超时后才能解析到正确的域名,正常访问业务,此种情况可能严重影响客户体验,导致大量的客户投诉。

解析权和缓存值被修改:一些小运营商出于规模、节约成本的考虑,将域名转发到其他运营商进行解析,并把收到的域名缓存值更改为较长的值,这会带来两个方面的问题:

2)企业域名发生改变后将等待更长的超时时间才能正常访问业务;同样会给客户带来较差的体验。


企业内网缓存应用面临的问题


企业内网环境相对简单,通常情况下用户会直接向权威服务器发起域名解析请求,内网域名解析路径较互联网可控且环境稳定,无运营商递归查询环节,因此基本不存在不可控的三方服务器和缓存被修改的问题。

企业内网环境包括两类用户,一类为终端用户,例如柜员、业务管理人员、办公人员,这类用户使用电脑通过浏览器访问目标业务;另一类为生产系统,这类用户为服务器,通过应用软件访问目标业务。两类用户涉及的基础运行环境各不相同,缓存在使用中面临的问题也会有所不同。

生产系统面临的问题:为实现业务快速切换以及运维便利,企业生产系统之间也开始大力推广通过域名方式访问,但生产系统使用的操作系统、编程语言等各不相同。

我们针对常用的操作系统和JDK环境的DNS缓存行为进行了全面测试,具体包括了Suse12、AIX7.1、JDK1.6/1.7等常用版本,经过测试得出以下结论:

1) Suse操作系统默认不开启缓存,当开启缓存时,继承DNS记录的缓存值

2)AIX操作系统默认不开启缓存,当开启缓存时,不继承DNS记录的缓存值,继承操作系统本地配置的缓存超时时间

3)JDK默认开启缓存,不继承DNS记录的缓存值,遵循自身配置的超时时间

从以上实际测试结果可以看出不同的操作系统和JDK环境对DNS缓存的处理机制不一样。中间件如Weblogic、Tomcat建立链接时会调用JDK,业务在实际部署中,会根据需求选择不同的操作系统和中间件,例如Suse和AIX的操作系统都可以选择Weblogic或者Tomcat部署应用,不同的组合DNS缓存处理机制会不一样,从而对应用访问产生不同的影响。以Suse和AIX两类操作系统、中间件使用Weblogic为例,来看看缓存的影响:

浅析DNS缓存技术及应用考虑


05

DNS缓存在实际应用中的考虑


DNS缓存在使用中会面临缓存无法刷新、被修改以及缓存控制复杂等问题,无论在互联网还是内网,缓存设置不合理都将导致用户无法访问业务,影响用户体验,那么缓存设置就显得尤为重要,它在实际应用中应该如何考虑?

首先,哪些情况下域名会发生改变,从而出现影响用户访问的情况:

主动操作:由于系统新建迁移、灾备切换等有计划的变更操作

不同场景产生的影响时间以及紧迫程度有所不同,就有不同的考虑因素,下面针对不同的场景分别进行介绍。


1、主动操作之缓存考虑因素


针对主动操作的情况,有计划性,会有充足的时间准备,内网和互联网环境均可提前将域名对应的缓存值更改为更小的值,操作等待时间大于设置的缓存值即可,以确保递归服务器缓存了设置较小的TTL值,待操作完成后再更改回原有TTL值,无需人工干预。


2、被动操作之互联网缓存考虑因素


互联网用户直接面向运营商,面临的问题是无法刷新缓存和缓存值被修改,要解决域名更改后无法快速生效的问题,需要从运营商入手:


刷新运营商Local DNS缓存

当我行一条运营商线路故障时,这条线路对应业务DNS记录被用户及对应运营商Local DNS服务器缓存,经了解,三大运营商正在开发刷新缓存的功能,电信和联通支持基于单个域名自助刷新全国对应Local DNS缓存,目前正处于测试阶段,预计三分钟可以完成全国Local DNS缓存强制刷新;移动目前支持北京地区Local DNS缓存记录刷新,其他地区正在计划开发中。三大运营商都支持刷新缓存的情况下,将很大程度解决缓存生效慢的问题。但是一些小运营商不在合作范围内,目前仍然没有办法更新他们的缓存,可能会有少量地区客户仍然会有所影响。


避免缓存被修改

互联网环境最大的问题是Local DNS缓存,缓存时间被修改,有没有方式可以避开Local DNS?近几年HTTP DNS技术出现了,它是基于HTTP协议向HTTP DNS服务器发送域名解析请求,替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式,有效的避开了运营商Local DNS,就避免了缓存值被第三方修改。


HTTP DNS解析流程

浅析DNS缓存技术及应用考虑

1、客户端通过HTTP/HTTPS协议向HTTP DNS集群发起查询请求,携带用户域名和终端 IP

2、服务集群查询CDN内部调度系统,将域名最佳访问节点IP响应给客户端

3、客户端收到响应结果向节点发起请求

4、客户端拿到最优IP后,发起业务访问

5、若客户端访问HTTP DNS集群失败,可自动切换为传统方式通过运营商Local DNS进行解析查询


HTTP DNS优点

1. 绕过运营商Local DNS,防劫持

3. 无运营商缓存,域名变更快速生效

4. HTTP DNS可以在终端APP DNS缓存超时之前提前进行解析,规避了缓存再解析导致延时的问题

5. 与传统方式互备,当HTTP DNS不可用时可选择传统方式备份访问


HTTP DNS适用场景

HTTP DNS主要是为APP类或桌面应用提供服务,如游戏、电商、金融、音视频、社交类APP。HTTP DNS需要在APP加载相应的SDK对默认的DNS请求方式进行修改,因此HTTP DNS的实现需要开发配合和深度介入,另外一般一个APP的访问会涉及多个域名,每个域名都使用HTTP DNS还是只是部分域名访问使用HTTP DNS需要评估。更细节的实现如缓存规则、更新规则、监控及切换规则也需要进行详细的考虑和设计。


被动操作之内网缓存考虑因素


内网生产环境的域名访问在推广初期,从无到有,看似简单的域名请求,需要增加到JDK、操作系统等环节的访问,这些环节缓存开启情况不同,要实施域名访问需重点考虑是否要开启缓存,缓存时间配置为多少合适。


是否开启缓存的考虑

生产系统之间的交互有别于终端与系统之间的交互,生产系统交互频次高、时延要求高,若不开启缓存会在哪些方面有所影响?

链接建立影响:经过测试,Weblogic和Tomcat中间件建立一个链接分别会发起2个DNS请求,且要求2个请求都成功后方可建立链接,此处行为一致,但中间件会部署在某个操作系统上,由于Suse和AIX操作系统的超时重传机制不同,当网络出现丢包时,两类中间件行为结果不一样,若开启缓存,有一个DNS请求成功了就会被缓存,就能成功建立链接,若不开启缓存,面对超时时间不同、重传次数不同的问题,就很难评估何时能正常建立链接,出现问题时就很难分析业务影响和业务恢复时间,为排障增加了难度。

时延影响:大部分系统为提高利用率以及实现高可靠性,应用采用双中心双活部署。在大二层的部署架构下,存在大量跨同城中心的访问流量,每一次跨中心访问都会增加一次时延,对于高频交互系统,在不开启缓存的情况下每次交互都会发起一次DNS请求,就会额外增加时延,会对系统带来访问缓慢的问题,严重时可能会影响交易。

生产系统计划使用域名访问时,每笔交易对于访问DNS增加的时延带来的影响很难进行评估以及精准的测试影响结果,为避免通过域名访问增加的时延对生产系统带来影响,考虑开启具备缓存功能环节的缓存,但若仅针对时延要求高的系统开启缓存,那么生产环境就会存在不同的配置标准,又增加了运维的复杂性,因此,从运维规范、统一的角度考虑开启缓存。缓存功能开启了,缓存时间设置多长才能既满足快速访问业务又满足缓存及时失效的需求?


缓存时间考虑

参考唯一TTL值:统一开启各节点缓存器认可DNS服务器配置的TTL值,参考标准唯一,超时时间明确;对于无法参考DNS TTL值的环节,统一配置为与DNS TTL相同的超时时间

统一操作系统超时重传机制:统一不同操作系统超时重传时间间隔、重传次数等参数

规范开发:部分用特殊语言编写的业务系统有自己独有的缓存规则,需要规范开发规则,可调整遵循DNS规则


如何设置TTL值

缓存超时间(TTL)是缓存技术中的一个重要参数,对缓存效果起着决定性的作用。TTL时间设置较长,域名就能缓存更长时间,用户就能更快实现访问,TTL时间设置较短,域名就更快超时,用户就需要等待域名解析才能正常访问。因此,TTL时间设置的长短将直接影响用户的体验效果。TTL值设置大小需要根据业务特性、业务环境、DNS服务器性能等因素综合考虑,针对不同应用场景的缓存值设置规则可参考如下建议:

互联网环境:互联网环境由于运营商Local DNS缓存服务器的存在,具有不可控性,因此不适宜配置较长的缓存时间,建议参考DNS性能配置较小缓存值,例如设置为分钟级。

内网终端环境:内网终端环境相对可控,且大部分业务都是通过标准模式虚服务方式对外提供服务,域名变更概率较小,为减少终端访问频率,缓存值建议配置稍长时间,例如设置为小时级。

内网生产环境:生产系统变更的概率较大,且若缓存更新不及时可能会带来重大的业务影响,因此生产系统不适宜配置较长的缓存超时时间,建议参考DNS性能配置为秒到分钟级。


06

小结



浅析DNS缓存技术及应用考虑

作者简介

 

陈瑜

网络运维经理。2012年加入民生银行,任职于信息科技部网络管理中心。十年以上银行数据中心网络运维经验,目前重点负责网络需求分析、DNS平台规划建设工作,参与可视化分析平台建设。

 

兰庆白

网络资深运维经理。2011年加入民生银行,任职于信息科技部网络管理中心。负责数据中心网络规划、建设及相关运维工作,致力于新产品新技术研究。

编辑:生产运营部文化建设组

以上是关于浅析DNS缓存技术及应用考虑的主要内容,如果未能解决你的问题,请参考以下文章

DNS解析及缓存技术研究与应用

redis缓存介绍以及常见问题浅析

缓存技术简介

http缓存机制及varnish

域名缓存侦测(DNS Cache Snooping)技术

浏览器的渲染过程及涉及到的缓存机制