操做 | 響應時間 |
L1緩存 | 1ns |
分支錯誤 | 3ns |
二級緩存 | 4ns |
互斥鎖/解鎖 | 17ns |
壓縮1KB的Zippy | 2,000ns≈2μs |
經過商品網絡發送2,000字節 | 88ns |
SSD隨機讀取 | 16,000ns≈16μs |
從存儲器中順序讀取1,000,000字節 | 5,000ns≈5μs |
往返於同一數據中心 | 500,000ns≈500μs |
從SSD中順序讀取1,000,000字節 | 78,000ns≈78μs |
磁盤查找 | 3,000,000ns≈3ms |
從磁盤順序讀取1,000,000字節 | 1,000,000ns≈1ms |
將數據包往返於荷蘭 | 150,000,000ns≈150ms |
從遠程分佈式緩存Redis讀取一個數據 | 0.5ms |
機械磁盤一次尋址定位 | 4ms |
在數據庫中查詢一條記錄(有索引) | 十幾ms |
打開一個網站 | 幾秒 |
https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.htmljavascript
指單位時間內系統處理的請求數量,體現系統的總體處理能力。css
TPS:(每秒事務數)是吞吐量的一個經常使用量化指標。html
HPS:(每秒HTTP請求數)。前端
QPS:(每秒查詢數)。java
性能測試、負載測試、壓力測試、穩定性測試。web
測試目標:一、系統的最大負載點。二、系統的崩潰點。數據庫
排查一個網站或者程序瓶頸的手法基本相同:檢查請求處理的各個環節的日誌,分析哪一個環節響應時間不合理、超過預期;而後檢查監控數據,分析影響性能的主要因素是內存、磁盤、網絡仍是CPU,編程
是代碼問題仍是架構設計不合理,或者系統資源確實不足。後端
CDN(Content Distribute Network,內容分發網絡)的本質仍然是一個緩存,並且將數據緩存在離用戶最近的地方,使用戶以最快速度獲取數據,即所謂網絡訪問第一跳。
能夠配置緩存加速web請求
網站性能優化第必定律:優先考慮使用緩存優化性能
1、緩存的基本原理 緩存指將數據存儲在相對較高訪問速度的存儲介質中,以供系統處理。 網站數據訪問一般遵循二八定律,即80%的訪問落在20%的數據上,所以利用Hash表和內存的高速訪問特性,將這20%的數據緩存起來,可很好的改善系統性能。
二、合理使用緩存
頻繁修改的數據:不宜使用緩存。
(數據的讀寫比在2:1以上,即寫入一次緩存,在數據更新前至少讀取兩次,緩存纔有意義)
沒有熱點的訪問:不宜使用緩存。
(若是應用系統訪問數據沒有熱點,不遵循二八定律,即大部分數據訪問並無集中在小部分數據上,那麼緩存也就沒有意義)
數據不一致與髒讀:若是不能容忍必定時間的數據不一致,也不建議使用緩存。
緩存可用性:緩存是爲了提升數據讀取性能,緩存數據丟失或者緩存不可用不會影響到應用程序的處理,由於能夠從數據庫直接獲取數據。
但當緩存服務崩潰時,數據庫的壓力會驟然增長,嚴重會致使宕機。
(因此須要避免 緩存雪崩)
緩存預熱:緩存中存放的是熱點數據,熱點數據又是緩存系統利用LRU對不斷訪問的數據篩選淘汰數來的,這個過程須要花費較長的時間。若是是新啓動的緩存系統,若是沒有任何數據,在重建緩存數據的過程當中
系統的性能和負載都不太好,那麼最好在緩存系統啓動時就把熱點數據加載好。
緩存穿透:若是由於不恰當的業務或者惡意攻擊持續高併發地請求某個不存在的數據,因爲緩存沒有保存該數據,全部的請求都會落在數據庫上,會對數據庫形成很大的壓力,甚至崩潰。
(一個簡單的對策是將不存在的數據也緩存起來)
三、分佈式緩存架構
指緩存部署多個服務器組成的集羣中,以集羣方式提供緩存服務。
四、Memcached
(簡單的通訊協議、豐富的客戶端程序、高性能的網絡通訊、高效的內存管理、互不通訊的服務器集羣架構)
任何能夠晚點作的事情都應該晚點再作。
使用消息隊列將調用異步話,經過異步處理,將短期高併發產生的事務消息存儲在消息隊列中,從而削平高峯期的併發事務。 ----- 消息隊列具備很好的削峯做用
在高併發訪問的場景下,使用負載均衡技術爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢。
1、多線程 使用多線程的緣由主要有兩個:IO阻塞與多CPU。 (理想的系統Load是既沒有進程(線程)等待也沒有CPU空閒)。 啓動線程數=[任務執行時間/(任務執行時間-IO等待時間)] * CPU內核數 解決線程安全的主要手段: ①: 將對象設計爲無狀態對象(指對象自己不存儲狀態信息),這樣多線程併發訪問的時候就不會出現狀態不一致,java web 開發中經常使用的servlet對象就設計爲無狀態對象。 ②:使用局部對象 ③:併發訪問資源時使用鎖 2、資源複用 從編程角度,資源複用主要兩張模式:單例(Singleton) 和對象池 (Object Pool) 好比:數據庫鏈接、網絡通訊鏈接、線程、複雜對象等。 3、數據結構 4、垃圾回收 合理設置堆大小,減小Full GC次數
①、機械硬盤 & 固態硬盤瀏覽器
②、B+樹 & LSM樹
③、RAID & HDFS