1.介绍
本篇文章由于因公司项目上线,需要对项目环境进行压力测试。在压测过程中,所有打压机从公网对目标项目服务器进行压力测试,发现和内网压力测试的性能结果差距10倍左右,在调整主机对DNS的解析顺序之后,解决了压测结果差距大的问题。
故此篇文章主要从Linux服务器解析顺序开始分析,了解一下Linux服务器解析顺序,以及速度,最后在对比改变的前后性能差距有多少。
2.主机的DNS解析过程
2.1 主机的解析顺序以及速度
主机DNS解析的步骤如下:
-
- 找缓存
-
- 找本机的hosts文件
-
- 找DNS服务器
在linux系统上(如centos7)上,需要一个NSCD服务来缓存DNS解析信息,在一些云平台的默认镜像中不安装此服务, 所以这里没有缓存的产生。那么解析顺序就变成了 本机hosts→ DNS服务器。
在以上三个步骤中,缓存依赖NSCD服务,该服务将DNS解析的内容缓存在内存中,主机解析直接去内存中读取对应的解析记录,且解析的顺序也是主机解析步骤的第一步,速度最快; 在第二步中查找本机的hosts文件,主机每次都会去打开本地磁盘上的文件进行对应的查找以及解析,与缓存相对应速度会慢很多;第三步在缓存以及本机hosts文件都没有对应的解析后,主机会向配置的DNS服务器发送查询解析请求,整个过程可能由于网络或者DNS服务器的响应速度而受到很大的影响,按照主机的解析顺序来看,先一步的速度都会优于下一步的速度。
2.2 改变主机解析顺序
可能在不同的环境中也有一些不同的策略,需要直接去请求DNS服务器。往往解析一个域名时,先会找/etc/hosts文件(没有安装NSCD服务),如果/etc/hosts文件没有对应,才会去找DNS,那么有什么方式,让主机先找DNS呢?
在/etc/nsswitch.conf这个文件里定义:
#本节中,DNS缓存的解析顺序原本是由 hosts → DNS
hosts: files dns #找到这段,改成下面这样
hosts: dns files
这样主机就会去先找DNS,在去查找hosts。
2.3 增加DNS缓存之NSCD服务
nscd(Name Service Cache Daemon)是一种能够缓存 passwd、group、hosts 的本地缓存服务,分别对应三个源 /etc/passwd、/etc/hosts、/etc/resolv.conf。其最为明显的作用就是加快 DNS 解析速度.
这里利用 nscd 的 hosts 缓存服务来实现 linux 下的 dns 缓存。
NSCD(Name Service Cache Daemon)是服务缓存守护进程,它为NIS和LDAP等服务提供更快的验证。不管是什么系统,缓存是一项非常重要的机制,缓存的主旨就是提高客户端访问速度。
1.开启NSCD DNS缓存服务的优点和缺点
- 优点
-
- 本地缓存DNS解析信息,提供解析速度。
-
- DNS服务挂了也没有问题,在缓存服务时间范围内,解析依旧正常。
- 缺点
-
- DNS解析信息会滞后,如域名解析更改需要手动刷新缓存,NSCD不适合做实时的切换的应用,目前对于依赖DNS切换的服务,建议不要开启DNS缓存。
-
- DNS Cache作为普通的DNS解析Cache那是没问题的,如果你使用RDS云服务器,也不建议使用DNS缓存服务。
2.NSCD安装
- RHEL/CentOS
-
- $ yum -y install nscd
- Debian/Ubuntu
- $ apt-get install nscd
3.配置DNS缓存
这里就不解释所有配置的含义。只解释简单需求完成的配置。
通过编辑/etc/nscd.conf文件,在其中增加如下一行可以开启本地DNS Cache(Centos7默认开启)
enable-cache hosts yes #这个服务除了dns缓存之外还可以缓存passwd,group,servers
4.清除指定类型缓存
$ nscd -i passwd
$ nscd -i group
$ nscd -i hosts
5.DNS缓存在服务器上的作用
在需要通过域名与外界进行数据交互的时候,dns缓存就派上用场了,它可以减少域名解析的时间,提高效率。例如以下情况
-
- 使用爬虫采集网络上的页面数据,
-
- 使用auth2.0协议从其他平台(如微博或QQ)获取用户数据,
-
- 使用第三方支付接口,
-
- 使用短信通道下发短信等.
3.压测结果对比
由于是压测人员自定义的压测策略,这里只做了一个简单的平均时延测试,主要对比本机hosts和缓存的性能差距。
主要过程为centos7系统的主机以36000人每秒300人次像域名地址发送登录请求.
解析方式 |
压测总人数 |
每秒登录 |
平均时延(ms) |
本地hosts |
36000 |
300 |
152 |
缓存 |
36000 |
300 |
118 |
#根据公司政策,只能提供以上一些数据.