許久以前就答應悟石要分享一下我眼中的
性能測試工程師,結果托來托去快托過年了,囧…
想想來杭州有半年了,也對目前主站的性能評測團隊工作模式有些許了解了,再加上以前在上家雇主也做過幾年自認還算很有技術含量的性能測試工作,我想我還算有點資格說的吧:)
性能測試說的裝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經歷時總結到的:
● 結合優勢,做別人做不了的
● 發現問題,做別人沒做過的
● 主動出擊,做別人不愛做的
希望自己能一直銘記這三句話,有天能成為一個真正的性能工程師