系统性能优化的常见八大误区
轉(zhuǎn)載:http://www.cnblogs.com/yunman/articles/5482129.html
一、吞吐量與響應(yīng)時(shí)間
系統(tǒng)的吞吐量反映了一個(gè)系統(tǒng)的容量,可承受的負(fù)載,很多系統(tǒng)都以這樣一個(gè)指標(biāo)來(lái)衡量系統(tǒng)的性能。而響應(yīng)時(shí)間往往更容易忽視。我認(rèn)為吞吐量更多是衡量一 個(gè)系統(tǒng)在特定壓力下的穩(wěn)定性,而響應(yīng)時(shí)間可以更好的形容系統(tǒng)性能。一個(gè)請(qǐng)求響應(yīng)時(shí)間滿足不了需求,那系統(tǒng)再高的吞吐量是沒有意義的。比如普通的網(wǎng)站頁(yè)面, 如果客戶的一個(gè)請(qǐng)求都能在200ms以內(nèi)響應(yīng),那是非常不錯(cuò),如果能在2秒內(nèi)響應(yīng),那也還行,但如果都要在20秒響應(yīng),估計(jì)沒人使用。而對(duì)于局域網(wǎng)內(nèi)的應(yīng) 用,如營(yíng)業(yè)廳收費(fèi)操作,這種響應(yīng)時(shí)間如果是2秒都會(huì)讓營(yíng)業(yè)員有明顯的不爽。
二、忽視系統(tǒng)環(huán)境差異
我們是否經(jīng)常出現(xiàn)線下性能測(cè)試非常好,線上性能很差問(wèn)題,或者是A環(huán)境好,B環(huán)境性能差。這種情況大部份是系統(tǒng)環(huán)境的差異,如兩個(gè)環(huán)境硬件不一樣,配置參數(shù)不一樣,數(shù)據(jù)規(guī)模不一樣,緩存命中率不一樣等等。在做性能測(cè)試時(shí)需要深入分析正式環(huán)境的各種數(shù)據(jù)細(xì)節(jié),然后在做性能測(cè)試時(shí)有針對(duì)性的去模擬。
三、性能測(cè)試無(wú)用論
性能測(cè)試是一個(gè)非常復(fù)雜的工作,也是最考驗(yàn)人計(jì)算機(jī)功底的工作,性能測(cè)試并不僅是學(xué)習(xí)如 何使用loadrunner或jmeter之類的工具,更多是要分析用戶及業(yè)務(wù)場(chǎng)景,估算并驗(yàn)證系統(tǒng)性能容量,找出性能瓶頸并解決。精通測(cè)試工具可以更好 的提高工作效率。之所以有些人會(huì)提出性能測(cè)試無(wú)用論,大部份因?yàn)樗J(rèn)為正式環(huán)境太復(fù)雜,無(wú)法有效模擬出正式環(huán)境的瓶頸。其實(shí)這也是性能測(cè)試的難點(diǎn),如何在 不同的環(huán)境中模擬出性能瓶頸。如果是普通測(cè)試工程師,估計(jì)只會(huì)根據(jù)業(yè)務(wù)邏輯搭建性能測(cè)試環(huán)境,并給出測(cè)試結(jié)果。如果是高級(jí)測(cè)試工程師應(yīng)該清楚系統(tǒng)架構(gòu)、應(yīng) 用邏輯、業(yè)務(wù)場(chǎng)景、數(shù)據(jù)分布、硬件性能等等,最后給出有意義的性能測(cè)試模擬場(chǎng)景和數(shù)據(jù)。
性能測(cè)試最容易忽視的是數(shù)據(jù)分布與緩存命中率。正式環(huán)境的數(shù)據(jù)分布可以通過(guò)線上數(shù)據(jù)抽樣,沒有正式數(shù)據(jù)只能根據(jù)業(yè)務(wù)評(píng)估。比如工作流應(yīng)用中個(gè)人平均待辦工單是多少?電子商務(wù)應(yīng)用中熱銷商品的評(píng)價(jià)記錄會(huì)有多少?這些數(shù)據(jù)分布對(duì)性能測(cè)試的結(jié)果有非常大的影響。
緩存命中率對(duì)性能測(cè)試結(jié)果的影響更恐怖,可能有10倍,甚至上萬(wàn)倍都不為過(guò)。常用如CPU cache對(duì)內(nèi)存的緩存,內(nèi)存對(duì)硬盤的數(shù)據(jù)緩存,memcached對(duì)db數(shù)據(jù)的緩存,瀏覽器本地對(duì)遠(yuǎn)程的緩存。我們做性能測(cè)試需要仔細(xì)分析正式的緩存命 中數(shù)據(jù),然后模擬最差值、正常值、最好值去評(píng)測(cè),最后分析出緩存命中率對(duì)真實(shí)性能的影響。
四、缺少性能量化
性能量化是指對(duì)系統(tǒng)功能或硬件的主要指標(biāo)進(jìn)行性能指標(biāo)計(jì)算,比如一個(gè)查詢請(qǐng)求的所有開銷計(jì)算,包括網(wǎng)絡(luò)開銷,應(yīng)用服務(wù)器開銷,數(shù)據(jù)庫(kù)服 務(wù)器開銷等等,或者是更細(xì)化的CPU開銷,內(nèi)存開銷,IO開銷等。性能量化還包括系統(tǒng)所使用的硬件指標(biāo),包括CPU性能,內(nèi)存容量及性能,硬盤帶寬及 IOPS,網(wǎng)絡(luò)帶寬及延時(shí)等等。沒有這些基礎(chǔ)數(shù)據(jù)是很難做性能量化,否則只能做簡(jiǎn)單的表面性能測(cè)試,給出一些感性數(shù)據(jù),準(zhǔn)確的系統(tǒng)整體性能容量評(píng)估也無(wú)從 談起。沒有扎實(shí)的性能量化基礎(chǔ)數(shù)據(jù),搞不清楚一個(gè)邏輯在各個(gè)環(huán)節(jié)開銷,那做性能優(yōu)化只能是憑感覺或經(jīng)驗(yàn)走。
五、硬件成本
在IT人的眼里硬件的費(fèi)用是很高的,軟件成本是很低的甚至可以忽略,因?yàn)橛布枰?gòu)買,基本上沒有免費(fèi)的硬件,而軟件可以選擇開源免費(fèi)的,或者自己開 發(fā),甚至使用盜版。因此在遇到性能問(wèn)題是程序員首先想到的優(yōu)化軟件性能。但在這個(gè)人工成本上升,硬件成本下降,硬件性能或容量隨摩爾定率的發(fā)展的時(shí)代,我 們也應(yīng)該重視硬件的優(yōu)化方法。
如果是服務(wù)器網(wǎng)絡(luò)瓶頸,百兆接口升級(jí)到千兆,千兆升級(jí)到多口千兆甚至是萬(wàn)兆,這種升級(jí)都可以快速解決性能問(wèn)題。單塊SATA硬盤吞吐量不夠,可以選擇 換SAS 15K硬盤,吞吐量就提升1倍,如果還不夠可以選擇多塊硬盤做RAID,實(shí)現(xiàn)一個(gè)數(shù)量級(jí)內(nèi)近線性的吞吐量提升,如果是硬盤IOPS低,可以選擇換SATA 的SSD硬盤,能提升10倍以上的IOPS,如果要求更高可以選擇換PCIe的SSD硬盤,可以提升100倍以上的IOPS。內(nèi)存不足可以增加內(nèi)存容量, 當(dāng)前單根4G,8G容量的內(nèi)存性價(jià)比都不錯(cuò)。CPU升級(jí)一般比較麻煩,因?yàn)槭艿紺PU架構(gòu)的影響,且CPU的發(fā)展較快,成本較高,所以很少做,對(duì)于老的服 務(wù)器CPU不足一般會(huì)選擇直接淘汰,重新采購(gòu)新的。
通過(guò)硬件升級(jí)可以快速解決系統(tǒng)性能問(wèn)題,對(duì)于可預(yù)估的系統(tǒng)容量性價(jià)很好。但頂配或者新出來(lái)的硬件貴得離譜,最新的硬件往往也會(huì)存在一些未知的BUG, 所以硬件升級(jí)一般不會(huì)選擇1年內(nèi)出來(lái)的全新架構(gòu)的設(shè)備,而通常選擇2年以上比較成熟的硬件性價(jià)比會(huì)更好。但是硬件升級(jí)往往會(huì)有上限,頂配或者最高性能的硬 件往往性價(jià)比不好,所以在硬件升級(jí)解決問(wèn)題后同時(shí)需要分析業(yè)務(wù)增長(zhǎng)導(dǎo)致更多硬件成本的問(wèn)題。選擇軟件優(yōu)化還是硬件優(yōu)化是一種技術(shù)成本平衡決策,有時(shí)軟件也 需要針對(duì)硬件做特定的優(yōu)化。
?
?
六、緩存的威力
緩存是好東西,基本上90%的系統(tǒng)架構(gòu)優(yōu)化都是在圍繞著如何利用好緩存。緩存真是無(wú)處不在,硬件上看,有硬盤緩存,RAID卡緩存,存儲(chǔ)緩存,主 存,NUMA特性,CPU L3-L2-L1等等。軟件架構(gòu)上看,有全局?jǐn)?shù)據(jù)緩存,私有數(shù)據(jù)緩存,連接池,應(yīng)用服務(wù)器緩存,WEB服務(wù)器緩存,CDN緩存,客戶端文件緩存,客戶端內(nèi) 存緩存等等。基本上大型系統(tǒng)都會(huì)有很多級(jí)緩存,否則需要非常高的硬件投入才能解決問(wèn)題。硬件緩存通常都比較智能,或者說(shuō)99%的情況下我們不需要修改配 置,即使修改帶來(lái)的性能提升一般也不會(huì)太多,除非你的軟件有較明顯的缺陷,你對(duì)硬件和你的軟件特性已經(jīng)了解得非常深入。 軟件緩存架構(gòu)帶來(lái)性能的提高,往往也帶來(lái)了負(fù)面的問(wèn)題,如架構(gòu)復(fù)雜化,數(shù)據(jù)同步多,數(shù)據(jù)不實(shí)時(shí),維護(hù)成本高,系統(tǒng)調(diào)試復(fù)雜等問(wèn)題,所以對(duì)于軟件架構(gòu)上任何 一個(gè)緩存架構(gòu),都需要深入分析是否有必要。我認(rèn)為如果增加一層緩存架構(gòu),至少要有5倍以上的提高提升,否則就要分析成本了。? 對(duì)于中小型系統(tǒng),不建議有復(fù)雜的緩存架構(gòu),因?yàn)樽屜到y(tǒng)能更快速發(fā)展比提供更好的性能更有意義,雜的緩存架構(gòu)往往需要投入更多的人力成本。
七、客戶第一
我不知道客戶第一是誰(shuí)提出來(lái)的,但這個(gè)詞真不能從字面上去理解,否則就會(huì)讓我們走向歪路。首先,誰(shuí)是我們的客戶,誰(shuí)是我們的直接客戶,誰(shuí)是我們的最終 客戶,付錢給我們的是否就是我們的客戶?客戶類型1與客戶類型2發(fā)生了利益沖突,我們?cè)撘哉l(shuí)為第一。重要的客戶與大部份客戶利益有沖突時(shí)如何處理。這些看 似與系統(tǒng)性能優(yōu)化無(wú)關(guān)的話題,但往往左右我們系統(tǒng)設(shè)計(jì)的方方面面。我們做的工作有沒有為了個(gè)別客戶去優(yōu)化他的界面流程或性能而讓大部份用戶認(rèn)為系統(tǒng)更復(fù)雜 或更難使用。
八、過(guò)度優(yōu)化
大家都清楚性能優(yōu)化的重要性,因此我們很多經(jīng)歷都是在做系統(tǒng)優(yōu)化,也導(dǎo)致我們有時(shí)會(huì)犯過(guò)度優(yōu)化的錯(cuò)誤。有人說(shuō)他性能優(yōu)化提高了10倍,100 倍,1000倍,但我們有時(shí)并不需要這種做法,這種事情更多是自己在優(yōu)化技能上的一個(gè)學(xué)習(xí)。我們?cè)谧鰞?yōu)化時(shí)應(yīng)該多問(wèn)一些問(wèn)題 :你的優(yōu)化讓系統(tǒng)有什么變化:
你的優(yōu)化有沒有讓系統(tǒng)更復(fù)雜了,以后的維護(hù)成本高了一些?
你的優(yōu)化是否對(duì)大部份業(yè)務(wù)場(chǎng)景有效,還是只是為了一小部份場(chǎng)景優(yōu)化而讓其它主業(yè)務(wù)變慢或變復(fù)雜了?
你的優(yōu)化對(duì)客戶體驗(yàn)有感覺嗎?
你的優(yōu)化方法可持續(xù)有效嗎,還是業(yè)務(wù)邏輯稍有變化就失效了?
......
我認(rèn)為系統(tǒng)優(yōu)化一定要有一個(gè)目標(biāo),而不是一味的提高性能,因?yàn)樵谛阅軆?yōu)化的背后一定會(huì)帶來(lái)或多或少的系統(tǒng)復(fù)雜度。系統(tǒng)性能優(yōu)化在滿足需求的情況下,需要開始衡量是否會(huì)讓系統(tǒng)架構(gòu)擴(kuò)展性更差,或系統(tǒng)穩(wěn)定性變差,可維護(hù)性變差等問(wèn)題。
隨筆有些是自己寫的,有些是根據(jù)網(wǎng)上的東西自己整理的,文章基本都是別人的,只是為方便查看復(fù)制到那里轉(zhuǎn)載于:https://www.cnblogs.com/ceshi2016/p/9052807.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的系统性能优化的常见八大误区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序加密请求
- 下一篇: CVE-2018-8120 Window