第二篇 架構
4 瞬時響應:網站的高性能架構
4.1 網站性能測試
性能測試是性能優化的前提和基礎,也是性能優化結果的檢查和度量標準。
4.1.1 不同視角下的網站性能
- 用戶視角的網站性能:用戶計算機和網站服務器通信的時間+網站服務器處理的時間+用戶計算機瀏覽器構造請求解析響應數據的時間
- 開發人員視角的網站性能:響應延遲、系統吞吐量、併發處理能力、系統穩定性等技術指標
- 運維人員視角的網站性能:基礎設施性能和資源利用率
4.1.2 性能指標測試
- 響應時間:從發出請求開始到收到最後響應數據所需要的時間
- 併發數:指系統能夠同時處理請求的數目,這個數字也反映了系統的負載特性
- 吞吐量:值單位時間內系統處理的請求數量,體現系統的整體處理能力
- 性能計數器:描述服務器或操作系統性能的一些指標
4.1.3 性能測試方法
- 性能測試
- 負載測試
- 壓力測試
- 穩定性測試
4.1.4 性能測試報告
4.1.5 性能優化策略
- 性能分析(分析日誌)
- 性能優化
4.2 Web前端性能優化
一般說來Web前端指網站業務邏輯之前的部分,包括瀏覽器加載、網站視圖模型、圖片服務、CDN服務等,主要優化手段有優化瀏覽器訪問、使用反向代理、CDN等。
4.2.1 瀏覽器訪問優化
- 減少http請求:合併CSS、合併JavaScript、合併圖片。將瀏覽器一次訪問需要的JavaScript、CSS合併成一個文件;圖片也可以合併,多張圖片合併成一張。
- 使用瀏覽器緩存:靜態資源緩存在瀏覽器中。
- 啓用壓縮:在服務器端對文件進行壓縮,在瀏覽器端對文件解壓縮,減少傳輸量。
- CSS放在頁面最上面、JavaScript放在頁面最下面:瀏覽器會在下載完全部CSS之後纔對整個頁面進行渲染,因此最好的做法是將CSS放在頁面最上面,讓瀏覽器儘快下載CSS。
- 減少Cookie傳輸
4.2.2 CDN加速
CDN(Content Distribute Network,內容分發網絡)的本質仍然是一個緩存,而且將數據緩存在裏用戶最近的地方,使用戶以最快速度獲取數據。
CDN能夠緩存的一般是靜態資源。
4.2.3 反向代理
傳統代理服務器位於瀏覽器一側,代理l瀏覽器將HTTP請求發送到互聯網上,而反向代理服務器位於網站機房一側,代理網站Web服務器接收HTTP請求。
安全功能+通過緩存加速Web請求。
有些熱門的帖子、詞條、博客可緩存在代理服務器上。
4.3 應用服務器性能優化
應用服務器就是處理網站業務的服務器,網站的業務代碼都部署在這裏,是網站開發最複雜,變化最多的地方,優化手段主要有緩存、集羣、異步等。
4.3.1 分佈式緩存
網站性能優化第一定律:優先考慮使用緩存優化性能
緩存的基本原理
緩存的本質是一個內存Hash表。網站數據訪問通常遵循二八定律,即80%的訪問落在20%的數據上,因此利用Hash表和內存的高速訪問特性,將這20%的數據緩存起來,可以很好地改善系統的性能,提高數據讀取速度,降低存儲訪問壓力。
合理使用緩存
- 頻繁修改的數據
- 沒有熱點的訪問
- 數據不一致與髒讀
- 緩存可用性:可通過緩存熱備等手段提高緩存的可用性
- 緩存預熱
- 緩存穿透
分佈式緩存架構
分佈式緩存指緩存部署在多個服務器組成的集羣中,以集羣方式提供緩存服務。其架構方式有兩種,一種是以JBoss Cache爲代表的需要更新同步的分佈式緩存;一種是以MemCached爲代表的不互相通信的分佈式緩存。
Memcached
- 簡單的通信協議
- 豐富的客戶端程序
- 高性能的網絡通信
- 高效的內存管理
- 互不通信的服務器集羣架構
4.3.2 異步操作
任何可以晚點做的事情都應該晚點再做
4.3.3 使用集羣
在網站高併發訪問的場景下,使用負載均衡技術爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢,使用戶請求具有更好的響應延遲特性。
4.3.4 代碼優化
- 多線程
- 資源複用:單例、對象池
- 數據結構
- 垃圾回收
4.4 存儲性能優化
4.4.1 機械硬盤 vs. 固態硬盤
4.4.2 B+樹 vs. LSM樹
4.4.3 RAID vs. HDFS