许久以前就答应悟石要分享一下我眼中的
性能测试工程师,结果托来托去快托过年了,囧…
想想来杭州有半年了,也对目前主站的性能评测团队工作模式有些许了解了,再加上以前在上家雇主也做过几年自认还算很有技术含量的性能测试工作,我想我还算有点资格说的吧:)
性能测试说的装B点儿,其实没啥,就是和Response Time(或者说latency)、throughput(也可以说capacity)以及scalability打交道。弄懂了这三个要素,应该就算是一个合格的性能测试工程师了。
当然,我不会装B,只是一介武夫,所以我接下来只想从偏技术层面聊聊我心目中真正的主站性能测试工程师是啥样的:
1、大局观。性能测试工程师一定要有系统化的思维,要站在整个系统测试的 角度看问题。一个优秀的性能工程师必须要有相当的知识广度。否则在测试期间,你必须依赖外界援助(比如DBA,Dev或OPS)来协助,效率不高,更关键 的是可能会被误导,漏掉很多性能BUG。我常常看到组里的童鞋们在压测时一看到TPS降了,就死盯着应用,就着急的去分析线程或做CPU Profiling。找不到原因后有时问到我时,我习惯的第一句总是 你看过DB么?确认DB端正常么?看过压测客户端么?确认压测端正常么? 我个人意见:不要老凭经验,一有重复症状就思维定式;一定要坚持先从全局看问题,隔离到是应用层面、DB层面抑或是压测客户端层面后再进一步深入定位问 题。
2、技能深度。在性能测试工具方面有自己独特的理解;同时也应该在操作系统、数据库、应用程序等方向的配置管理与调优方向上非常的熟悉。
3、敏感。这个一方面是天赋,一方面是经验积累吧, 很多隐蔽的性能问题确实是需要丰富的经验才能发现,极容易漏掉:)
4、兴趣。其实这条才是最重要的^-^
如果说具体些通俗些,我眼里主站真正的性能工程师是这样的:
1、熟悉Java(包括JVM内在机理)/c/c++。理由很简单,主站大部分的外围应用和中间件都是JAVA写的,底层核心系统是c/c++写的。
2、精通linux管理和shell编程。理由更简单,我一直觉得,shell熟练与否非常大程度决定了一个工程师的工作效率。
3、对数据库管理和性能优化有自己的实践和心得(数据库永远是个性能要点)
4、精通某一个性能测试工具。不止是使用,更包括原理,如何改造扩展。
5、熟悉linux kernel的实现(比如内存管理、文件系统、系统调用… )。这条感触在最近两个月特别深,可能是受到褚霸、子团等大侠们的影响吧,如果不熟悉kernel,确实很难在底层系统的性能测试上有所真正建树。其实这块也算是整个质量保证部的技术短板吧,现在淘宝的linux内核组都是自测+他人review的形式,如果。。。^-^
6、了解常见硬件,特别是存储相关。这块主要是受国外Percona公司的Peter和Vadim影响,他们能成为世界公认的mysql性能专家,他们熟悉mysql源码当然很重要,但也与他们那非常渊博的底层硬件知识是分不开的。
当然以上都是我个人意见,从我自己的角度出发看的问题。其实性能测试还有很多领域,比如前端性能测试这块,我是小白,就不发表任何相关意见了^-^ 但说到底,做性能这块关键一是经验积累二是掌握相关底层技术
至今还记得百淘65期让我最为难忘的细节,达人青云在分享他的牛P经历时总结到的:
● 结合优势,做别人做不了的
● 发现问题,做别人没做过的
● 主动出击,做别人不爱做的
希望自己能一直铭记这三句话,有天能成为一个真正的性能工程师