论文部分内容阅读
域名系统(DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS系统中包含两种类型的服务器,分别为授权服务器和缓存服务器,授权服务器也称名字服务器,用来管理授权主域的信息。缓存服务器接收DNS客户端发来的DNS解析请求,并代理DNS客户端向DNS授权服务器请求域名信息,在接收到授权服务器返回的域名信息后,将DNS解析结果返回给DNS客户端。实际网络中的DNS系统通常包含多个DNS缓存服务器,缓存服务器按地理区域或其他规则划分为多个域,并配合Anycast技术,对外提供一个统一的DNS服务地址。使用Anycast技术的DNS系统,通常不能够根据各个缓存服务器的处理能力动态分配DNS请求,而是根据预先配置的静态路由网络开销,将请求优先送往网络路径开销最小的DNS缓存服务器。由于客户端地理位置的不同,不同地区的DNS请求均被送往该地区距离客户端网络路径开销最低的DNS缓存服务器,某个区域内的客户端DNS请求容易集中到一个或部分DNS缓存服务器上,而其它DNS缓存服务器处于空闲状态。为了缩短DNS解析时间,需要有一种动态负载均衡系统,使DNS请求能够动态地分配到多个缓存服务器上。针对上述问题,本文设计并模拟实现了一种DNS系统的动态负载均衡解决方案。该解决方案中设计包含多个负载均衡控制器,每个负载均衡控制器均可实时地收集系统内部各个缓存服务器当前的负载状况,并将收集到的负载信息按照负载值(通过CPU使用率、内存占用率和硬盘使用率计算得出)的大小排序,依此建立优先级队列。负载均衡器从排列在该队列前三分之一的DNS缓存服务器中随机选择一个DNS缓存服务器,将DNS请求转发到选择的DNS缓存服务器,以此避免某时刻系统中各个负载均衡器均选择同一DNS缓存服务器的情况。本动态负载均衡解决方案在负载均衡器建立优先级队列时进行了调优,可以在线性时间内对DNS缓存服务器按照负载值大小进行排序,避免因排序时间过长而延迟DNS服务器进行应答的情况。另外,本系统在实现时考虑到通用性,用户可以通过配置系统监控的UDP端口,实现对任何使用UDP协议作为通信协议的系统进行动态负载均衡。最后,针对本文设计并模拟实现的DNS动态负载均衡解决方案进行了验证,介绍了模拟系统的设计原理和模拟实现方法。本模拟系统基于Netfilter实现,使用Netfilter提供的API定义需要捕获的DNS请求包,并根据所制定的负载分配规则,修改DNS请求包的目的地址,以将DNS请求转发到负载较轻的DNS缓存服务器,进行DNS解析,DNS缓存服务器将解析结果直接返回到客户端。