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

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

1.線程

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

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

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

場(chǎng)景一

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

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

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

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

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

場(chǎng)景二

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

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

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

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

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

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

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

2.響應(yīng)時(shí)間

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

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

改進(jìn),將查詢操作并行

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

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

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

3.瓶頸資源

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容