1. 講講你認為的高性能網站架構,或者說現在流行的網站架構。 2. 什麼是一主多從? 3. 什麼是負載均衡? ...
1. 講講你認為的高性能網站架構,或者說現在流行的網站架構。 性能是網站的一個重要指標,是網站架構設計的一個重要方面。衡量性能有一系列指標,重要的有響應時間、TPS、系統性能計數器等,通過測試這些指標可以確定系統設計是否達到目標,分析瓶頸,預測網站容量,並對異常指標進行報警,保障系統可用性。根據網站分層架構,網站的性能優化可分為Web前端性能優化、應用伺服器性能優化、存儲性能優化三個方面。 1)Web前端性能優化 (1)瀏覽器訪問優化
- 減少HTTP請求
① 將瀏覽器一次訪問需要的CSS、JavaScript合併成一個文件。
② 多張圖片合併成一張。 - 使用瀏覽器緩存
① 設置HTTP頭中的Cache-Control和Expires屬性,將一些更新頻率比較低但又是每次HTTP請求都需要的靜態資源文件,如CSS、JavaScript、Logo、圖標等,緩存在瀏覽器中,改善性能。
② 有時,靜態資源文件需要及時應用到客戶端瀏覽器,可通過生成新的JavaScript文件來更新HTML中文件的引用,而不是更新JavaScript文件內容。
③ 使用瀏覽器緩存策略更新的網站,在更新靜態資源時應採用批量更新的方法,比如需要更新10個圖標文件,不宜把10個文件一次全部更新,而是應該一個文件一個文件逐步更新,且兩個文件之間具有一定的時間間隔,以免用戶瀏覽器突然大量緩存失效,集中更新緩存,造成伺服器負載驟增、網路堵塞的情況。 - 啟用壓縮
在伺服器端對文件進行壓縮,在瀏覽器端對文件進行解壓縮,可有效減少通信傳輸的數據量。但是壓縮對伺服器和瀏覽器產生一定的壓力,在通信帶寬良好,而伺服器資源不足的情況下要權衡考慮。 - CSS放在頁面最上面,JavaScript放在頁面底部
瀏覽器會在下載全部CSS之後,才會對整個頁面進行渲染,所以CSS放在頁面最上面,讓瀏覽器儘快下載CSS;而瀏覽器載入JavaScript後會立即執行,可能會阻塞整個頁面,造成頁面顯示緩慢,因此JavaScript放在頁面底部。 - 減少cookie傳輸
一方面,cookie包含在每次請求和響應中,太大的數據量會影響數據傳輸;另一方面,對於某些靜態資源的訪問,如CSS、JavaScript等,發送cookie沒有意義,可以考慮靜態資源使用獨立功能變數名稱訪問,避免請求靜態資源時發送cookie,減少cookie傳輸的次數。
- CDN的本質仍然是一個緩存,將數據緩存在離用戶最近的地方,使用戶以最快的速度獲取數據。
- CDN能夠緩存的一般是靜態資源,如圖片、文件、CSS、JavaScript腳本、靜態網頁等,這些文件的訪問頻度很高,將其緩存在CDN中,可極大改善網頁打開的速度。
- 當用戶的請求到達CDN伺服器後,如果CDN中存在瀏覽器請求的資源,就直接返回給瀏覽器,最短路徑返迴響應,加快用戶訪問速度,減少數據中心負載壓力。
- 安全功能 任何來自互聯網的訪問請求必須經過反向代理伺服器。
- 緩存功能 當用戶第一次訪問靜態內容的時候,靜態內容就被緩存在反向代理伺服器上,這樣當其他用戶訪問該靜態內容的時候,就可以直接從反向代理伺服器返回,加速web請求響應速度,減輕web伺服器負載壓力。
- 負載均衡功能 充當負載均衡伺服器均衡地分發請求,平衡集群中各個伺服器的負載壓力。
- 使用多線程
利用多線程IO阻塞與執行交替進行,可最大限度地利用CPU資源。 - 資源復用
系統運行時,儘量減少開銷很大的系統資源的創建和銷毀,如資料庫鏈接、網路通信連接、線程、對象等。資源復用主要有兩種模式:單例和對象池。 - 數據結構
在不同場景中合理使用恰當的數據結構,靈活組合各種數據結構改善數據讀寫和計算特性,可以極大優化程式性能。 - 垃圾回收
一個對象,可以有一個或多個引用變數指向它。當一個對象不再有任何一個引用變數指向它時,這個對象就被應用拋棄了。也就是這個對象可以被垃圾回收機制回收了。垃圾回收機制有助於程式優化和參數調優,以及編寫記憶體安全的代碼。
- 傳統資料庫使用B+樹來改善數據訪問特性。B+樹是一種專門針對磁碟存儲而優化的N叉排序樹,以樹節點為單位存儲在磁碟中,從根開始查找所需數據所在的節點編號和磁碟位置,將其載入到記憶體中然後繼續查找,直到找到所需的數據。缺點是由於每次磁碟訪問都是隨機的,且傳統機械硬碟在數據隨機訪問時性能較差,每次數據訪問都需要多次訪問磁碟影響數據訪問性能。
- LSM樹可以看作是一個N階合併樹。數據寫操作(包括插入、修改、刪除)都在記憶體中進行,並且都會創建一個新記錄,這些數據在記憶體中仍然還是一棵排序樹。在需要進行讀操作時,總是從記憶體中的排序樹開始搜索,如果沒有找到,就從磁碟上的排序樹順序查找。在LSM樹上進行一次數據更新不需要磁碟訪問,在記憶體即可完成,速度遠快於B+樹。當數據訪問以寫操作為主,而讀操作則集中在最近寫入的數據上時,使用LSM樹可以極大程度地減少磁碟的訪問次數,加快訪問速度。
- RAID(廉價磁碟冗餘陣列)技術主要是為了改善磁碟的訪問延遲,增強磁碟的可用性和容錯能力。
- HDFS(Hadoop分散式文件系統)在整個存儲集群的多台伺服器上進行數據併發讀寫和備份,可以看做在伺服器集群規模上實現了類似RAID的功能,因此不需要磁碟RAID。