一种多层级共享缓存的递归域名服务系统和方法
【技术领域】
[0001]本发明属于网络技术、域名系统技术领域,具体涉及一种多层级共享缓存的递归域名服务系统和方法。
【背景技术】
[0002]域名系统(Domain Name System,简称DNS)是互联网重要的基础设施,实现域名和IP地址的映射转换。当前,互联网上绝大多数应用均依赖域名系统提供的寻址和定位服务。域名系统的解析速率直接影响网络的访问速度和用户的上网体验。域名体系是一个逐级授权的分布式数据查询系统,包括权威域名服务系统和递归域名服务系统两个环节。
[0003]在域名体系中,递归域名服务系统直接面向客户端应用提供域名解析服务,其接收来自客户端应用的域名查询请求,并按照根域名系统、顶级域名系统、权威域名系统的次序进行逐级查询,最后将查询到的资源记录返回给客户端应用(域名查询工作原理如图1所示)。为了提高域名解析速率,缩短域名查询时延,递归服务器通常会将每次查询的域名资源缓存下来。同时,在域名协议设计和DNS解析软件实现中,每个资源记录都有一个短到几秒钟,长到几天不等的生存周期(Time to Live,简称TTL)属性值。该TTL值会随着本地服务器的时钟周期逐步递减,一旦资源记录的TTL到期,则该资源记录将从内存缓存区删除。如某一被请求查询的资源记录在生存周期之内,且递归服务器缓存区有该资源记录(即缓存命中),则递归服务器会直接使用缓存区内的资源记录进行应答,不再向各级权威域名服务器请求结果。如果被查询的域名资源记录不在缓存区中(即缓存未命中),则递归服务器会采用迭代查询方式依次去向各级权威域名系统进行查询。递归服务器的这种缓存机制有效降低了服务器端的负载和查询延迟,同时在一定程度上也提高了递归服务器的性會K。
[0004]出于提升服务性能的考虑,在实际部署递归服务器过程中通常采用“缓存”(cache)和“转发”(forward)两层服务模式,即在前端部署一层缓存服务器(亦称为cache服务器),后端部署一层转发服务器(亦称forward服务器)。其中缓存服务器主要依赖本地缓存区的资源记录为用户提供服务,如果本地服务器的内存缓存区未命中,则缓存服务器会将域名查询请求转发给后端的转发服务器。在这种两层的服务模式中,通过会将前端的缓存服务器的缓存区设置为一个较大的值,进而可以记录或缓存更多的域名资源记录,以此可以大幅缩短域名查询的时延。
[0005]实际上,在递归域名系统建设部署过程中,出于安全灾备和负载均衡的考虑,递归服务系统通常多采用机群架构,即前端会部署同时多台缓存服务器对外提供查询服务,后端会部署多台转发服务器提供迭代查询服务。但是,按照这种部署架构,前端提供查询服务的每一台缓存服务器仅能使用本地的缓存区,而无法有效利用该机群内其他缓存服务器的缓存区数据。假设某一待查询域名资源记录在缓存服务器A的缓存区未命中,即使同一机群内的缓存服务器B的缓存区请求的的资源记录,则由于不同缓存服务器之间缺乏缓存(数据)共享机制,在这种情况下,缓存服务器A也只能将查询请求转发给后端的转发服务器进行迭代查询。因迭代查询耗时要明显高于本地缓存命中,这必然导致域名查询时延的增大,间接影响就是用户可能打开一个网页速度很慢。
【发明内容】
[0006]针递归域名系统内的不同缓存服务器无法共享域名缓存区资源记录,本发明旨在提出一种可以实现不同缓存服务器共享缓存的技术方法和服务模型,提高域名缓存命中率,减少域名查询总的时延。
[0007]为实现上述目的,本发明采用的技术方案如下:
[0008]一种多层级共享缓存的递归域名服务系统,其特征在于,包括一级缓存服务器、二级缓存服务器以及转发服务器;
[0009]所述一级缓存服务器接收来自客户端的域名查询请求,并检查本地服务器的缓存区是否有请求的资源记录,如果缓存区命中则直接将资源记录应答给客户端,如果缓存区未命中则将域名查询请求转发给所述二级缓存服务器;
[0010]所述二级缓存服务器汇集前端所有一级缓存服务器的缓存记录,在收到一级缓存服务器转发的域名查询请求后,检查本地服务器缓存区,如果本地缓存区有请求的资源记录则直接返回数据给一级缓存服务器,否则将域名查询请求转给所述转发服务器;
[0011]所述转发服务器接收来自二级缓存服务器的查询请求,并进行迭代查询,最后将查询到的资源记录返回二级缓存服务器,二级缓存服务器缓存查询结果并返回查询结果给一级缓存服务器,一级缓存服务器缓存查询结果并将查询结果返回给客户端。
[0012]进一步地,上述系统包括数据采集模块、同步控制模块和验证加载模块;所述数据采集模块部署在一级缓存服务器上,负责一级缓存服务器缓存区资源记录的导出以及本地服务器缓存资源记录文件的维护管理;所述同步控制模块部署在一级缓存服务器和二级缓存服务器上,负责进行一级缓存服务器和二级缓存服务器的数据同步;所述数据加载模块部署在二级缓存服务器上,负责验证接收的资源记录格式的正确性、资源记录的合并处理,以及合并后资源记录的内存加载工作,并与本地服务器上的DNS解析进程通信。
[0013]一种多层级共享缓存的递归域名服务方法,适用于上述系统,该方法的步骤包括:
[0014]I) 一级缓存服务器接收来自客户端的域名查询请求,并检查本地服务器的缓存区是否有请求的资源记录,如果缓存区命中则直接将资源记录应答给客户端,如果缓存区未命中则将域名查询请求转发给二级缓存服务器;
[0015]2) 二级缓存服务器汇集前端所有一级缓存服务器的缓存记录,在收到一级缓存服务器转发的域名查询请求后,检查本地服务器缓存区,如果本地缓存区有请求的资源记录则直接返回数据给一级缓存服务器,否则将域名查询请求转给转发服务器;
[0016]3)转发服务器接收来自二级缓存服务器的查询请求,并进行迭代查询,最后将查询到的资源记录返回二级缓存服务器,二级缓存服务器缓存查询结果并返回查询结果给一级缓存服务器,一级缓存服务器缓存查询结果并将查询结果返回给客户端。
[0017]本发明技术方案的关键点如下:
[0018](I)建立了一种两层级的递归缓存服务模式,一级缓存服务器可以将本地的缓存资源记录传输给后端的二级缓存服务器,由于一般采用了这种多对一的方式,可以实现一级缓存服务器资源记录的在二级缓存服务器的共享;
[0019](2) 一级缓存服务器和二级缓存服务器进行数据同步时,同步控制模块设有共享锁,对共享缓存记录文件进行保护,防止多个程序或进程同时去读写共享缓存文件导致的死锁;
[0020](3) 一级缓存服务器和二级缓存服务器进行数据同步前,会进行文件序列号大小(或新旧)的对比,避免无效的数据同步,节省网络带宽资源;
[0021](4) 二级缓存服务器会将一级缓存服务器的缓存资源记录放在本地硬盘而不是直接写入服务器内存,防止因资源记录格式错误导致的本地服务器DNS解析异常;
[0022](5) 一级缓存服务器在将本机内存中缓存资源记录写入本地硬盘文件后,会做一次预处理检查,会将TTL马上到期的资源记录从该文件中删除。
[0023]本发明设计的服务模型和技术方案可以建立一种多层级的缓存服务器架构,在一定程度上可以实现不同缓存服务器之间缓存资源记录的共享,显著提高域名缓存命中率,缩短域名解析时延。
【附图说明】
[0024]图1是现有技术中域名解析工作原理图。
[0025]图2是本发明的多层级共享缓存服务架构图。
[0026]图3是本发明的系统工作模块图。
[0027]图4是本发明的工作原理流程图。
【具体实施方式】
[0028]为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步说明。
[0029]1.系统架构
[0030]首先,在系统架构方面本发明提出了一个三层次的递归域名服务系统,三个层次分别为:一级缓存服务器、二级缓存服务器以及转发服务器,如图2所示。
[0031]2.功能模块
[0032]按照图2所示的系统架构,为了提高域名缓存服务器中的命中率,关键是建立二级缓存服务器大缓存区并将一级缓存服务器的缓存记录进行汇聚共享。为实现缓存数据的共享,并保证数据的一致性,本部分将详细说明该系统的各工作模块及功能介绍。系统包括三个功能模块,分别为数据采集模块、同步控制模块和验证加载模块,如图3所示:
[0033]三个功能模块的详细说明如下:
[0034](I)数据采集模块
[0035]该功能模块部署在一级缓存服务器上,负责一级缓存服务器缓存区资源记录的导出以及本地服务器缓存资源记录文件的维护管理工作。数据采集模块包括两个(功能)进程,一个进程负责定期(如每30分钟执行一次)发送请求,将本地服务器DNS解析进程的内存缓存记录导出并写入本地硬盘,另一个进程则对导出的缓存区资源记录进行预处理,将TTL马上到期的资源记录删除。
[0036](2)同步控制模块
[0037]该功能模块部署在一级缓存服务器和二级缓存服务器上,用于实现一级缓存服务器和二级缓存服务器的数据同步。该功能模块包括客户端进程和服务器端进程两部分,客户端进程负责与服务器端进行通信交互。在每次数据同步前,双方会进行通信确认是否需要进行数据同步。如果同步控制模块的服务器端进程允许数据同步传输,则客户端进程会与服务器端进程建立TCP连接,并传输数据。服务器端进程在接收完数据后,会进行MD5校验,确保传输数据的正确性。
[0038](3)数据加载模块
[0039]该模块部署在二级缓存服务器上,负责验证接收的资源记录格式的正确性、资源记录的合并处理,以及合并后资源记录的内存加载工作。数据加载模块会与本地服务器上的DNS解析进程通信。
[0040]3.工作原理
[0041]根据各模块的功能说明,本发明提出的基于多层级共享缓存的递归域名服务模型的工作流程如图4所示,工作原理如下:
[0042]前端是由一级缓存服务器组成的服务机群,机群采用负载均衡技术,接收来自客户端的域名查询请求。该机群的一级缓存服务器在接受到域名查询请求后,首先会检查本地服务器的缓存区是否有请求的资源记录,如果缓存区命中,则一级缓存服务器直接将资源记录应答给客户端;如果缓存区未命中,则域名查询请求会转发给后面任一