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