如何提升網站的性能?

wpuj4315 8年前發布 | 11K 次閱讀

來自: http://blog.csdn.net/u013256816/article/details/50685234


概述

??性能是網站的一個重要指標,除非是沒得選擇(比如12306),否則用戶無法忍受一個響應緩慢的網站。一個打開緩慢的網站會導致嚴重的用戶流失,很多時候網站性能問題是網站架構升級優化的觸發器。可以說性能是網站架構設計的一個重要方面,任何軟件架構設計方案都必須考慮可能會帶來的性能問題。
??也正是因為性能問題幾乎無處不在,所以優化網站性能的手段也非常多,從用戶瀏覽器到數據庫,影響用戶請求的所有環節都可以進行性能優化。
??在瀏覽器端,可以通過瀏覽器緩存、使用頁面壓縮、合理分布頁面、減少Cookie傳輸等改善性能。
??還可以使用CDN,將網站靜態內容分發至離用戶最近的網絡服務商機房,使用戶通過最短訪問路徑獲取數據。可以在網站機房部署反向代理服務器,緩存熱點文件,加快請求響應速度,減輕應用服務器負載壓力。(Nigix)
??在應用服務器端,可以使用服務器本地緩存和分布式緩存,通過緩存在內存中的熱點數據處理用戶請求,加快請求處理過程,減輕數據庫負載壓力。(Redis, Memecache, JBoss Cache, Ehcache)
??也可以通過異步操作將用戶請求發送至消息隊列等待后續任務處理,而當前請求直接返回給用戶。(RabbitMq, Kafka)
??在網站有很多用戶高并發請求的情況下,可以將多臺應用服務器組成一個集群共同對外服務,提高整體處理能力,改善性能。
??在代碼層面,也可以通過使用多線程、改善內存管理等手段優化性能。
??在數據庫服務器端,索引、緩存、SQL優化等性能優化手段都已經比較成熟。而方興未艾的NoSQL數據庫通過優化數據模型、存儲結構、伸縮特性等手段在性能方面的優勢也日趨明顯。(MongoDB, HBase)
??衡量網站性能有一系列指標,重要的有響應時間、TPS、系統性能計數器等,通過測試這些指標以確定系統設計是否達到目標。這些指標也是網站監控的重要參數,通過監控這些指標可以分析系統瓶頸,預測網站容量,并對異常指標進行報警,保障系統可用性。
??對于網站而言,性能符合預期僅僅是必要條件,因為無法預知網站可能會面臨的訪問壓力,所以必須要考察系統在高并發訪問情況下,超出負債設計能力的情況下可能會出現的性能問題。網站需要長時間持續運行,還必須保證系統在持久運行且訪問壓力不均勻的情況下保持穩定的性能特性。


性能測試指標

  1. 響應時間
  2. 并發數
  3. 吞吐量
  4. 性能計數器

性能測試方法

??性能測試是一個不斷對系統增加訪問壓力,以獲得系統性能指標、最大負載能力、最大壓力承受能力的過程。
??性能測試方法:

  1. 性能測試: 以系統設計初期規劃的性能指標為預期目標,對系統不斷施加壓力,驗證系統在資源可接受范圍內,是否能達到性能預期。
  2. 負載測試
    對系統不斷地增加并發請求以增加系統壓力,知道系統的某項或多項性能指標達到安全臨界值,如某種資源已經呈飽和狀態,這是繼續對系統施加壓力,系統的處理能力不但不提高,反而會下降。
  3. 壓力測試 超過安全負載的情況下,對系統繼續施加壓力,知道系統崩潰或不能再處理請求,一次獲得系統最大壓力承受能力。
  4. 穩定性測試
    被測試系統在特定硬件、軟件、網絡環境條件下,給系統加載一定業務壓力,使系統運行一段較長時間,以此檢測系統是否穩定。在不同生成環境、不同時間點的請求壓力是不均勻的,呈波浪特性,因此為了更好地模擬生產環境,穩定性測試也不應均與地對系統施加壓力。

性能優化

??根據網站分層架構,性能優化可分為:web前端性能優化、應用服務器性能優化、存儲服務器性能優化。

  1. web前端性能優化
    • 瀏覽器訪問優化:減少http請求;使用瀏覽器緩存;啟用壓縮;css放在頁面最上面、javaScript放在頁面最下面;減少Cookie傳輸
    • CDN加速
    • 反向代理
  2. 應用服務器性能優化
    • 分布式緩存(Redis等)
    • 異步操作(消息隊列)
    • 使用集群(負載均衡)
    • 代碼優化
  3. 存儲性能優化
    • 機械硬盤vs固態硬盤
    • B+樹 vs LSM樹
    • RAID vs HDFS

代碼優化

  • 多線程(Q:怎么確保線程安全?無鎖機制有哪些?)
  • 資源復用(單例模式,連接池,線程池)
  • 數據結構
  • 垃圾回收</p>

    多線程三大定律

  • Amdahl 定律
    –Gene Amdahl 發現在計算機體系架構設計過程中,某個部件的優化對整個架構的優化和改善是有上限的。這個發現后來成為知名的Amdahl 定律。
    比如:即使你有10個老婆,也不能一個月把孩子生下來。
  • Gustafson 定律
    –Gustafson假設隨著處理器個數的增加,并行與串行的計算總量也是可以增加的。Gustafson定律認為加速系數幾乎跟處理器個數成正比,如果現實情況符合Gustafson定律的假設前提的話,那么軟件的性能將可以隨著處理個數的增加而增加。
    比如:當你有10個老婆,就會要生更多的孩子。
  • Sun-Ni 定律
    –充分利用存儲空間等計算資源,盡量增大問題規模以產生更好/更精確的解。
    比如:你要設法讓每個老婆都在干活,別讓她們閑著。</p>

    </blockquote> </div>

 本文由用戶 wpuj4315 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!