運維中性能優(yōu)化的常見模式及趨勢
作者介紹
陳顯銘(螞蟻金服技術(shù)專家,藝名山丘,公眾號:loopfork)
專注碼磚七年之久,喜歡碼磚,喜歡扔錘子(山丘之王出自寒冰王座)。常混跡中生代技術(shù)群(公眾號:freshmanTechnology)、高效運維(公眾號:greatops)等高大上社群。專注高可用、分布式、性能優(yōu)化、穩(wěn)定性、高效運維等方向。自我評價:不算出名,但是對于技術(shù)有一點點情懷,愛交友,歡迎技術(shù)討論。
性能優(yōu)化的價值
從上圖可以看出幾個優(yōu)點:
◆ 成本降低
◆ 穩(wěn)定性提升
◆ 用戶體驗體驗提升
性能優(yōu)化的缺點有:維護(hù)成本增加,代碼可能變復(fù)雜,結(jié)構(gòu)可能變復(fù)雜,技術(shù)棧可能變復(fù)雜。
性能優(yōu)化的兩種模式
個人總結(jié),性能優(yōu)化整體上可以分為兩類:單應(yīng)用優(yōu)化和結(jié)構(gòu)型優(yōu)化。
◆ 單應(yīng)用優(yōu)化,關(guān)注單系統(tǒng)瓶頸,通過解決單系統(tǒng)瓶頸提升性能。
◆ 結(jié)構(gòu)型優(yōu)化,通過改造鏈路結(jié)構(gòu)和配比,進(jìn)行整體性能的優(yōu)化。
單應(yīng)用優(yōu)化常見步驟
優(yōu)化基本思路(閉環(huán)):
1.確定性能瓶頸/熱點;
2.確定優(yōu)化方案;
3.實施、反饋優(yōu)化情況。
確定性能瓶頸/熱點的常見方法:
1.性能壓測:通過工具/人肉等方式,量化運行時的性能情況。
2.業(yè)務(wù)/代碼梳理:通過代碼走讀,發(fā)現(xiàn)資源消耗熱點(牛B的人可以這么干);通過統(tǒng)計代碼對資源的操作,量化代碼對資源的消耗(比如一個業(yè)務(wù)操作會進(jìn)行多少次數(shù)據(jù)庫調(diào)用,會進(jìn)行多少次服務(wù)運算等方式)。
壓測時常觀察的內(nèi)容及工具有(舉例Java應(yīng)用):
1.壓測工具:jmeter
2.內(nèi)存的使用情況:mat,gc日志,vmstat
3.IO情況:iostat
4.網(wǎng)絡(luò)情況:netstat
5.熱點代碼:jprofile,btrace,jstack,jstat
6.CPU情況:top
優(yōu)化的常見手段或模式:
1.靜態(tài)化:動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)分離。
2.異步化:使用異步化減少主流程中的非關(guān)鍵業(yè)務(wù)邏輯。
3.并行化:使用多線程并發(fā)處理,縮短響應(yīng)時間。
4.內(nèi)存優(yōu)化:減少對象大小,減少對象創(chuàng)造,數(shù)據(jù)模型優(yōu)化。
5.去重復(fù)運算:業(yè)務(wù)邏輯優(yōu)化,或者使用緩存。
6.減少數(shù)據(jù)庫操作:數(shù)據(jù)冗余,數(shù)據(jù)緩存等。
7.縮短數(shù)據(jù)庫事務(wù):短事務(wù),異步化,最終一致性等方式可以考慮。
8.精簡代碼邏輯:去除冗余代碼,諸如過度設(shè)計檢查等代碼。
9.精簡日志操作:日志大小要關(guān)注,注意IO上的瓶頸;日志太多,說明生成的string也會多,也增加了gc負(fù)擔(dān)。
等等。
結(jié)構(gòu)型優(yōu)化常見步驟
此部分介紹的內(nèi)容,在很多網(wǎng)站架構(gòu)變遷的文章中介紹過,這里通過圖的方式展現(xiàn)出來。
每個階段都有適用的軟件架構(gòu),基于成本、建設(shè)復(fù)雜度、維護(hù)成本的考慮,不必強(qiáng)求一開始建設(shè)很完整的技術(shù)體系。
個人認(rèn)為,性能是驅(qū)動應(yīng)用體系研究的重要驅(qū)動力,可以通過下面應(yīng)用結(jié)構(gòu)演進(jìn)看出來。
1.單應(yīng)用時代常見瓶頸先發(fā)生在DB。
2.單應(yīng)用時代常見***個解法是使用緩存(偏向應(yīng)用級別緩存)。
3.單應(yīng)用時代常見***個解法是獨立緩存服務(wù)(集中式緩存,如memcache)。
4.單應(yīng)用集中式部署帶來應(yīng)用集群處理能力提升。
5.單應(yīng)用集中式部署部署后的DB瓶頸。
6.單應(yīng)用集中式部署部署后的DB瓶頸解法(數(shù)據(jù)庫拆分、讀寫分離)。
7.服務(wù)化拆分應(yīng)對更大范圍請求量。
8.服務(wù)化集群部署模式。
兩個結(jié)構(gòu)優(yōu)化的案例
◆ 處理單點/網(wǎng)絡(luò)瓶頸的可行方式
◆ 處理數(shù)據(jù)庫連接池瓶頸的可行手段
總結(jié):性能/應(yīng)用優(yōu)化的幾個趨勢