32壓力測試怎樣設(shè)計(jì)全鏈路平臺share_第1頁
32壓力測試怎樣設(shè)計(jì)全鏈路平臺share_第2頁
32壓力測試怎樣設(shè)計(jì)全鏈路平臺share_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、32-壓測試:怎樣設(shè)計(jì)路壓測試平臺?你好,我是。經(jīng)過兩節(jié)課的學(xué)習(xí),我們已經(jīng)搭建了服務(wù)端和客端的,通過的報(bào)表和些規(guī)則的設(shè)置,你可以實(shí)時(shí)地跟蹤和解決垂直系統(tǒng)中出現(xiàn)的問題了。不過,你不能掉以輕,因?yàn)橹荒馨l(fā)現(xiàn)前系統(tǒng)中已經(jīng)存在的問題,對于未來可能發(fā)的性能問題是能為的。旦你的系統(tǒng)流量有的增,如類似“雙”的流量,那么你在臨性能問題時(shí)就可能會措。為了解決后顧之憂,你需要了解在流量增若倍的時(shí)候,系統(tǒng)的哪些組件或者服務(wù)會成為整體系統(tǒng)的瓶頸點(diǎn),這時(shí)你就需要做次路的壓測試。那么,什么是壓測試呢?要如何來做路的壓測呢?這兩個(gè)問題就是本節(jié)課重點(diǎn)講解的內(nèi)容。什么是壓測試壓測試(簡稱為壓測)這個(gè)名詞,你在業(yè)界的中定聽過很多次

2、,當(dāng)然了,你也可能在項(xiàng)的研發(fā)過程中做過壓測試,所以,對于你來說,壓測試并不陌。不過,讓你回想下,是怎么做壓測試的?是不是像很多同學(xué)樣:先搭建套與正式環(huán)境功能相同的測試環(huán)境,并且導(dǎo)或者成批測試數(shù)據(jù),然后在另臺服務(wù)器,啟動多個(gè)線程并發(fā)地調(diào)需要壓測的接(接的參數(shù)般也會設(shè)置成相同的,如,想要壓測獲取商品信息的接,那么壓測時(shí)會使同個(gè)商品ID)。最后,通過統(tǒng)計(jì)后,直接交差?志,或者查看測試環(huán)境的系統(tǒng),來最終壓測QPS是多少之這么做壓測試其實(shí)是不正確的,錯(cuò)誤之處主要有以下點(diǎn):1.先,做壓測試時(shí),最好使線上的數(shù)據(jù)和線上的環(huán)境,因?yàn)?,你法確定搭建的測試環(huán)境與正式環(huán)境的差異,是否會影響到壓測試的結(jié)果;2.其次,壓

3、測試時(shí)不能使模擬的請求,是要使線上的流量。你可以通過拷流量的式,把線上流量拷份到壓測試環(huán)境。因?yàn)槟M流量的較的影響。模型,和線上流量相差很,會對壓測試的結(jié)果產(chǎn)如,你在獲取商品信息的時(shí)候,線上的流量會獲取不同商品的數(shù)據(jù),這些商品的數(shù)據(jù)有中了緩存,有的沒有命中緩存。如果使同個(gè)商品ID來做壓測試,那么只有第次請求沒有命中緩存,在請求之后會將數(shù)據(jù)庫中的數(shù)據(jù)參考性了。到緩存,那么后續(xù)的請求就定會命中緩存了,那么這種壓測試的數(shù)據(jù)就不具備3.不要從臺服務(wù)器發(fā)起流量,這樣很容易達(dá)到這臺服務(wù)器性能瓶頸,從導(dǎo)致壓測試的QPS上不去,最終影響壓測試的結(jié)果。且,為了盡量真實(shí)地模擬請求,我們傾向于把流量產(chǎn)的,放在離更近

4、的位置,如放在CDN節(jié)點(diǎn)上。如果沒有這個(gè)條件,那么可以放在不同的機(jī)測試結(jié)果的真實(shí)性。,這樣可以盡量保證壓之所以有很多同學(xué)出現(xiàn)這個(gè)問題,主要是對壓測試的概念沒有完全理解,以為只要是使多個(gè)線程并發(fā)的請求服務(wù)接,就算是對接進(jìn)壓測試了。那么究竟什么是壓測試呢?壓測試指的是,在并發(fā)流量下,進(jìn)的測試,測試員可以通過觀察系統(tǒng)在峰值負(fù)載下的表現(xiàn),從找到系統(tǒng)中存在的性能隱患。與樣,壓測試是種常的,發(fā)現(xiàn)系統(tǒng)中存在問題的式,也是保障系統(tǒng)可性和穩(wěn)定性的重要段。在壓測試的過程中,我們不能只某個(gè)核模塊來做壓測,需要將接層、所有后端服務(wù)、數(shù)據(jù)庫、緩存、消息隊(duì)列、中間件以及依賴的第三服務(wù)系統(tǒng)及其,壓測試的標(biāo)之中。因?yàn)?,旦的?/p>

5、增加,包含上述組件服務(wù)的整個(gè)鏈路都會受到不確定的流量的沖擊,因此,它們都需要依賴壓測試來發(fā)現(xiàn)可能存在的性能瓶頸,這種測”。整個(gè)調(diào)鏈路執(zhí)的壓測試也稱為“路壓由于在互聯(lián)項(xiàng)能迭代的速度很快,系統(tǒng)的復(fù)雜性也變得越來越,新增加的功能和代碼很可能會成為新的性能瓶頸點(diǎn)。也許半年前做壓測試時(shí),可以承擔(dān)每秒1000次請求,現(xiàn)在很可能就承擔(dān)每秒800次請求了。所以,壓測試應(yīng)該作為系統(tǒng)穩(wěn)定性保障的常規(guī)段,周期性地進(jìn)。但是,通常做次路壓測試。需要DBA、運(yùn)維、依賴服務(wù)、中間件架構(gòu)等多個(gè)團(tuán)隊(duì),起協(xié)調(diào)進(jìn),論是成本還是協(xié)調(diào)的成本都較。同時(shí),在壓測試的過程中,如果沒有很好的機(jī)制,那么還會對線上系統(tǒng)造成不利的影響。為了解決這些

6、問題,我們需要搭建套動化的臺,來降低成本和險(xiǎn)。路壓測平如何搭建路壓測平臺搭建路壓測平臺,主要有兩個(gè)關(guān)鍵點(diǎn)。點(diǎn)是流量的。由于壓測試是在正式環(huán)境進(jìn),所以需要區(qū)分壓測試流量和正式流量,這樣可以針對壓測試的流量做單獨(dú)的處理。另點(diǎn)是險(xiǎn)的。也就是,盡量避免壓測試對于正常的影響,因此,般來說路壓測平臺需要包含以下個(gè)模塊:流量構(gòu)造和產(chǎn)模塊;壓測數(shù)據(jù)模塊;系統(tǒng)健康度檢查和壓測流量預(yù)模塊。整體壓測平臺的架構(gòu)圖可以是下這樣的:為了讓你能夠更清晰地了解每個(gè)模塊是如何實(shí)現(xiàn)的,便你來設(shè)計(jì)適合業(yè)務(wù)的對壓測平臺的每個(gè)模塊做更細(xì)致地介紹。先來看看壓測試的流量是如何產(chǎn)的。路壓測平臺,我會壓測數(shù)據(jù)的產(chǎn)般來說,我們系統(tǒng)的流量是來于客

7、端的HP請求,所以,我們會考慮在系統(tǒng)峰期時(shí),將這些流量拷份,在經(jīng)過些流量的作之后(如過濾些效的請求),將數(shù)據(jù)在像是HBase、MongoDB這些NoSQL組件,或者亞遜S3這些云服務(wù)中,我們稱之為流量數(shù)據(jù)。這樣,當(dāng)我們要壓測的時(shí)候,就可以從這個(gè)中獲取數(shù)據(jù),將數(shù)據(jù)切分多份后下發(fā)到多個(gè)壓測節(jié)點(diǎn)上了,在這,強(qiáng)調(diào)個(gè),你需要特殊注意的點(diǎn)。先,我們可以使多種式來實(shí)現(xiàn)流量的拷。最簡單的種式:直接拷負(fù)載均衡服務(wù)器的志,數(shù)據(jù)就以本的式寫到流量數(shù)據(jù)中,但是這樣產(chǎn)的數(shù)據(jù)在發(fā)起壓測時(shí),需要寫的腳本來志,會增加壓測時(shí)候的成本,不太建議使。另種式:通過些開源的具來實(shí)現(xiàn)流量的拷。這,我推薦款輕型的流量拷具GoRelay,它

8、可以劫持本機(jī)某個(gè)端的流量,將它們在件中,傳送到流量數(shù)據(jù)中。在壓測時(shí),你也可以使這個(gè)具進(jìn)的流量回放,這樣就可以實(shí)現(xiàn)對正式環(huán)境的壓測試了。其次,如上中提到的,我們在下發(fā)壓測流量時(shí),需要保證下發(fā)流量的節(jié)點(diǎn)與更加接近,起碼不能和服務(wù)部署節(jié)點(diǎn)在同個(gè)機(jī),這樣可以盡量保證壓測數(shù)據(jù)的真實(shí)性。另外,我們還需要對壓測流量染,也就是增加壓測標(biāo)記。在實(shí)際項(xiàng)中,我會在HP的請求頭中增加個(gè)標(biāo)記項(xiàng),如說叫做is stress test,在流量拷之后,批量在請求中增加這個(gè)標(biāo)記項(xiàng),再寫到數(shù)據(jù)流量中。數(shù)據(jù)如何將壓測流量拷下來的同時(shí),我們也需要考慮對系統(tǒng)做改造,以實(shí)現(xiàn)壓測流量和正式流量的就會盡量避免壓測對線上系統(tǒng)的影響,般來說,我

9、們需要做兩的事情。,這樣來,數(shù)據(jù)的請求(般稱之為量),我們會某些不能壓測的服務(wù)或者組件,做Mock或者特殊的處理。舉個(gè)例。在業(yè)務(wù)開發(fā)中,我們般會依據(jù)請求,的為,如,請求了某個(gè)商品的,我們會這個(gè)商品多了次瀏覽的為,這些為數(shù)據(jù)會寫份單獨(dú)的數(shù)據(jù)志中,再傳輸給數(shù)據(jù)分析部,形成業(yè)務(wù)報(bào)表給到或者板做業(yè)務(wù)的分析決策。在壓測的時(shí)候,肯定會增加這些為數(shù)據(jù),如原本天商品的瀏覽為是億次,壓測之后變成了億次,這樣就會對業(yè)務(wù)報(bào)表產(chǎn)影響,影響后續(xù)的為做特殊處理,不再到數(shù)據(jù)志中。向的決策。因此,我們對于這些壓測產(chǎn)的再如,我們系統(tǒng)會依賴些推薦服務(wù),推薦些你可能感的商品,但是這些數(shù)據(jù)的展有個(gè)特點(diǎn)就是,展過的商品就不再會被推薦出

10、來。如果你的壓測流量經(jīng)過這些推薦服務(wù),量的商品就會被壓測流量請求到,線上的就再看到這些商品了,也就會影響推薦的效果。所以,我們需要Mock這些推薦服務(wù),讓不帶有壓測標(biāo)記的請求經(jīng)過推薦服務(wù),讓帶有壓測標(biāo)記的請求經(jīng)過Mock服務(wù)。搭建Mock服務(wù),你需要:這些Mock服務(wù)最好部署在真實(shí)服務(wù)所在的機(jī)房,這樣可以盡量模擬真實(shí)的服務(wù)部署結(jié)構(gòu),提壓測結(jié)果的真實(shí)性。另,寫數(shù)據(jù)的請求(般稱之為上流量),我們會把壓測流量產(chǎn)的數(shù)據(jù),寫到影庫,也就是和線上數(shù)據(jù)建式:,完全的份系統(tǒng)中。不同的類型,我們會使不同的影庫的搭1.如果數(shù)據(jù)在MySQL中,我們可以在同個(gè)MySQL實(shí)例,不同的Schema中創(chuàng)建套和線上相同的庫表

11、結(jié)構(gòu),并且把線上的數(shù)據(jù)也導(dǎo)進(jìn)來。如果數(shù)據(jù)是放在Redis中,我們對壓測流量產(chǎn)的數(shù)據(jù),增加個(gè)統(tǒng)的前綴,2.3.在同份中。還有些數(shù)據(jù)會在Elasticsearch中,這部分?jǐn)?shù)據(jù),我們可以放在另外個(gè)單獨(dú)的索引表中。通過對量的特殊處理以及對上流量增加影庫的式,我們就可以實(shí)現(xiàn)壓測流量的了。壓測試如何實(shí)施在拷了線上流量和完成了對線上系統(tǒng)的改造之后,我們就可以進(jìn)壓測試的實(shí)施了。在此之前,般會設(shè)個(gè)壓測試的標(biāo),如說,整體系統(tǒng)的QPS需要達(dá)到每秒20萬。不過,在壓測時(shí),下把請求量增加到每秒20萬次,是按照定的步(如每次壓測增加萬QPS),逐漸地增加流量。在增加次流量之后,讓系統(tǒng)穩(wěn)定運(yùn)段時(shí)間,觀在性能上的表現(xiàn)。如果

12、發(fā)現(xiàn)依賴的服務(wù)或者組件出現(xiàn)了瓶頸,可以先減少壓測流量,如,回退到上次壓測的QPS,保證服務(wù)的穩(wěn)定,再此服務(wù)或者組件進(jìn)擴(kuò)容,然后再繼續(xù)增加流量壓測。為了能夠減少壓測試過程中,投成本,可以開發(fā)個(gè)流量的組件,在這個(gè)組件中,預(yù)先設(shè)定些性能閾值。如,容器的CPU使率的閾值可以設(shè)定為60%70%;系統(tǒng)的平均響應(yīng)時(shí)間的上限可以設(shè)定為1秒;系統(tǒng)慢請求的例設(shè)置為1%等等。性能達(dá)到這個(gè)閾值之后,流量組件可以及時(shí)發(fā)現(xiàn),并且通知壓測流量下發(fā)組件減少壓測流量,并且給到開發(fā)和運(yùn)維的同學(xué),開發(fā)和運(yùn)維同學(xué)就迅速地排查性能瓶頸,在解決問題或者擴(kuò)容之后再繼續(xù)執(zhí)壓測。業(yè)界關(guān)于路壓測平臺的探索有很多,些如阿、京東、美團(tuán)和都有了適合業(yè)

13、務(wù)的路壓測平臺。在我看來,這些壓測平臺萬變不離其宗,都是經(jīng)過流量拷、流量染、熔斷等步驟,與本課程中介紹的核思想都是相通的。因此,你在考慮研適合項(xiàng)的路壓測平臺時(shí),也可以遵循這個(gè)成套路。課程結(jié)本節(jié)課,我?guī)懔私饬俗鰤簻y試常的誤區(qū),以及動化的的重點(diǎn)是:路壓測平臺的搭建過程,這你需要了解1.2.壓測試是種發(fā)現(xiàn)系統(tǒng)性能隱患的重要段,所以應(yīng)該盡量使正式的環(huán)境和數(shù)據(jù);對壓測的流量需要增加標(biāo)記,這樣就可以通過Mock第三依賴服務(wù)和影庫的式來實(shí)現(xiàn)壓測數(shù)據(jù)和正式數(shù)據(jù)的;3.壓測時(shí),應(yīng)該實(shí)時(shí)地對系統(tǒng)性能指標(biāo)做式環(huán)境產(chǎn)影響。和告警,及時(shí)地對出現(xiàn)瓶頸的或者服務(wù)擴(kuò)容,避免對正這套路的壓測試系統(tǒng)對于我們來說有三的價(jià)值:其,

14、它可以幫助我們發(fā)現(xiàn)系統(tǒng)中可能出現(xiàn)的性能瓶頸,便我們提前準(zhǔn)備預(yù)案來應(yīng)對;其次,它也可以為我們做容量評估,提供數(shù)據(jù)上的撐;最后,我們也可以在壓測的時(shí)候做預(yù)案演練,因?yàn)閴簻y般會安排在流量的低峰期進(jìn),這樣我們可以降級些服務(wù)來驗(yàn)證預(yù)案效果,并且可以盡量減少對線上的影響。所以,隨著你的系統(tǒng)流量的快速增,你也需要及時(shí)考慮搭建這么套路壓測平臺,來保證你的系統(tǒng)的穩(wěn)定性。課思在實(shí)際的作中,你的系統(tǒng)的壓測試是如何進(jìn)的呢?在壓測試的過程中發(fā)現(xiàn)了哪些性能瓶頸點(diǎn)呢?歡迎在留區(qū)與我你的經(jīng)驗(yàn)。最后,感謝你的閱讀,如果這篇章讓你有所收獲,也歡迎你將它給的朋友。精選留:邊 2019-12-06 01:02:29我所在的團(tuán)隊(duì),因?yàn)闆]有提供影庫,所以直做不起來真正的路壓測。的很美好,就因?yàn)闆]有,所有的東西都成了泡影。另外,業(yè)務(wù)系統(tǒng)對于系統(tǒng)改造持壓測也不持,這就造成法實(shí)施。所以前的路壓測都是固定的個(gè)賬號,個(gè)商品。得到的結(jié)果度也有限 2贊你凈瞎說 2019-12-06 10:33:03師,有個(gè)問題想請教下,關(guān)于中說的將壓測試產(chǎn)的數(shù)據(jù)寫到影庫,redis中的key前綴區(qū)分,這是需要改代碼做兼容嗎?我們現(xiàn)在的做法是代碼兼容,如,開了mock之后,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論