大型網站技術架構——核心原理與案例分析(二)

steven.cao發表於2017-10-31

網站高效能架構

一、效能測試指標 

1.1、響應時間

1.2、併發數   指系統能夠同時處理請求的數目,反映了系統的負載特性

1.3、吞吐量  TPS(每秒事務數) HPS(每秒HTTP請求數) QPS(每秒查詢數)等

1.4、效能計數  包括System Load、物件與執行緒數、記憶體使用、CPU使用、磁碟與網路I/O等指標

二、效能測試方法

2.1、效能測試 與初期規劃的效能指標為預期目標,不斷施加壓力,驗證是否在可接受範圍,效能是否能達到效能預期

2.2、負載測試  不斷地增加併發請求以增加系統壓力,直到系統的某項或是多項效能指標大致安全臨界值

2.3、壓力測試   超過安全負載的情況下,對系統繼續施加壓力,直到系統崩潰或不能再處理任何請求,以此獲得系統最大壓力承受能力。

2.4、穩定性測試

三、效能優化

  根據網站分層架構,可分為Web前端效能優化、應用伺服器效能優化、儲存伺服器效能優化。

3.1、Web前端效能優化

3.1.1 瀏覽器訪問優化

A、減少http請求  HTTP每次都要建立通訊鏈路,進行資料傳輸,服務端,會啟動獨立的執行緒去處理,這些開銷都很昂貴,減少HTTP請求的資料目可以有效提高訪問效能。主要手段:合併CSS、合併JavaScript、合併圖片

B、使用瀏覽器快取 對靜態資原始檔可以快取在瀏覽器中,通過設定HTTP頭中的Cache-Control和Expires屬性,可以設定瀏覽器快取,針對JavaScript可以通過改變檔名實現,瀏覽器快取策略在更新靜態資源 時,應採用批量更新的方法,不宜一次全部更新

C、啟用壓縮,在伺服器端對檔案進行壓縮,在瀏覽器端對檔案解壓,一般採用GZip壓縮可達80%的壓縮率

D、CSS檔案放在頁面最上面、JavaScript放在頁面最下面(這一點深有體會)

E、減少Cookie傳輸

3.1.2 CDN加速

3.1.3 反向代理 除了安全功能、代理伺服器也可能通過配置快取功能加速Web請求

3.2 應用伺服器效能優化

3.2.1 分散式快取  快取的本質是一個記憶體Hash表,快取主要存放那些讀寫比很高、很少變化的熱資料。網站資料訪問一般遵循二八定律、即80%的訪問落在20%的資料上,將這20%的資料快取起來,可以很好的地改善系統效能。提高資料讀取速度 、降低儲存訪問壓力

使用快取時要注意快取穿透(惡意的) 目前成熟的快取產品有Memcached、Redis

3.2.2 非同步操作   任何可以晚點做的事情都應該晚點再做

3.2.3 使用叢集

3.2.4 程式碼優化 

    A、使用多執行緒

    B、資源複用 單例  物件池

   C、資料結構  如Time33可以很好的解決hash衝突

   D、垃圾回收  垃圾回收可能會對系統的效能特性產生巨大影響,理解垃圾回收機制有助於程式優化和引數調優。

3.3 儲存效能優化  

3.3.1 機械硬碟 VS 固態硬碟 

3.3.2 B+樹 VS LSM樹

       傳統機械磁碟具有快速順序讀寫、慢速隨機讀寫的訪問特性,這個特性對磁碟儲存結構和演算法的選擇影響很大。

       傳統的關係型資料庫使用的是B+樹。

       目前許多NoSQL採用的LSM樹

什麼是LSM樹:核心思想的核心就是放棄部分讀能力,換取寫入的最大化能力。LSM Tree ,這個概念就是結構化合並樹的意思,它的核心思路其實非常簡單,就是假定記憶體足夠大,因此不需要每次有資料更新就必須將資料寫入到磁碟中,而可以先將最新的資料駐留在磁碟中,等到積累到最後多之後,再使用歸併排序的方式將記憶體內的資料合併追加到磁碟隊尾(因為所有待排序的樹都是有序的,可以通過合併排序的方式快速合併到一起)。

3.3.3 RAID(廉價磁碟冗餘陣列) VS HDFS

RAID的技術有(以下假設有N塊磁碟)

RAID0、將資料分成N份,同時併發寫N塊磁碟,是一塊磁碟的N倍,缺點,不做備份,一塊磁碟出損壞,資料完整性被破壞

RAID1 寫入時將資料同時寫入兩塊磁碟,

RAID10 結合RAID0 RAID1 缺點 對磁碟的利用率不高

RAID3 將資料分成N-1份,併發寫入N-1塊磁碟,在第N塊磁碟記錄校驗資料,作何一塊磁碟損壞,可以利用其他N-1塊磁碟的資料修復。缺點,任何修改都會導致第N塊磁碟重寫校驗資料,N磁碟容易損壞。RAID3很少在實踐中使用

RAID5 與RAID3原理類似,但被更多使用,原因校驗資料不是寫入第N塊磁碟,而是螺旋式地寫入到所有的磁碟中,這樣校驗資料的修改被平均到所有磁碟上。

RAID6 與 RAID5類似,但是資料只寫入N-2塊磁碟,並螺旋式地在兩塊磁碟中寫入校驗資訊

HDFS,以塊為單位管理檔案,當應用程式寫檔案時,每寫完一個Block,HDFS就將其自動複製到另外兩臺機器上,保證每個Block有三個副本。

HDFS兩個重要的伺服器角色NameNode(只部署一個)、DataNode

效能優化的最終目的是改善使用者體驗,讓他們感覺網站很高。


相關文章