架構 構建高效能的網站
目的
效能調優的步驟
按模組調優的基本方案
效能調優的一般性原則
效能調優的常用方案
效能調優的步驟
1 衡量系統現狀(通過效能測試得到效能指標)
2 設定調優目標
3 定址效能瓶頸
4 效能調優(本節內容)
5 調優完畢後,衡量是否達到目標
主要針對每個模組進行優化,前端優化,瀏覽器優化,程式碼優化,儲存優化(注意:方案不是直接套用,需結合實際業務場景來確定較為合適的方案)
每個模組的優化方案
1 前端優化 網站業務邏輯之前的部分
2 瀏覽器優化 減少http請求數,使用瀏覽器快取,啟用壓縮,CSS,JS位置,JS非同步,減少cookie傳輸,CDN加速,反向代理
3 程式碼優化 多執行緒,資源複用(物件池,執行緒池),良好的資料結構,JVM呼叫,單例,cache等
4 儲存優化 快取,固態硬碟,光纖傳輸,優化讀寫,磁碟冗餘,分散式儲存(hdfs),nosql(非結構化)
效能調優的一般性原則
1 依賴資料而不是憑空猜測(第一原則) 當懷疑效能有問題時,應該通過測試,日誌,profile來分析(系統資源,程式程式碼,伺服器配置) 確定性能瓶頸
2 忌過早優化
3 忌過度優化
4 效能優化是持久戰
5 選擇合適的衡量標準,測試用例,測試環境(客觀反映效能的實際情況)
效能調優的常用方案
1 快取 沒有什麼效能問題是快取解決不了的,如果有,那就再加一級快取(典型的空間換時間)
2 併發 一個人幹不完的活,那就找兩個人幹(增加了系統的吞吐,減少了使用者的平均等待時間) 粒度(多機器,多程序,多執行緒)
2.1 無狀態服務 採用叢集
2.2 有狀態服務 每個節點提供同樣的資料或每個節點只提供部分資料
3 惰性 將計算推遲到必須的時刻(很可能避免了多餘的計算,甚至根本不用計算)
4 批量 合併,在IO(網路IO,磁碟IO)的時候,合併操作,批量操作往往能提升吞吐,提高效能
5 使用成熟方案 空間換時間,時間換空間
6 縮小解空間 在一個更小的資料範圍內進行計算,而不是遍歷全部資料,最常用的是索引