前言
記得剛開始學習性能測試相關知識的時候,我一直有個疑問:性能測試能對測試工程師本人和企業帶來什么價值?
隨着不斷的學習成長和工作中的應用實踐以及和很多業內同行溝通交流,我總結了如下幾點性能測試的優點和價值:
- 提升測試工程師的技術能力;
- 提升對系統架構和業務邏輯的了解;
- 提升測試工程師在職場和求職市場的競爭力;
- 提前發現系統潛在的不穩定因素,提高線上系統穩定性;
- 更精准的流量評估和容量規划,降低系統的硬件成本和維護成本;
- 保障系統在大促秒殺等場景和峰值流量沖擊下的穩定性,助力業務目標達成;
全鏈路壓測的衍生和挑戰
隨着互聯網行業不斷發展,系統架構越發復雜,業務場景越發多樣化,對性能測試的要求也越來越高。
傳統壓測方式已經無法滿足業務和技術的發展需要,全鏈路壓測,就是在這樣的背景下應運而生的。
作為性能測試領域新階段的最佳實踐,全鏈路壓測在更多公司被探索和應用的過程中,也遇到了種種挑戰。
傳統壓測和全鏈路壓測的區別
相比於傳統的壓測方式,全鏈路壓測在性能測試領域,有其獨到的特殊性:
壓測類型 |
傳統壓測 |
全鏈路壓測 |
壓測工具 |
Jmeter、Locust、Loadrunner |
壓測集群、流量引擎、錄制回放 |
承接方式 |
需求響應式,被動 |
發現系統所有鏈路存在的瓶頸點,主動 |
壓測環境 |
測試環境/性能環境 |
生產環境 |
環境特點 |
環境不穩定/配置低/壓測結果參考性不高 |
環境穩定/完全真實環境/壓測結果真實可靠 |
壓測場景 |
單機單接口、單機單鏈路、單機混合鏈路 |
包含覆蓋范圍內的所有核心鏈路及場景 |
壓測過程 |
可觀測性較低,延時較高 |
實時可視化觀測 |
測試結果 |
數據維度小,無法提供太多數據便於分析 |
提供多維度細粒度的數據,便於快速定位問題優化 |
投入成本 |
需要搭建單獨的壓測環境 |
完全線上生產環境進行,無須單獨搭建環境 |
以我之前工作過的某銀行信用卡中心為例,當時也是傳統壓測占大多數。要完成一次完整的壓測,需要經歷下述多個環節才可以完成:
- 業務研發部門提出壓測需求,壓測團隊和業務方溝通后確認是否執行;
- 業務部門提供壓測范圍、涉及鏈路接口、數據並且准備相關的鋪底數據和參數化數據;
- 壓測團隊和運維DBA溝通,准備相關的壓測環境,開通防火牆及臨時訪問權限;
- 壓測團隊調試腳本,有問題需要業務研發協助定位解決;
- 開展壓測,通過nmon、JDK自帶工具獲得壓測數據,然后導出進行圖表繪制,進行性能問題初步分析;
- 和業務研發、運維以及DBA溝通,一起排查定位問題;
- 優化發布后,再次驗證(這個環節要持續多輪);
- 壓測完成,統計壓測結果,手動編寫壓測報告;
上述過程還只是在測試環境進行壓測,不僅耗時費力,還無法對生產環境的性能評估有足夠的建議參考。每次上線特別是大促階段,還是提心吊膽的怕出問題。
全鏈路壓測落地過程中的挑戰
雖然全鏈路壓測解決了傳統壓測過程中的種種痛點,可以為線上性能評估提供更多詳實的參考建議。但在落地過程中,全鏈路壓測依然要解決很多問題,主要有如下幾點挑戰:
- 鏈路梳理:現在大多數企業都是采用微服務架構來設計系統,且業務場景多樣化,導致了系統架構異常復雜。要覆蓋所有壓測范圍內的場景,就需要對涉及的所有應用及其調用關系進行梳理。目前業內還沒有較好的鏈路梳理工具,導致這個過程需要人肉來梳理,耗時且費力。
- 流量評估:不同企業在監控體系方面的建設都不一樣,要進行全面詳細的流量評估,需要有完善的監控平台來進行各維度的數據采集和展示。
- 數據隔離:生產全鏈路壓測最重要的一點是避免對生產數據造成污染。業內常見的做法有如下兩點:
- 全鏈路監控:在全鏈路壓測實施過程中,實時的可視化監控監控是很重要的一點。在整個壓測鏈路中,能實時的觀察到每個調用鏈路的具體信息,對問題的快速發現和定位有重大的幫助。
- 壓測數據寫入正式庫表,然后通過特殊的字段進行清理(業務改造成本大,清理風險高,耗時久)
- 采用影子庫表,壓測流量數據進行影子庫表,在不對生產數據造成污染的情況下進行壓測;
- 服務保護機制:全鏈路壓測是在生產環境進行,壓測過程中,除了要防止數據污染,還要考慮到不把生產服務壓垮。因此需要一套完整的機制來保證,壓測在正常實施的同時,不對生產服務應用造成影響。
我在上家公司推動落地生產全鏈路壓測的過程中,就遇到了上述的幾點挑戰,且這個過程也踩了不少坑。
當時我就在想,能不能有這么一個產品:既可以不對現有業務進行改動,又可以方便快捷的完成鏈路梳理、流量評估、數據隔離,同時還要能做到全鏈路監控和壓測過程的服務保護?
一次偶然的機會,我了解到了開源全鏈路壓測平台Takin。
開源全鏈路壓測產品:Takin
最開始了解到Takin,還是因為全鏈路壓測相關的事情。大概20年初,我正忙於前司的全鏈路壓測落地的事情,網上找了很多方案和實踐,但大多都是空泛的概念。
后來接觸到數列科技,看了他們的產品功能介紹,和他們技術負責人也聊過幾次,給了我很多啟發。
恰好今年,他們的全鏈路壓測產品Takin開源了,下載試用了一番,體驗不錯,是從實際的生產實踐角度出發來解決實際的問題。
Takin是什么?
Takin是國內知名的系統高可用專家數列科技的核心產品,是基於Java語言開發的一套生產全鏈路壓測系統。
可以在無業務代碼侵入的情況下,嵌入到各個應用程序節點,實現生產環境的全鏈路性能測試,適用於復雜的微服務架構系統。它的實現原理如下:
Takin有什么優勢?
- 業務代碼0侵入:在接入、采集和實現邏輯控制時,不需要修改任何業務代碼;
- 鏈路自動梳理:僅需部署客戶端,無需對應用進行任何改造,就可以看到所有的服務調用關系,快速理解系統架構,並且通過鏈路架構圖可以詳細了解鏈路經過的應用、緩存、中間件、DB,甚至第三方的API,每條鏈路的所有走向都一目了然;
- 數據安全隔離:在不污染生產環境業務數據情況下進行全鏈路壓測,可以對寫類型接口進行直接的性能測試;
- 安全性能壓測:在生產環境進行性能壓測,對業務不會造成影響;
- 性能瓶頸快速定位:性能測試結果直接展現業務鏈路中性能瓶頸的節點;
Takin的接入難度大么?
從我個人的使用體驗來說,6月25日開源的版本,從下載安裝配置,到正常的run起來,大概用了1天左右。
相比於復雜的全鏈路壓測實踐來說,這點時間已經很短了,但對於沒有太多生產全鏈路壓測實踐或者技術比較薄弱的測試同學來說,難度稍微有點高。
前兩天和他們技術負責人聊了會兒,了解到他們已經在做了一次重大更新,不僅優化了安裝部署的步驟,修復了老版本的一些問題。
這次還開源了鏈路自動梳理和多環境模式壓測支持的功能。下面是他們本次更新做的一些優化點:
- 一鍵安裝部署,有效降低接入成本;
- 鏈路自動梳理,快速理解系統架構;
- 多環境模式壓測支持,滿足不同使用需求;
相比於之前,這次的更新,對很多測試同學來說,差不多幾個小時就能安裝部署好,run起來。
Takin能否應用在測試環境?
生產環境進行全鏈路壓測,實際上對於大部分企業來說,是很難落地的,一方面是業務量級是否真的需要,另一方面是投入產出比。
不過測試環境做全鏈路壓測,對於很多測試同學來說,反而是很好的選擇。數列科技這次開源的更新內容里,針對不同環境開展壓測,做了專門的優化更新,大概原理如下:
主要特點如下:
- 通過鏈路自動梳理架構圖,幫助測試同學理解業務架構,不依賴開發也能搞清系統架構;
- 高效收集壓測過程的全部機器信息,無須跨多個系統獲取;
- 壓測報告可定位出異常服務節點,輔助測試同學定位性能問題;
更多信息
關於Takin,更多的信息可以看他們的官方文檔和Github,地址如下:
- Takin的githu地址:https://github.com/shulieTech/Takin
- 生產環境全鏈路壓測使用文檔:https://news.shulie.io/?p=2987
- 測試環境全鏈路壓測使用文檔:https://news.shulie.io/?p=3369