網站性能是客觀的指標,能夠具體到響應時間、吞吐量等,同時也是主觀感覺。前端
網站響應速度的快慢,包括用戶計算機和服務器通訊的時間、網站服務器處理的時間、用戶計算機瀏覽器構造請求和解析響應數據的時間。web
經過前端手段優化來改善用戶視角下的網站性能。數據庫
關注程序自己及相關子系統的性能,包括響應延遲、系統吞吐量、併發處理能力、系統穩定性等。瀏覽器
經過使用緩存、集羣、異步消息、代碼優化來改善性能。緩存
關注基礎設施性能和資源利用率。安全
經過建設優化骨幹網、使用性價比高的定製服務器、利用虛擬化技術等優化資源利用。性能優化
執行一個操做須要的時間,從發出請求開始到收到最後響應數據所須要的時間。測試程序經過模擬應用程序,記錄收到相應和發出請求的時間差來計算系統響應時間。服務器
指系統可以同時處理請求的數目,反映了系統的負載特性。網絡
指單位時間內系統處理的請求數量,體現系統的總體處理能力。數據結構
描述服務器或操做系統性能的一些指標,包括System Load、對象與線程數、內存使用、CPU使用、磁盤和網絡I/O等指標。
驗證資源在可接受範圍內,是否能達到系統性能預期。
不斷增長系統壓力,直到系統某項或多項指標達到安全臨界值。
超過安全負載狀況下,繼續增長系統壓力,直到系統崩潰或不能再處理任何請求,得到系統最大承受壓力。
給系統加載必定業務壓力,檢測系統是否可以較長時間穩定運行。
系統性能測試遵循拋物線規律。
性能測試反映的是系統在實際生產環境中使用時,隨着用戶併發訪問數量的增長,系統的處理能力。
反映測試曲線上的規律。
分析請求經歷的各個環節,排查可能出現瓶頸的地方,定位問題。
針對特定問題進行優化,主要有Web前端性能優化、應用服務器性能優化、存儲服務器性能優化三大類。
在網站業務邏輯以前,包括瀏覽器加載、網站視圖模型、圖片服務、CDN服務等,主要優化手段有優化瀏覽器訪問、使用反向代理、CDN等。
服務器端須要啓用獨立線程處理http請求,將瀏覽器一次訪問須要的JS、CSS等合併成一個文件,只須要一次請求完成訪問。
將更新頻率低的靜態資源緩存在客戶端瀏覽器。
服務器中對文件壓縮,客戶端瀏覽器解壓縮。
下載徹底部CSS再渲染頁面,瀏覽器加載JS後當即執行。
太大Cookie影響數據傳輸。
將靜態數據緩存在離用戶最近的網絡運營商機房中,以最快速度在網絡訪問第一跳中獲取數據。
反向代理服務器位於網站機房一側,代理網站Web服務器接收http請求加速請求響應。還能夠保護瀏覽器安全,在web服務器和可能的網絡攻擊之間創建屏障,還有實現負載均衡的功能。
處理網站業務的服務器,是網站開發最複雜、變化最多的地方。
網站性能優化第必定律:優先考慮使用緩存優化性能。
將數據存儲在相對較高訪問速度的存儲介質中,以供系統處理。主要存儲讀寫比很高、不多變化的數據。
不要濫用緩存。可能出現的問題有頻繁修改的數據、沒有熱點的訪問、數據不一致與髒讀、緩存可用性、緩存預熱、緩存穿透等。
緩存部署在多個服務器組成的集羣中,以集羣方式提供緩存服務,有兩種架構,一種是以JBoss Cache爲表明的須要更新同步的分佈式緩存,一種是以Memcached爲表明的互不通訊的分佈式緩存。
JBoss Cache的分佈式緩存集羣中全部服務器中保存相同緩存數據,當某臺服務器中有緩存更新是,通知其餘服務器更新緩存或清除緩存數據。
是一種有着簡單的通訊協議、豐富的客戶端程序、高性能的網絡通訊、高效的內存管理、互不通訊的服務器集羣架構。
使用消息隊列將調用異步化,改善網站的擴展性,削平高峯期的併發事務。
數據寫入消息隊列後當即返回給用戶,後續的業務校驗、數據庫操做等可能失敗,因此須要修改業務流程來配合。
「任何能夠晚點作的事情都應該晚點再作。」
使用負載均衡技術爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢。
從資源利用角度看,IO阻塞和多CPU是使用多線程的主要緣由。
啓動線程數 = [ 任務執行時間 /( 任務執行時間 - IO等待時間 )] * CPU內核數
須要關注多線程安全問題,解決多線程安全的主要手段有:(1)將對象設計爲無狀態對象;(2)使用局部對象;(3)併發訪問資源時使用鎖。
減小開銷很大的系統資源的建立和銷燬,資源複用的兩種模式:單例和對象池。
靈活組合各類數據結構改善數據讀寫和計算特性優化程序性能。
理解垃圾回收機制,編寫內存安全的代碼。
機械硬盤在數據連續訪問時效率高,在隨機訪問時效率低。固態硬盤隨機訪問效率高。
對數據先排序後存儲,加快檢索速度。傳統關係型數據庫使用B+樹,非關係型NoSQL使用LSM樹。做爲存儲結構,B+樹不是關係型數據庫獨有的,NoSQL數據庫也可以使用B+樹,關係型數據庫也可以使用LSM樹。
RAID(廉價磁盤冗餘陣列)技術改善磁盤的訪問延遲,加強磁盤的可用性和容錯能力。主要有RAID0、RAID一、RAI/十、RAID五、RAID6等類型。
HDFS以塊(Block)爲單位管理文件內容,一個文件被分割成若干個Block,當應用程序寫文件時,每寫完一個Block,HDFS就將其自動複製到另外兩臺機器上,保證每一個Block有兩個副本。對文件進行處理計算時,使用MapReduce併發計算任務框架。