目录:
PowerDNS简单教程(4):优化篇(本篇)
 
最后一篇,介绍一下PowerDNS的性能优化。其实,这才是我的终极目的。简单的说,就是把QPS调到尽可能高。QPS,也就是每秒钟接收请求的数量,这是服务器抗压能力的一项很重要的指标。我的初步想法是让QPS达到50000+(其实这是领导给的要求)。第一眼看到这个数字说实话我的内心是有点崩溃的,因为这个数字看上去有点大,而我也不知道一个服务器到底承载能力有多强,不过同事说刚装好的pdns已经可以达到30000+,而在某某公司这个数值是位数的,于是我稍稍安心了点。
不过这里还有另一个问题:QPS的数值要怎么测呢?在同事的帮助下我找到一个工具,是BIND下自带的一个开源的专门测试DNS性能的小工具,叫做queryperf。安装起来比较简单,下载一个bind,进入bind目录下的contrib/queryperf目录中:
ls    # 看看这里都有什么
sudo ./configure
sudo make
ls
可以看到变出来一个名叫queryperf的文件(可执行文件)。没错就是这样神奇,快快快给个崇拜的眼神 ~咳咳,回来回来,这个queryperf文件就是我们要的东西,其他的都没有什么用了。
有工具了,还需要一个测试文件,内容是“域名+空格+类型”这样格式的记录。我写了一个脚本来生成,脚本大概是酱婶滴:
这样就生成了50万条记录。之后开始测试。
./queryperf -d (你的测试文件) -s (你的DNS服务器地址,默认localhost) -p (DNS服务器端口,默认53)
常用命令可以使用-h查看。
测试的结果应该是酱婶滴(这是第一次达到5万QPS的截图留念,后来又高了不少了):
如果不是的话,查一查是不是脚本写的有问题,还有地址、端口、数据库等等配置是否正常,可以用monitor模式启动pdns然后盯着看一看查询过程。
看到结果其实查询原理就简单了,N条记录,M秒查询出结果,相除一下就是QPS了。
 
好了热身活动结束,下面开始正式优化的过程(上面的测试结果是我已经优化过一部分了):
优化的思路主要有这么几个方面:PowerDNS设置;MySQL优化;Linux优化。
(1)PowerDNS方面:
可参考官网的优化方案:https://doc.powerdns.com/md/authoritative/performance/。要设置的内容都在pdns.conf配置文件中。
①缓存。在DNS服务器运行的过程中,可以dump查看一下相关参数,例如缓存碰撞的结果,如果miss较多,说明应该调大缓存的生存时间。在pdns.conf中控制缓存生存时间的主要有4个变量:cache-ttl,negquery-cache-ttl,query-cache-ttl,recursive-cache-ttl,默认的时间都不太一样,全部改成60。
②线程。PowerDNS有两个地方用到了线程,分别是receiver-threads和distributor-threads,官方解释是接收线程和分发线程。但是这两个线程并不是越多越好的。一是因为mysql的最大连接数有限,如果开多了线程,在monitor中可以看到,根本就没有连接到mysql;而是因为线程数过多的话,CPU要一直进行上下文切换,时间浪费过多。官网介绍说,distributor-threads是越小越好的,设置为1的时候会达到最优;而receiver-threads我经过实际测试,设置为12的时候QPS达到了最优。这个并没有什么科学的解释推理,只是经多方尝试后得到的结果。个人感觉,这个跟CPU核心数是有关的,只是没其他机器可以做实验了。
③日志。PowerDNS在查询过程中有日志记录,这个是会浪费一定的时间的。可以把记录日志相关的参数关掉。log-dns-details和log-failed-updates关掉实际测试并没有什么卵用,但是无意中发现query-logging关掉会有显著提高。(所谓“关掉”并不是把这个参数注释掉,而是让参数值为no)
官网中还介绍了pdns_control中看到的参数代表的含义:https://doc.powerdns.com/md/authoritative/performance/。同时也介绍了pdns.conf中的每个参数的含义:https://doc.powerdns.com/md/authoritative/settings/ 。我看到的有意义的也就上面介绍的这几个了。
(2)MySQL:
MySQL优化百度上能找到很多,我看了一部分介绍,根据其中的几个优化了一下MySQL。优化方法是进入用root进入mysql
show variables; 可以看到当前的所有变量(这是主要修改的地方)
show status; 可以看到当前的状态(根据状态来修改)
set xxx=yyy;可以修改变量(xxx是变量名,yyy是变量值)
如果不让改,那就到/etc/mysql/my.cnf配置文件中改,之后sudo service mysql restart重启数据库服务。
优化后并没有看到明显的效果。我猜想MySQL还没有达到瓶颈,所以优化起来对QPS提高目前还没有太多帮助。
(3)Linux:
Linux参数会影响到MySQL的一些性能。既然MySQL么有达到瓶颈,那么优化Linux意义也不是太大。
最终,按我司服务器的优化结果,本机QPS达到了84000+。
 
以上。在实际测试QPS的过程中,需要关注系统硬件的相关信息,我使用的是vmstat,需要用的同学请自行百度。上下文切换的瓶颈就是通过这个工具看出来的。现在达到了CPU瓶颈,我还不知道怎么解决。另外,猜想pdns连接backend的过程还是有地方可以优化的,这是需要pdns和MySQL配合完成的地方。继续优化。
vmstat使用方法可以看我之前发过的博客:http://www.cnblogs.com/anpengapple/p/5197530.html 没错,当时就是为了做PowerDNS优化才找的。
 
******************************即将结束的分隔线******************************
PowerDNS就介绍到这里了,不是很深,原因是:一是DNS的知识我也懂的不多,二是把PowerDNS搭建起来用起来这些足够了,三是PowerDNS的中文资料很少,官方英文资料我啃起来也是头疼(好吧这才是主要原因)。网上的中文博客基本也就是教了教怎么安装PowerDNS和Poweradmin,并没有涉及到功能及优化方面,而且CentOS居多,Ubuntu的博客甚少。不知道是不是因为玩PowerDNS的都是牛人,没有遇到什么问题,因此觉得没有什么好记录的。写这几篇一是为了备忘,同时也是为了将来有类似我这样的菜鸟可以拿来用用。秉承着一个理念:予人玫瑰,手留鱼香,肉丝。但愿真的有用吧。

PowerDNS简单教程(4):优化篇的更多相关文章

  1. PowerDNS简单教程(2):功能篇

    目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇(本篇) Po ...

  2. PowerDNS简单教程(1):安装篇

    这一篇开始直接是PowerDNS教程,连续四篇.DNS的相关背景知识我就不介绍了,有需要的话看看 http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9 ...

  3. PowerDNS简单教程(3):管理篇

    目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇 http:/ ...

  4. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

    转载请标明出处: https://www.fangzhipeng.com/springcloud/2017/07/12/sc03-feign/ 本文出自方志朋的博客 最新Finchley版本请访问: ...

  5. Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试

    日常啰嗦 承接前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例>,已经讲解了dao层和service层的单元测试,还有控制器这层也不能 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化

    阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...

  7. MySQL优化篇(一),我可以和面试官多聊几句吗?——SQL优化流程与优化数据库对象

    我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoD ...

  8. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  9. Netty实现高性能RPC服务器优化篇之消息序列化

    在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...

随机推荐

  1. 《C++ Primer》〓〓〓〓〓〓〓〓〓〓【第七章】

    7.5.1 构造函数初始化列表 如果成员是const.引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初值. 成员的初始化顺序与他们在类定义中的出现顺序一致. ...

  2. Exists 和 Not Exists

    只注重子查询是否有返回行,如有返回结果为真,否则为假,并不适用子查询的结果,仅用于测试子查询是否有返回结果. 语法: if exists (子查询) begin 语句块 end 例子: if exis ...

  3. 利用canvas制作图片(可缩放和平移)+相框+文字

    前言: 公司一个售前问我能不能用H5做一个手机拍照,给相片添加相框和添加文字上传到服务器的功能,我当时一琢磨觉得可行,就利用空余时间做了一个demo,去掉了拍照和上传,如果以后有机会,会给补上,当然对 ...

  4. ngnix优化【转】

    nginx的优化 1. gzip压缩优化 2. expires缓存有还 3. 网络IO事件模型优化 4. 隐藏软件名称和版本号 5. 防盗链优化 6. 禁止恶意域名解析 7. 禁止通过IP地址访问网站 ...

  5. VMware下安装Linux(Centos)步骤

    VMware下安装Linux(Centos)步骤 准备步骤:(安装软件教程采用 VMware 9 .Centos6.5 为例) 启动VMware的画面 点击File--->New Virtua ...

  6. JFrame自适应大小

    pack();函数调用PreferedSize(); 所以对于组件要setPreferedSize();

  7. lincode 题目记录5

    Course Schedule 安排课表   Frog Jump  最长回文字符串长度 Course Schedule 选课方案问题,题目说的很清楚了就是bfs或者dfs,然后加个字典优化,弄了好久没 ...

  8. select获取选中项的值与文本

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. eclipse Java类 红色感叹号 commit失败

    解决方法:  1.进入java类文件所在物理目录 (e:\workspace\myproject\...) 2. 删除多余的版本管理工具的文件或文件夹(如 .svn) 3. 刷新eclipse工程 4 ...

  10. 初识shell expect

    场景:工作中经常会遇到shell脚本写的连接脚本,所以稍微了解下. 一.shell Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言 ...