前不久國內(nèi)知名的系統(tǒng)高可用專家數(shù)列科技宣布開源旗下核心產(chǎn)品能力,對外開放生產(chǎn)全鏈路壓測平臺產(chǎn)品的源代碼熬尺,并正式命名為:Takin夺欲。
目前诸典,該項目已在Github
上發(fā)布開源描函,作為國內(nèi)首款開源的全鏈路壓測平臺,Takin的開源將為更多企業(yè)提供超低門檻狐粱、超低成本舀寓、超高效率的性能保障能力。
1. 什么是生產(chǎn)環(huán)境全鏈路壓測?
全鏈路壓測簡單來說肌蜻,就是基于實際的生產(chǎn)業(yè)務(wù)場景互墓、系統(tǒng)環(huán)境,模擬海量的用戶請求和數(shù)據(jù)對整個業(yè)務(wù)鏈進行壓力測試蒋搜,并持續(xù)調(diào)優(yōu)的過程篡撵,本質(zhì)上也是性能測試的一種手段。
通過生產(chǎn)環(huán)境全鏈路壓測豆挽,真實模擬“風(fēng)險”業(yè)務(wù)行為場景育谬,實時監(jiān)控系統(tǒng)表現(xiàn),提前識別和快速定位系統(tǒng)的中的不確定因素帮哈,并對不確定因素進行處理膛檀,優(yōu)化系統(tǒng)資源配比,使用最低硬件成本娘侍,使系統(tǒng)從容面對各種“風(fēng)險”場景咖刃,達到預(yù)期的系統(tǒng)性能目標。通過這種方法憾筏,在生產(chǎn)環(huán)境上落地常態(tài)化穩(wěn)定壓測體系嚎杨,實現(xiàn)IT系統(tǒng)的長期性能穩(wěn)定治理。
全鏈路壓測系統(tǒng)架構(gòu)設(shè)計大體類似如下:
2. 我們?yōu)槭裁葱枰錾a(chǎn)環(huán)境的性能測試
可能會有人想氧腰,性能測試不應(yīng)該是在測試環(huán)境進行嗎枫浙,為什么需要在生產(chǎn)環(huán)境 上面做性能測試呢?
特別是微服務(wù)架構(gòu)在現(xiàn)代系統(tǒng)架構(gòu)中已被普遍使用容贝,與此同時自脯,隨著業(yè)務(wù)的擴張和微服務(wù)數(shù)量的增加,它使系統(tǒng)變得非常復(fù)雜以至于人無法理解斤富,而且膏潮,很多業(yè)務(wù)邏輯本身也非常復(fù)雜。業(yè)務(wù)復(fù)雜性和系統(tǒng)復(fù)雜性使保證和維持整個系統(tǒng)的高可用性非常困難满力,同時焕参,它對研發(fā)效率也產(chǎn)生負面影響轻纪。
為了保證系統(tǒng)的高可用性,我們通常對測試環(huán)境或生產(chǎn)環(huán)境的單一服務(wù)進行性能測試叠纷,但是刻帚,測試環(huán)境與在生產(chǎn)環(huán)境區(qū)別很大,單個服務(wù)也不能代表整個服務(wù)鏈路涩嚣,因此崇众,它們都不能保證系統(tǒng)的高可用,通常也無法給出準確的容量評估結(jié)果航厚。
歸結(jié)起來顷歌,主要原因有三:
1. 微服務(wù)很復(fù)雜
和單體架構(gòu)相比,微服務(wù)架構(gòu)增加了業(yè)務(wù)系統(tǒng)的復(fù)雜性幔睬,因為它的子服務(wù)數(shù)量更多眯漩,并且涉及更多的不同技術(shù)棧和框架。
2. 業(yè)務(wù)系統(tǒng)也很復(fù)雜
很多業(yè)務(wù)本身的業(yè)務(wù)邏輯也很復(fù)雜麻顶,其中很多業(yè)務(wù)涉及比較長的業(yè)務(wù)流程赦抖,例如電商業(yè)務(wù)。
3. 服務(wù)與服務(wù)之間的調(diào)用關(guān)系也很復(fù)雜
在微服務(wù)架構(gòu)的系統(tǒng)中辅肾,服務(wù)之間的調(diào)用關(guān)系非常復(fù)雜队萤,每次服務(wù)的發(fā)布和更新都可能影響整個系統(tǒng)的可用性,并使開發(fā)人員難以頻繁發(fā)布新版本宛瞄。
如下這張圖中是一張典型微服務(wù)調(diào)用鏈路浮禾,如果服務(wù)數(shù)量再擴大幾十倍,想象一下份汗,調(diào)用關(guān)系圖又會變成何種樣子:
2. 性能測試演變的四個階段
性能測試不同公司的實踐程度皆有差異盈电,但整的來說,演進過程主要分為從線下到線上四個階段:
1.需求驅(qū)動壓測階段
需求驅(qū)動壓測杯活,大多采用簡單的工具進行單接口或者單系統(tǒng)壓測匆帚,也能進行一些簡單的性能問題分析,但很多時候都沒有專門的測試團隊旁钧,需要開發(fā)進行自主壓測吸重。這個階段,雖然有需求驅(qū)動歪今,但大多數(shù)都是憑靠經(jīng)驗法+人為拍腦袋來決定如何做嚎幸,做什么。
2.性能回歸體系階段
組建專門的性能測試團隊搭建線下性能測試平臺寄猩,且會結(jié)合研發(fā)流程形成一些規(guī)范化體系嫉晶,并會利用一些開源工具、商業(yè)工具,甚至自主開發(fā)性能測試平臺替废。
前兩個階段箍铭,主要性能測試開展都是集中在線下環(huán)境,如此同時椎镣,引出了一些問題诈火,其中比較有代表性:
很多公司線下做了性能測試,但到了線上還是存在很多問題状答,以測試環(huán)境的壓測結(jié)果來評估線上環(huán)境冷守,效果不佳。
業(yè)務(wù)增長剪况、營銷活動增加使測試工程師對活動保障心里沒底教沾,每逢營銷活動問題頻發(fā)影響公司形象。
性能壓測效率無法滿足增長的性能壓測需求译断,導(dǎo)致部分項目沒有性能壓測直接上線,線上故障頻發(fā)或悲。
為了解決測試環(huán)境性能壓測的不確定性孙咪,性能壓測開始向生產(chǎn)環(huán)境進行演變,進入生產(chǎn)環(huán)境性能壓測階段巡语。
3.生產(chǎn)只讀業(yè)務(wù)壓測階段
在測試環(huán)境回歸體系階段上增加了生產(chǎn)只讀業(yè)務(wù)的性能壓測翎蹈,對生產(chǎn)環(huán)境壓測進行實踐,搭建生產(chǎn)環(huán)境性能壓測回歸體系男公,具備只讀業(yè)務(wù)生產(chǎn)壓測的性能問題分析能力荤堪。
4.全業(yè)務(wù)全鏈路壓測階段
在上一個階段的基礎(chǔ)上增加寫入業(yè)務(wù)的性能壓測,進而開展對全業(yè)務(wù)實行全鏈路壓測枢赔,具備全業(yè)務(wù)的性能壓測能力澄阳、問題定位能力,做的更好一些還會增加系統(tǒng)防護能力踏拜,比如降級碎赢、限流、故障演練等速梗。
3. Takin介紹
Takin是一款基于Java
的開源系統(tǒng)肮塞,可嵌入到各個服務(wù)節(jié)點,實現(xiàn)生產(chǎn)環(huán)境的全鏈路性能測試姻锁,尤其適合面向微服務(wù)架構(gòu)系統(tǒng)枕赵。通過Takin,系統(tǒng)中的中間件和應(yīng)用可以在生產(chǎn)環(huán)境識別真實流量和測試流量位隶,保證它們進入不同的數(shù)據(jù)庫拷窜,實現(xiàn)真實和測試流量的現(xiàn)網(wǎng)隔離。
Takin具備以下4個特點:
業(yè)務(wù)代碼0侵入:在接入、采集和實現(xiàn)邏輯控制時装黑,不需要修改任何業(yè)務(wù)代碼副瀑;
數(shù)據(jù)安全隔離:可以在不污染生產(chǎn)環(huán)境業(yè)務(wù)數(shù)據(jù)情況下進行全鏈路性能測試,可以在生產(chǎn)環(huán)境對寫類型接口進行直接的性能測試恋谭;
安全性能壓測:在生產(chǎn)環(huán)境進行性能壓測糠睡,對業(yè)務(wù)不會造成影響;
性能瓶頸快速定位:性能測試結(jié)果直接展現(xiàn)業(yè)務(wù)鏈路中性能瓶頸的節(jié)點疚颊。
Takin結(jié)構(gòu)
項目地址:
https://github.com/shulieTech/Takin
或者
https://gitee.com/mirrors/Takin.git
4. Takin安裝及使用
1?準備一臺裝有docker的服務(wù)器狈孔,配置盡量要高些。
2?修改 Docker 鏡像地址為阿里云:vim /etc/docker/daemon.json
,更新為:
{
"registry-mirrors": ["<https://q2gr04ke.mirror.aliyuncs.com>"]
}
配置生效:systemctl daemon-reload
3? 下載拉取鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/forcecop/forcecop:v1.0.0
4材义、啟動鏡像
docker run -d -p 80:80 -p 2181:2181 -p 3306:3306 -p 6379:6379 -p 8086:8086 -p 9000:9000 -p 10032:10032 -p 6628:6628 -p 8000:8000 -p 6627:6627 -p 8888:8888 -p 29900-29999:29900-29999 registry.cn-hangzhou.aliyuncs.com/forcecop/forcecop:v1.0.0
-d是后臺啟動均抽,-p是需要開放的端口,容器運行初始化的時候需要安裝一些必要的組件需要十分鐘的樣子其掂,-d可以忽略后臺組件的安裝信息油挥,如果想要查看安裝信息可以去除-d參數(shù)。
5款熬、進入容器深寥,更改配置:docker exec -it 9754b1ff1491 bash
6、修改serverUrl:vi /data/apps/dist/tro/index.html贤牛,
惋鹅,將serverUrl配置成服務(wù)器本機IP地址。
7殉簸、重啟Nginx服務(wù):nginx -s reload
闰集。
8、配置sugre-deploy啟動命令般卑,其中說明一下武鲁,sugre-deploy為大數(shù)據(jù)平臺模塊。
[root@30e961d36c91 data]# ps -ef | grep surge
root 4336 1 66 17:48 ? 00:03:20 java -jar surge-deploy-1.0-jar-with-dependencies.jar {"172.17.0.2":"192.168.1.138"}
root 4574 18 0 17:53 ? 00:00:00 grep --color=auto surge
[root@30e961d36c91 data]# kill -9 4336
[root@30e961d36c91 data]# ps -ef | grep surge
root 4582 18 0 17:54 ? 00:00:00 grep --color=auto surge
9椭微、更改sugre-deploy的啟動命令:vi /data/install.sh
,將sugre-deploy的啟動命令參數(shù)“172.17.0.2”對應(yīng)的value(192.168.1.138這個)更改為宿主機的IP洞坑,保存。
10蝇率、重啟sugre-deploy
nohup java -jar surge-deploy-1.0-jar-with-dependencies.jar '{"172.17.0.2":"192.168.1.220"}' > surge.out 2>&1 &
11迟杂、進入壓測控制臺
輸入壓測控制臺地址:http://docker宿主機IP/tro/#/login
示例: http://192.168.1.220/tro/#/login
默認賬號密碼:賬號:admin 密碼:pamirs@2020
如果能看見如上圖,恭喜您本慕,成功安裝了Takin排拷,接下來就可以開啟壓測之旅啦~
利用Takin
在壓測結(jié)束后,系統(tǒng)會自動生成一份壓測報告锅尘,將本次壓測所產(chǎn)生的數(shù)據(jù)進行記錄和存檔监氢,可隨時通過查看報告來回溯壓測時的性能指標變化情況布蔗,分析性能瓶頸與定位定能問題。
如下圖所示:
可查看壓測全局或單個業(yè)務(wù)活動的TPS浪腐、RT纵揍、成功率、SA的指標趨勢议街。
請求流量跟蹤:
官方快速入手指南:
https://docs.shulie.io/docs/opensource