壓力測試, 不斷地增加并發數量.
性能測試: 日常的營運 a - b, b點是日常的最高值.
負載測試: b-c, 模拟的是通路高峰, 可以看到系統最大負載是 c 點.
壓力測試: 超過 c 點, 系統資源繼續增加, 但是TPS卻在走下坡路. 直到 d 點(耗費資源到達極限, 系統崩潰)

性能優化政策
如果性能測試結果不能滿足設計或業務需求,就需要尋找系統瓶頸,分而治之,逐漸優化。
1. 性能分析
必須對請求經曆的各個環節進行分析,排查可能存在的性能瓶頸。
檢查請求處理的各個環節的日志,分析哪個環節響應時間不合理,監控資料,分析主要因素 如 記憶體,磁盤I/O, 網絡, CPU, 還是代碼架構不合理。
定位到問題後,要進行優化
2. web 前端優化
浏覽器加載,網站視圖模型,圖檔服務,CDN服務,主要優化手段有 浏覽器通路,反向代理,CDN等.
浏覽器優化
- 減少 http 請求次數, HTTP是無狀态的應用協定,意味着每次 HTTP 請求都需要建立通信鍊路,資料傳輸,而在伺服器端都需要獨立線程去處理.減少 http 的主要手段是 合并 css, 合并 javascript, 合并圖檔, 将浏覽器一次通路需要的 javascript, css 合并成一個檔案,這樣浏覽器隻需要請求一次 圖檔也可以合并,多張圖檔合并成一張.
- 用浏覽器緩存, 對一個網站, css, javascript, Logo, 圖示這些靜态資源更新頻率比較低,而這些檔案幾乎是每次 HTTP 請求都需要的,如果将這些檔案緩存在浏覽器中,可以極好的改善性能,通過設定 HTTP 頭中 Cache-Control 和 Expires 的屬性, 可設定浏覽器緩存.
- 啟用壓縮, 在伺服器端對檔案進行壓縮,在浏覽器端對檔案解壓縮,可有效減少通信傳輸的資料量.
- CSS 放在網頁最上面,javascript 放在最下面,浏覽器會在下載下傳完全部 CSS 之後才對整個頁面進行渲染
- 減少 Cookie 傳輸,哪些資料需要寫入 Cookie 需要慎重考慮,減少 Cookie 中傳輸的資料量, 另外, 對于某些靜态資源的通路, 如 CSS, JavaScript 等,發送 Cookie 沒有意義,可以考慮靜态資源使用獨立域名通路,避免請求靜态資源時發送Cookie, 減少 Cookie傳送的次數.
CDN 加速
CDN 能夠緩存靜态資源,如圖檔,檔案,css, JavaScript腳本,靜态網頁等, 但這些檔案通路頻度很高,将其緩存在 CDN可極大改善網頁的打開速度。
反向代理
反向代理也可以緩存靜态資源.
3. 應用伺服器性能優化
這部分是我們的優化範圍(重點), 主要手段有 緩存,叢集,異步
分布式緩存
對資料緩存,對檔案緩存,對頁面片段緩存(網站性能優化第一定律:優先考慮緩存優化性能)
網站資料通路通常遵循二八定律, 即80%的通路落在20%的資料上.
合理使用緩存, 頻繁修改的資料,沒有熱度通路的資料 都不适合使用緩存. 另外緩存有可能造成資料的不一緻性(髒讀),一般會設定緩存的有效期
緩存高可用, 可以通過緩存伺服器叢集, 當一台緩存伺服器當機時,隻有部分緩存資料丢失,重新從資料庫加載對資料庫影響不大。
緩存預熱: 在緩存啟動時,加載熱點資料。
緩存穿透: 在緩存中沒有,請求都是直接通路DB.
異步操作
使用消息隊列
消息隊列具有很好的削峰作用-異步處理, 将高并發儲存在消息隊列裡。
使用叢集
利用負載均衡,将任務發送到不同的web伺服器上(組成叢集)
優化代碼
業務邏輯主要在應用伺服器上,合理優化代碼,可以很好改善性能。
- 多線程 (注意線程安全,并發通路資源時加鎖)
- 資源複用 (盡量減少哪些開銷很大的系統資源的建立和銷毀,比如資料庫連接配接,網絡通信連接配接 等) 從程式設計角度,複用主要有兩個形式: 單例(Singleton) 和 對象池(Object Pool). 對于資料庫連接配接對象,每次建立連接配接,資料庫服務端都需要建立專門資源以應對,是以頻繁的關閉資料庫連接配接,對資料庫伺服器而言是災難性的,是以實踐中,應用程式的資料庫連接配接基本都使用連接配接池(connection pool)的方式,資料庫連接配接對象建立好後,将連接配接對象放入對象池容器中,應用程式要連接配接的時候,就從對象池中擷取一個空閑的連接配接使用,使用完畢歸還對象到對象池中,不需要重新建立連接配接. (也不需要關閉連接配接), 對于每一個 Web請求, Web 應用伺服器都需要建立一個獨立的線程去處理,應用伺服器也是采用線程池的方式,本質上都是對象池.
- 資料結構
- 垃圾回收, JVM 合理設定各個記憶體區域的大小,減少 Full GC 的運作次數,某些 Web應用在整個運作期間可以做到從不 Full GC.
4. 存儲優化
存儲媒體的速度(機械硬碟, 普通硬碟, SAN,NAS)等, 存儲備援備份的優化( RAID0, HDFS 等)