架構基礎2-網站的高性能

性能測試指標:

1,響應時間 2,併發數 3,吞吐量(TPS、HPS、QPS)

Web前端性能優化策略:

1,減少HTTP請求(合併CSS,js,圖片)

2,使用瀏覽器緩存(通過設置HTTP頭中的cache-control和expires屬性)

3,啓用壓縮

4,CSS放在頁面最上面,Js放在頁面最下面(以名js執行阻塞頁面渲染)

5,減少Cookie傳輸(對靜態資源訪問時發送cookie沒有意義,可以考慮靜態資源使用獨立域名訪問)

6,CDN加速(CDN部署在網絡運營商的機房,這些運營商又是用戶的網絡服務提供商,因此用戶請求路由第一跳就到達CDN服務器,以最短路徑返回響應)

7,反向代理(反向代理服務器與代理服務器相反,它位於網站機房側。它可以通過配置緩存功能加速web請求,用戶首次訪問靜態資源後就被緩存在反向代理服務器上了,其它用戶再訪問直接從反向代理服務器返回,有些網站將動態內容也緩存在代理服務器上,通過內部機制通知反向代理緩存失效。此外,反向代理也可以實現負載均衡)

應用服務器性能優化:

1,分佈式緩存

本質:將數據存儲在相對較高訪問速度的存儲介質。主要存放讀寫比例高,很少變化的數據。分佈式緩存架構是指緩存部署在多個服務器的集羣中。以集羣方式提供服務。

一種是需要更新同步的分佈式緩存(Jboss cache),所有服務器保存相同緩存數據,當某臺更新時會通知集羣中其它機器,通常和應用程序部署在同一機器,應用程序可以快速從本地讀取。不適用於大型網站使用。

一種是不相互通信的分佈式緩存(Memcached),緩存和應用分離部署,應用程序通過一致性Hash等路由算法選擇緩存服務器。

2,異步操作

使用消息隊列將調用異步化,用戶請求發送給消息隊列後立即返回,再由消息隊列的消費者進程(該進程通常獨立部署在專門的服務器集羣上)從消息隊列中獲取數據。但消息的後續處理可能失敗,需要適當修改業務流程進行配合,比如提交訂單後返回,需要消息隊列的訂單消費者真正處理完後通過其它渠道通知用戶。

3,使用集羣

4,代碼優化

多線程編程(解決線程安全問題常用手段,將對象設計爲無狀態對象,即對象無成員變量或成員變量也是無狀態對象,web開發中的service和dao都是無狀態對象,這樣多線程併發時不會出現狀態不一致;使用局部對象;併發訪問資源時使用鎖)

資源複用,減少開銷很大的系統資源的創建和銷燬,比如數據庫連接,網絡通信連接,線程。複用有兩種模式:

單例與對象池。spring中的service到dao都是無狀態對象,無需重複創建,所以設計爲單例。常用的數據庫連接池就是對象池的設計。web應用服務器如tomcat採用的線程池。

數據結構,使用合理的數據結構優化代碼性能

垃圾回收,JVM堆內存分爲年輕代和年老代,垃圾回收是採用分代回收機制,新建對象都在新生代中,只有長期存在且新生代空間不足時纔會挪到年老代中。通常只應該觸發新生代的回收,如果年老代的內存使用完了就會觸發Full GC,Full GC對系統性能影響大,所以應合理設置young generation和old generation大小,儘量減少Full GC。

存儲性能優化策略:

固態硬盤(SSD或Flash硬盤)替代機械硬盤

RAID技術可以改善磁盤的訪問延遲,增強磁盤的可用性與容錯能力。HDFS(Hadoop分佈式文件系統)可在存儲集羣的多臺服務器上進行併發讀寫和備份。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章