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