如何提升吞吐量-QPS三要素

影響系統(tǒng)吞吐量的因素有哪些呢?下面層QPS三要素 線程、響應(yīng)時間、瓶頸資源做分析

1.線程

設(shè)置多少線程合適?

  • 設(shè)置過多
  • 設(shè)置過少

對象的生命周期,內(nèi)存的占用總量,內(nèi)核態(tài)與用戶態(tài)的切換

場景一

  • cpu計算時間18ms(running)
  • 查詢數(shù)據(jù)庫,網(wǎng)絡(luò)io時間80ms(waiting)
  • 解析結(jié)果2ms
  • 如果服務(wù)器2CPU,大家看看這里多少線程合適?

在充分利用CPU資源的情況下:

線程數(shù)量 = (18+80+2)/(18+2) * 2 = 10

結(jié)論1:以CPU計算為性能瓶頸

線程數(shù)量=((CPU時間+CPU等待時間) / CPU時間) * CPU數(shù)量

場景二

  • 線程同步鎖(數(shù)據(jù)庫事務(wù)鎖)50ms
  • cpu時間18ms
  • 查詢數(shù)據(jù)庫,網(wǎng)絡(luò)io時間80ms
  • 解析結(jié)果2ms

以CPU計算為瓶頸,計算線程數(shù)量

線程數(shù)=(18 + 2 + 50 + 80) / 20 * 2 = 15

以線程同步鎖為瓶頸,計算線程數(shù)

線程數(shù)=(50 + 18 + 2 + 80) / 50 * 1/1 = 3

結(jié)論2:已線程阻塞資源為瓶頸

瓶頸資源的線程并行數(shù)=瓶頸資源的總份數(shù)/單次請求占用瓶頸資源的份數(shù)
 
線程數(shù)量 =(線程總時間/瓶頸資源時間) * 瓶頸資源的線程并行數(shù)

2.響應(yīng)時間

響應(yīng)時間決定QPS?

QPS = 1000/響應(yīng)時間 * 線程數(shù)量
實例
線程數(shù)量=線程總時間/瓶頸資源時間 * 瓶頸資源并行數(shù)
線程數(shù)量=(30+10+30+10+20)/ (10 + 10 + 20) * 4 = 10
 
 
QPS = 線程數(shù)量 * 1000/響應(yīng)總時間
QPS = 10 * 1000/(30+10+30+10+20)
    = 100

改進,將查詢操作并行

優(yōu)化后
線程數(shù)量=線程總時間/瓶頸資源時間 * 瓶頸資源并行數(shù)
線程數(shù)量=(30+10+10+20)/ (10 + 10 + 20) * 4 = 9
 
 
QPS = 線程數(shù)量 * 1000/響應(yīng)總時間
QPS = 9 * 1000/(30+10+10+20)
    = 100

結(jié)論3:QPS = 1000/瓶頸資源時間 * 瓶頸資源并行數(shù)

線程數(shù)量=線程總時間/瓶頸資源時間 * 瓶頸資源幵行數(shù)
 
QPS = 線程數(shù)量 * 1000/線程總時間
 
===>
 
QPS = 1000/瓶頸資源時間 * 瓶頸資源并行數(shù)

3.瓶頸資源

要分析系統(tǒng)的瓶頸資源,需求對系統(tǒng)特性做個區(qū)分,分析出系統(tǒng)是哪種類型的系統(tǒng)

  • IO密集型系統(tǒng)
    定義:IO密集型,即該任務(wù)需要大量的IO,即大量的阻塞。
    在單線程上運行IO密集型任務(wù)會導(dǎo)致浪費大量的CPU運算能力浪費在等待。
    所以IO密集型任務(wù)中使用多線程可以大大的加速程序運行,即使在單核CPU上,這種加速主要利用了被浪費掉的阻塞時間。

     第一種配置方式:
     由于IO密集型任務(wù)線程并不是一直在執(zhí)行任務(wù),則應(yīng)配置盡可能多的線程。
     配置公式:CPU核數(shù) * 2
    
    
     第二種配置方式:
     IO密集型時,大部分線程都阻塞,故需要多配置線程數(shù)。
     配置公式:CPU核數(shù) / (1 – 阻塞系數(shù))(0.8~0.9之間)
     比如:8核 / (1 – 0.9) = 80個線程數(shù)
    
  • CPU密集型系統(tǒng)
    定義:CPU密集型的意思就是該任務(wù)需要大量運算,而沒有阻塞,CPU一直全速運行
    CPU密集型任務(wù)只有在真正的多核CPU上才可能得到加速(通過多線程)
    CPU密集型任務(wù)配置盡可能少的線程數(shù)
    CPU密集型線程數(shù)配置公式:(CPU核數(shù)+1)個線程的線程池

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容