2

服务器性能工具箱 (2)- DNS

 2 years ago
source link: https://rosona.github.io/post/20160106/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

服务器性能工具箱 (2)- DNS

Peng Rong, 2016-01-06

接着上次的网络带宽继续说,网络带宽问题解决完了,但用户反馈还是很慢,时好时坏,怎么办?

做为服务器端开发者,最禁忌类似这样的回答:我这没有问题啊,你看service log,P99都是10ms了,健康的不得了,肯定是客户端的问题,找他们去吧

开发者都应该具备Barrels stop here的情怀,是你的问题搞定它,不是你的问题给出你的最佳解决方案

第一步,去用户那里去复现问题 用户不会无缘无故的抱怨(除非就想找事),既然他说慢,可能哪里真出了问题。先圈几个怀疑点(怀疑点的圈定,可能需要经验,没有经验可以分析数据),客户端发请求拿数据无非就几个步骤,本地请求准备,建立连接,准备传输,传输,服务器端接收到请求处理请求,返回,呈现,每个环节都做一下耗时分析,看看哪里耗时较多,介绍个工具,curl,ubuntu 下安装方式:sudo apt-get install curl

这是个很强大的命令,有很多参数,可以自行学习,只说解决问题要用到的: curl -o /dev/null -s -w %{time_connect},%{time_namelookup},%{time_connect},%{time_pretransfer},%{time_starttransfer},%{time_total} http://yourdomain/api/xxx

time_connect:建立连接时间

time_namelookup:DNS解析时间

time_pretransfer:从建立连接到开始传输文件的时间

time_starttransfer:收到第一个字节的时间

time_total:整个请求时间

注意单位是秒

如果连续收集数据,分析可以得出类似下图:

那么问题显而易见了 注:可能有的同学会问,怎样才能去用户那里复现,提供两个思路,使用代理(命令本身可支持)或客户端上传log

第二步,如何解决 我们知道使用域名的好处在于可读性与IP地址变更,我新换了一台服务器(比如换机放了,域名对应的IP变下就行)可对客户端透明,但是增加了从域名到IP的解析时间

  • 更改客户端的DNS cache 策略,默认30秒(记忆中好像是)

    • 不足:比如改成30分钟,但如果IP变更,更新起来就有点慢了
  • 自己APP中管理域名-IP变更策略

    • 首次启动更新IP(background),以后用IP访问,后定期background更新

本案例的出发点是一个全球化的服务,优化也比这要复杂很多,涉及到多国机房的多种问题,但解决问题的思路大致相同

上面的例子是HTTP,其它协议思路类似

国内的qq,weixin等都使用IP绕开域名。对性能的苛求需要放弃安逸的事物,自己动手,定制化

大白鲸 干货不断 值得关注

微信号:belugas

微信公众号

为大白鲸团队技术Blog,专注于机器学习,框架分析,性能优化等技术干货的分享


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK