網站性能測試的主要指標有:前端
性能測試報告示例:sql
CDN 通常緩存的是靜態資源。數據庫
CDN 的本質仍然是一個緩存,並且將數據緩存在離用戶最近的地方,使用戶已最快速度獲取數據,即所謂網絡訪問第一跳。編程
傳統代理服務器位於瀏覽器一側,代理瀏覽器將 HTTP 請求發送到互聯網上,而反向代理服務器位於網站機房一側,代理網站服務器接收 HTTP 請求。瀏覽器
反向代理服務器能夠配置緩存功能加速 Web 請求,當用戶第一次訪問靜態內容時,靜態內容就會被緩存在反向代理服務器上。緩存
反向代理還能夠實現負載均衡,經過負載均衡構建的集羣能夠提升系統整體處理能力。安全
由於全部請求都必須先通過反向代理服務器,因此能夠屏蔽一些攻擊 IP,達到保護網站安全的做用。性能優化
網站性能優化第必定律:優先考慮使用緩存優化性能。bash
緩存指將數據存儲在相對較高訪問速度的存儲介質中,以供系統處理。一方面緩存訪問速度快,能夠減小數據訪問的時間,另外一方面若是緩存的數據是通過計算處理獲得的,那麼被緩存的數據無需重複計算便可直接使用,所以緩存還起到減小計算時間的做用。服務器
緩存的本質是一個內存 HASH 表。
緩存主要用來存放那些讀寫比很高、不多變化的數據,如商品的類目信息,熱門詞的搜索列表信息、熱門商品信息等。
緩存數據的選擇:
數據不一致和髒讀:
須要考慮緩存問題:緩存雪崩、緩存穿透、緩存預熱
異步處理通常是經過分佈式消息隊列的方式。
異步處理能夠解決一下問題:
在高併發場景下,使用負載均衡技術爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢,使用戶請求具備更好的響應延遲特性。
從資源利用的角度看,使用多線程的緣由主要有兩個:IO 阻塞和多 CPU。
線程數並不是越多越好,那麼啓動多少線程合適呢?
有個參考公式:
啓動線程數 = (任務執行時間 / (任務執行時間 - IO 等待時間)) * CPU 內核數
複製代碼
最佳啓動線程數和 CPU 內核數成正比,和 IO 阻塞時間成反比。若是任務都是 CPU 計算型任務,那麼線程數最多不要超過 CPU 內核數,由於啓動再多線程,CPU 也來不及調度;相反若是是任務須要等待磁盤操做,網絡響應,那麼多啓動線程有助於任務並罰賭,提升系統吞吐量。
線程安全問題
應該儘可能減小那些開銷很大的系統資源的建立和銷燬,如數據庫鏈接、網絡通訊鏈接、線程、複雜對象等。從編程角度,資源複用主要有兩種模式:單例模式和對象池。
根據具體場景,選擇合適的數據結構。
若是 Web 應用運行在 JVM 等具備垃圾回收功能的環境中,那麼垃圾回收可能會對系統的性能特性產生巨大影響。當即垃圾回收機制有助於程序優化和參數調優,以及編寫內存安全的代碼。
考慮使用固態硬盤替代機械鍵盤,由於它的讀寫速度更快。
傳統關係數據庫的數據庫索引通常都使用兩級索引的 B+ 樹結構,樹的層次最多三層。所以可能須要 5 次磁盤訪問才能更新一條記錄(三次磁盤訪問得到數據索引及行 ID,而後再進行一次數據文件讀操做及一次數據文件寫操做)。
因爲磁盤訪問是隨機的,傳統機械鍵盤在數據隨機訪問時性能較差,每次數據訪問都須要屢次訪問磁盤影響數據訪問性能。
許多 Nosql 數據庫中的索引採用 LSM 樹做爲主要數據結構。LSM 樹可視爲一個 N 階合併樹。數據寫操做都在內存中進行。在 LSM 樹上進行一次數據更新不須要磁盤訪問,速度遠快於 B+ 樹。
HDFS(分佈式文件系統) 更被大型網站所青睞。它能夠配合 MapReduce 併發計算任務框架進行大數據處理,能夠在整個集羣上併發訪問全部磁盤,無需 RAID 支持。