錄:
二、Web前端性能優化
三、應用服務器性能優化(重點)
四、存儲性能優化
PS:本文為《大型網站技術架構 & 核心原理與案例分析(李智慧 著)》一書的
讀書筆記 // =======================================================================================
網站性能測試
一、不同視角下的網站性能
1、用戶視角:直觀視覺感受
2、開發人員視角:響應延遲、吞吐量、并發處理能力等
3、運維人員視角:基礎設置資源利用率
二、性能測試指標
1、響應時間:請求從發出到處理完接收的時間
2、并發數:同時處理請求的數量,即同時提交請求的用戶數
3、吞吐量:單位時間內處理請求的數量
*:隨著并發數增大:系統吞吐量先逐漸增加到極限,之后反而下降;系統響應時間先是小幅上升,當吞吐量達到極限后快速上升
4、性能計數器:服務器監控指標,如CPU、內存、磁盤IO、網絡IO
三、性能測試(壓測)方法
*:不斷增加系統訪問壓力(并發請求數),以獲取系統性能指標數據
四、性能測試(壓測)報告
*:要能夠反應壓測的系統性能曲線規律,閱讀者能評估系統性能是否能滿足需求
// ===========================================================
Web前端性能優化
一、瀏覽器訪問優化
1、減少http請求:每次獨立的http請求的通信和服務開銷都很昂貴,可通過合并CSS、JS、圖片等方式減少http請求數
2、使用瀏覽器緩存:通過設置http頭的Cache-Control和Expires屬性設定瀏覽器緩存,將CSS、JS、圖片等較少變更的資源緩存下來
3、啟用壓縮:文件壓縮可減少通訊傳輸的數據量,文本壓縮率可達80%以上,但壓縮解壓會增加計算壓力(權衡)
4、CSS渲染放最上面,JS功能腳本放最下面:使用戶視覺感受先已經看到頁面
二、CND加速
*:部署在網絡運營商機房,用戶請求路由的第一條就到達CND服務器,有效降低請求時間
三、反向代理
*:部署在網站機房內,用戶請求先到達反向代理服務器,有3個主要功能
1、加速Web請求:通過配置緩存功能來實現
2、安全:在用戶請求和應用服務器間建立一個屏障
3、負載均衡:均勻分發請求到應用服務器
// ===========================================================
應用服務器性能優化
一、分布式緩存(memcache)
*:網站性能優化第一定律:優先考慮緩存
1、緩存的基本原理:本質為內存Hash表
*:數據以Key、Value對形式存儲在內存Hash表中。通過Hash(Key)得到HashCode,即Value對應內存的位置
2、合理使用緩存
*:不適合緩存的數據:頻繁修改(寫導致緩存中的數據失效)、沒有熱點、一致性要求高(緩存設有失效時間,這段時間內可能有臟數據)
*:緩存預熱:緩存剛起來時為空數據,最好在使用前預加載數據庫數據
*:緩存雪崩:當緩存服務器崩潰時,所有請求會落到數據庫導致數據庫宕機。好的方法是使用分布式緩存服務器提高緩存可用性
*:緩存穿透:不正確或者惡意的請求可能落在某個不存在的Key導致頻繁讀數據庫,一個簡單對策將不存在的Key也緩存起來
3、分布式緩存架構
*:一種是以JBossCache為代表的,每個緩存服務器數據相同,需同步更新的分布式緩存(很少用)
*:一種是以Memcache為代表的,每個緩存服務器數據部相同,之間不需要通信的分布式緩存。應用程序通過一致性Hash等路由算法選擇具體的緩存服務器
4、Memcache的特點
*:簡單的通行協議:TCP的,一套基于簡單文本的自定義協議(一個命令關鍵字+一組命令操作數,如get <key>)
*:豐富的客戶端程序:幾乎支持所有主流語言(因為通信協議簡單)
*:高性能的網絡通信:基于Libevent,提供穩定的長連接
*:高效的內存管理::簡單固定的內存空間分配,slab_class=>slab=>chunk
*:互不通信的集群架構:客戶端路由算法一致性Hash更成為數據存儲伸縮性架構的范例
二、異步操作
*:使用消息隊列將調用異步化,可改善網站的擴展性
*:消息隊列:用戶請求發送給消息隊列后立即返回,再由消費隊列的消費者進程將消息異步寫入數據庫,具有很好的削峰作用
三、使用集群
*:利用集群解決高并發問題,前端用負載均衡技術將請求均勻分發到多臺服務器上(不單單局限在應用服務器)
四、代碼優化
1、多線程
*:線程的優點:比進程更輕量,占用更少系統資源,切換代價更小
*:使用多線程的2個主要原因:IO阻塞(阻塞時可以調用其他線程處理)和多CPU(最大限度使用CPU)
*:線程數估算公式:啟動線程數 = [ 任務執行時間 / ( 任務執行時間 - IO等待時間 ) ] * CPU核數
*:線程安全問題實質:多線程并發對某塊內存進行修改操作(對象、內存、文件、數據庫等)
*:線程安全問題解決思路:對象設計為無狀態,使用局部變量,并發訪問加鎖等
2、資源復用
*:開銷較大的系統資源:數據庫連接,網絡Socket連接,線程,復雜對象等
*:資源復用的2個方法:單例模式和對象池,都可以防止不必要的創建和銷毀操作
3、數據結構和算法
*:靈活組合數據結構和算法優化程序執行復雜度,如Hash等
// ===========================================================
存儲性能優化
一、機械硬盤和固態硬盤
1、機械硬盤:每次訪問數據都需要移動磁頭臂(物理運動),故數據連續訪問和隨機訪問性能表現差別大
2、固態硬盤:沒有機械裝置,數據存儲于硅晶體中,有更好的性能??煽啃裕詢r比還有待提升,但逐步取代機械硬盤是遲早的事
二、B+樹和LSM樹
1、由于機械硬盤具有快速順序讀寫,慢速隨機讀寫的特性,故應用程序選擇存儲結構和算法極為重要
2、B+樹是一種專門針對磁盤存儲而優化的N叉排序樹,目前數據庫多采用兩級索引,樹的層次最多三層
3、LSM樹可以看為一個N階合并樹,數據寫操作都在內存中進行,目前許多NoSQL都采用LSM樹作為主要數據結構
三、RAID和HDFS
1、RAID,即廉價磁盤冗余陣列,主要是為了改善磁盤訪問延遲,增加磁盤可用性和容錯能力(數據在多塊磁盤并發讀寫和數據備份)
2、HDFS,即分布式文件系統,Hadoop的文件系統,系統在整個存儲集群的多臺服務器上進行數據并發讀寫和備份