高併發&性能優化(一)------總體介紹

【開篇詞】

本文主要通過一些經典的高併發場景,以及一些基本的運維工具來講述一些關於高併發以及性能優化相關的內容,主要包括性能瓶頸的定位,性能調優的思路和技巧等。

   

【性能的衡量指標】

?什麼是性能

性能就是,在有限的時間內,使用有限的資源,完成任務。

在存儲資源成本越來越低的今天,時間,就成爲了性能指標的度量單位。

衡量指標主要包括以下幾個方面:

  

------吞吐量和響應速度

以紅綠燈爲例,我們開車到紅綠燈前,從排隊到行駛通過,這個過程花費的時間,叫響應時間,我們通過的速度,就叫響應速度。

然而,單位時間內通過的車輛總數,就叫吞吐量。

有幾個與吞吐量相關的指標:

QPS

每秒查詢的數量

TPS

每秒事務的數量

HPS

每秒的HTTP請求的數量

   

在性能優化的時候,我們首先要確認優化的目標,是吞吐量還是響應速度。

二者有什麼不同呢?

響應速度是對串行任務的優化,通過優化執行步驟解決問題;

吞吐量是對並行任務的優化,通過合理利用計算資源達到目標。

   

------響應時間

響應時間一般代表一個任務的總處理時間,它主要有兩個指標。

最常用的,即平均響應時間(AVG,主要體現服務的平均處理時長。

一般情況下,AVG可以很好的體現響應的效率,但是在高併發應用下,由於請求量很大,所以導致某些響應時間很長的請求被很快平均掉了,沒有被體現出來;

所以,我們又引入了百分位數(Percentile,它能夠反映出應用接口的整體響應情況

百分位數,是將響應時間從小到大排序,然後返回某一個百分位的響應時間數值。

比如比較常用的TP95 = 100ms,就代表超過95%的請求可以在100ms內返回。

對高百分位的值要求越高,對系統響應能力的穩定性要求越高

   

------併發量

併發量是指系統同時能處理的請求數量,這個指標反映了系統的負載能力。

   

------秒開率

秒開通常指的是在1s以下將應用加載完成,是用戶體驗很重要的指標。

   

------正確性

這個不用多說,主要指的是接口返回數據的正確性。

   

【理論方法】

------木桶理論

木桶可以裝多少水,取決於最短的那塊木板。

同理,系統的整體性能,就取決於系統中最慢的組件。

   

------基準測試

基準測試(Benchmark)用來測試程序的最佳性能。

java中,基準測試主要通過JMH工具進行

   

【性能優化的主要技術手段】

   

------複用

複用優化中,主要包含以下幾個方面:

緩衝(Buffer

常見於對數據的暫存,然後批量傳輸或者寫入
用來緩解不同設備之間頻繁地、緩慢地隨機寫
主要針對寫操作

緩存(Cache

對於已經讀取的操作,將其暫存於速度較快的區域,重複讀取的時候速度就會得到加強。
主要針對讀操作

池化

參照線程池,避免了資源的大量創建和銷燬,以及上下文切換


------
計算優化

並行執行

  • 多機(負載均衡)
  • 多進程(如nginx只有一個master進程,卻有多個Worker進程)
  • 多線程

異步

將應用的同步方式修改爲異步方式

惰性加載

將有些非關鍵的圖片或者其他顯示信息,在應用加載(無需等)結束之後慢慢加載

   

------結果集優化

在傳輸之前,將傳輸的內容進行壓縮或者簡化

比如nginxgzip,比如xml替換成json

   

------資源衝突優化

主要是對沖突鎖的優化。

   

------算法優化/高效實現

算法優化指的是針對代碼實現算法的優化,高效實現指的是儘量摒棄原有的舊的效率低下的插件以及框架,使用比較流行的技術。

   

------JVM 優化

主要針對java虛擬機相關的一些優化。

一般參數比較適合的時候,性能會好很多,參數設置不當會造成OOM等後果。

目前,垃圾回收器已經廣泛使用G1,通過很少的參數配置,內存即可高效回收;CMS垃圾回收器在Java14中已經被移除,由於其GC時間不可控,所以在使用時應當小心注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章