讀書筆記:網站架構之性能篇

目錄:前端

1、網站性能測試算法

2、Web前端性能優化數據庫

3、應用服務器性能優化(重點)瀏覽器

4、存儲性能優化緩存


PS:本文爲《大型網站技術架構 & 核心原理與案例分析(李智慧 著)》一書的讀書筆記安全


// =======================================================================================性能優化


網站性能測試服務器


1、不一樣視角下的網站性能網絡

一、用戶視角:直觀視覺感覺數據結構

二、開發人員視角:響應延遲、吞吐量、併發處理能力等

三、運維人員視角:基礎設置資源利用率


2、性能測試指標

一、響應時間:請求從發出處處理完接收的時間

二、併發數:同時處理請求的數量,即同時提交請求的用戶數

三、吞吐量:單位時間內處理請求的數量

*:隨着併發數增大:系統吞吐量先逐漸增長到極限,以後反而降低;系統響應時間先是小幅上升,當吞吐量達到極限後快速上升

四、性能計數器:服務器監控指標,如CPU、內存、磁盤IO、網絡IO


3、性能測試(壓測)方法

*:不斷增長系統訪問壓力(併發請求數),以獲取系統性能指標數據


4、性能測試(壓測)報告

*:要可以反應壓測的系統性能曲線規律,閱讀者能評估系統性能是否能知足需求


// ===========================================================


Web前端性能優化


1、瀏覽器訪問優化

一、減小http請求:每次獨立的http請求的通訊和服務開銷都很昂貴,可經過合併CSS、JS、圖片等方式減小http請求數

二、使用瀏覽器緩存:經過設置http頭的Cache-Control和Expires屬性設定瀏覽器緩存,將CSS、JS、圖片等較少變動的資源緩存下來

三、啓用壓縮:文件壓縮可減小通信傳輸的數據量,文本壓縮率可達80%以上,但壓縮解壓會增長計算壓力(權衡)

四、CSS渲染放最上面,JS功能腳本放最下面:使用戶視覺感覺先已經看到頁面


2、CND加速

*:部署在網絡運營商機房,用戶請求路由的第一條就到達CND服務器,有效下降請求時間


3、反向代理

*:部署在網站機房內,用戶請求先到達反向代理服務器,有3個主要功能

一、加速Web請求:經過配置緩存功能來實現

二、安全:在用戶請求和應用服務器間創建一個屏障

三、負載均衡:均勻分發請求到應用服務器


// ===========================================================


應用服務器性能優化


1、分佈式緩存(memcache)

*:網站性能優化第必定律:優先考慮緩存

一、緩存的基本原理:本質爲內存Hash表

*:數據以Key、Value對形式存儲在內存Hash表中。經過Hash(Key)獲得HashCode,即Value對應內存的位置

二、合理使用緩存

*:不適合緩存的數據:頻繁修改(寫致使緩存中的數據失效)、沒有熱點、一致性要求高(緩存設有失效時間,這段時間內可能有髒數據)

*:緩存預熱:緩存剛起來時爲空數據,最好在使用前預加載數據庫數據

*:緩存雪崩:當緩存服務器崩潰時,全部請求會落到數據庫致使數據庫宕機。好的方法是使用分佈式緩存服務器提升緩存可用性

*:緩存穿透:不正確或者惡意的請求可能落在某個不存在的Key致使頻繁讀數據庫,一個簡單對策將不存在的Key也緩存起來

三、分佈式緩存架構

*:一種是以JBossCache爲表明的,每一個緩存服務器數據相同,需同步更新的分佈式緩存(不多用)

*:一種是以Memcache爲表明的,每一個緩存服務器數據部相同,之間不須要通訊的分佈式緩存。應用程序經過一致性Hash等路由算法選擇具體的緩存服務器

四、Memcache的特色

*:簡單的通行協議:TCP的,一套基於簡單文本的自定義協議(一個命令關鍵字+一組命令操做數,如get <key>)

*:豐富的客戶端程序:幾乎支持全部主流語言(由於通訊協議簡單)

*:高性能的網絡通訊:基於Libevent,提供穩定的長鏈接

*:高效的內存管理::簡單固定的內存空間分配,slab_class=>slab=>chunk

*:互不通訊的集羣架構:客戶端路由算法一致性Hash更成爲數據存儲伸縮性架構的範例


2、異步操做

*:使用消息隊列將調用異步化,可改善網站的擴展性

*:消息隊列:用戶請求發送給消息隊列後當即返回,再由消費隊列的消費者進程將消息異步寫入數據庫,具備很好的削峯做用


3、使用集羣

*:利用集羣解決高併發問題,前端用負載均衡技術將請求均勻分發到多臺服務器上(不僅僅侷限在應用服務器)


4、代碼優化

一、多線程

*:線程的優勢:比進程更輕量,佔用更少系統資源,切換代價更小

*:使用多線程的2個主要緣由:IO阻塞(阻塞時能夠調用其餘線程處理)和多CPU(最大限度使用CPU)

*:線程數估算公式:啓動線程數 = [ 任務執行時間 / ( 任務執行時間 - IO等待時間 ) ] * CPU核數

*:線程安全問題實質:多線程併發對某塊內存進行修改操做(對象、內存、文件、數據庫等)

*:線程安全問題解決思路:對象設計爲無狀態,使用局部變量,併發訪問加鎖等

二、資源複用

*:開銷較大的系統資源:數據庫鏈接,網絡Socket鏈接,線程,複雜對象等

*:資源複用的2個方法:單例模式和對象池,均可以防止沒必要要的建立和銷燬操做

三、數據結構和算法

*:靈活組合數據結構和算法優化程序執行復雜度,如Hash等


// ===========================================================


存儲性能優化


1、機械硬盤和固態硬盤

一、機械硬盤:每次訪問數據都須要移動磁頭臂(物理運動),故數據連續訪問和隨機訪問性能表現差異大

二、固態硬盤:沒有機械裝置,數據存儲於硅晶體中,有更好的性能。可靠性,性價比還有待提高,但逐步取代機械硬盤是早晚的事


2、B+樹和LSM樹

一、因爲機械硬盤具備快速順序讀寫,慢速隨機讀寫的特性,故應用程序選擇存儲結構和算法極爲重要

二、B+樹是一種專門針對磁盤存儲而優化的N叉排序樹,目前數據庫多采用兩級索引,樹的層次最多三層

三、LSM樹能夠看爲一個N階合併樹,數據寫操做都在內存中進行,目前許多NoSQL都採用LSM樹做爲主要數據結構


3、RAID和HDFS

一、RAID,即廉價磁盤冗餘陣列,主要是爲了改善磁盤訪問延遲,增長磁盤可用性和容錯能力(數據在多塊磁盤併發讀寫和數據備份)

二、HDFS,即分佈式文件系統,Hadoop的文件系統,系統在整個存儲集羣的多臺服務器上進行數據併發讀寫和備份

相關文章
相關標籤/搜索