怎樣提升站點的性能?
概述
??性能是站點的一個重要指標,除非是沒得選擇(比方12306)。否則用戶無法忍受一個響應緩慢的站點。
一個打開緩慢的站點會導致嚴重的用戶流失,非常多時候站點性能問題是站點架構升級優化的觸發器。能夠說性能是站點架構設計的一個重要方面。不論什麽軟件架構設計方案都必須考慮可能會帶來的性能問題。
??也正是由於性能問題差點兒無處不在,所以優化站點性能的手段也非常多。從用戶瀏覽器到數據庫。影響用戶請求的全部環節都能夠進行性能優化。
??在瀏覽器端,能夠通過瀏覽器緩存、使用頁面壓縮、合理分布頁面、降低Cookie傳輸等改善性能。
??還能夠使用CDN,將站點靜態內容分發至離用戶近期的網絡服務商機房,使用戶通過最短訪問路徑獲取數據。
能夠在站點機房部署反向代理server。緩存熱點文件。加快請求響應速度。減輕應用server負載壓力。
(Nigix)
??在應用server端,能夠使用server本地緩存和分布式緩存,通過緩存在內存中的熱點數據處理用戶請求,加快請求處理過程。減輕數據庫負載壓力。
(Redis, Memecache, JBoss Cache, Ehcache)
??也能夠通過異步操作將用戶請求發送至消息隊列等待興許任務處理,而當前請求直接返回給用戶。
(RabbitMq, Kafka)
??在站點有非常多用戶高並發請求的情況下,能夠將多臺應用server組成一個集群共同對外服務,提高總體處理能力。改善性能。
??在代碼層面,也能夠通過使用多線程、改善內存管理等手段優化性能。
??在數據庫server端。索引、緩存、SQL優化等性能優化手段都已經比較成熟。而方興未艾的NoSQL數據庫通過優化數據模型、存儲結構、伸縮特性等手段在性能方面的優勢也日趨明顯。(MongoDB, HBase)
??衡量站點性能有一系列指標,重要的有響應時間、TPS、系統性能計數器等,通過測試這些指標以確定系統設計是否達到目標。這些指標也是站點監控的重要參數,通過監控這些指標能夠分析系統瓶頸,預測站點容量。並對異常指標進行報警。保障系統可用性。
??對於站點而言,性能符合預期不過必要條件,由於無法預知站點可能會面臨的訪問壓力,所以必需要考察系統在高並發訪問情況下,超出負債設計能力的情況下可能會出現的性能問題。站點需要長時間持續執行,還必須保證系統在持久執行且訪問壓力不均勻的情況下保持穩定的性能特性。
性能測試指標
- 響應時間
- 並發數
- 吞吐量
- 性能計數器
性能測試方法
??性能測試是一個不斷對系統添加訪問壓力,以獲得系統性能指標、最大負載能力、最大壓力承受能力的過程。
??性能測試方法:
- 性能測試: 以系統設計初期規劃的性能指標為預期目標,對系統不斷施加壓力。驗證系統在資源可接受範圍內,能否達到性能預期。
- 負載測試
對系統不斷地添加並發請求以添加系統壓力,知道系統的某項或多項性能指標達到安全臨界值。如某種資源已經呈飽和狀態,這是繼續對系統施加壓力,系統的處理能力不但不提高,反而會下降。 - 壓力測試 超過安全負載的情況下。對系統繼續施加壓力,知道系統崩潰或不能再處理請求,一次獲得系統最大壓力承受能力。
- 穩定性測試
被測試系統在特定硬件、軟件、網絡環境條件下。給系統載入一定業務壓力,使系統執行一段較長時間,以此檢測系統是否穩定。在不同生成環境、不同一時候間點的請求壓力是不均勻的,呈波浪特性。因此為了更好地模擬生產環境,穩定性測試也不應均與地對系統施加壓力。
性能優化
??依據站點分層架構,性能優化可分為:web前端性能優化、應用server性能優化、存儲server性能優化。
- web前端性能優化
- 瀏覽器訪問優化:降低http請求;使用瀏覽器緩存;啟用壓縮;css放在頁面最上面、javaScript放在頁面最以下;降低Cookie傳輸
- CDN加速
- 反向代理
- 應用server性能優化
- 分布式緩存(Redis等)
- 異步操作(消息隊列)
- 使用集群(負載均衡)
- 代碼優化
- 存儲性能優化
- 機械硬盤vs固態硬盤
- B+樹 vs LSM樹
- RAID vs HDFS
代碼優化
- 多線程(Q:怎麽確保線程安全?無鎖機制有哪些?)
- 資源復用(單例模式,連接池,線程池)
- 數據結構
- 垃圾回收多線程三大定律
1. Amdahl 定律
–Gene Amdahl 發如今計算機體系架構設計過程中。某個部件的優化對整個架構的優化和改善是有上限的。這個發現後來成為知名的Amdahl 定律。
比方:即使你有10個老婆。也不能一個月把孩子生下來。
2. Gustafson 定律
–Gustafson如果隨著處理器個數的添加,並行與串行的計算總量也是能夠添加的。Gustafson定律覺得加速系數差點兒跟處理器個數成正比,如果現實情況符合Gustafson定律的如果前提的話,那麽軟件的性能將能夠隨著處理個數的添加而添加。
比方:當你有10個老婆。就會要生很多其它的孩子。
3. Sun-Ni 定律
–充分利用存儲空間等計算資源,盡量增大問題規模以產生更好/更精確的解。
比方:你要設法讓每一個老婆都在幹活,別讓她們閑著。
怎樣提升站點的性能?