<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不壓測,如何估算單機(jī)最大QPS?

          共 1030字,需瀏覽 3分鐘

           ·

          2021-08-25 04:43

          日常工作中,在監(jiān)控系統(tǒng)上我們能看到一個微服務(wù)的總QPS和每臺機(jī)器的單機(jī)QPS,但這個數(shù)值并不是單機(jī)能承受的最大值。


          想要知道單機(jī)最大QPS,一個辦法是壓測。那有沒有辦法,在不壓測的情況下,對單機(jī)QPS做一個預(yù)估呢?


          先看一個評估單機(jī)最大QPS的簡單方法:假設(shè)系統(tǒng)處理一個請求的響應(yīng)時間是100ms,則1s可以處理10個請求,然后CPU是24核,所以QPS = 10*24 = 240。

          請問,這個評估方法正確嗎?如果是一個純粹的CPU密集型應(yīng)用,只讀寫內(nèi)存,無任何磁盤I/O,網(wǎng)絡(luò)I/O(RPC調(diào)用、數(shù)據(jù)庫訪問、緩存讀寫),則這個評估方法基本是正確的。

          但實(shí)際上,對于大部分的Web應(yīng)用來說,雖然請求處理時間是100ms,但不代表CPU就運(yùn)行了100ms。那我怎么知道,這100ms,哪些是耗在了CPU計算,哪些是耗在了數(shù)據(jù)庫訪問,哪些是耗在了磁盤讀寫呢?一個辦法是對代碼做profiling,對代碼打點(diǎn),統(tǒng)計這100ms的耗時分布。


          假設(shè),最終發(fā)現(xiàn):

          100ms = 10ms(CPU計算)+ 70ms(數(shù)據(jù)庫訪問)+ 20ms(緩存讀寫)

          那意味著CPU只運(yùn)行了10ms,另外90ms都是空閑的,在等待I/O。假設(shè)讓CPU跑滿,1s鐘則應(yīng)該可以處理100個請求,則估算的最大QPS = 100 * 24 = 2400。(這里是假設(shè)CPU是整個系統(tǒng)的資源瓶頸,不是內(nèi)存、帶寬)


          當(dāng)然,要達(dá)到2400/s,得讓CPU充分利用,不等待I/O,那技術(shù)上如何實(shí)現(xiàn)呢?

          (1)開多線程 

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

          在這個例子中,就是24 * 100/10 = 240個線程。當(dāng)然,線程多了,線程切換也需要耗費(fèi)一定的CPU時間,所以實(shí)際效果可能是比2400qps略小。

          (2)使用異步I/O

          不等待I/O,每個CPU只需要一個線程,線程數(shù) = CPU數(shù)。最典型的例子就是Redis和Nginx,前者是單線程程序,后者是單進(jìn)程程序,跑一個CPU。有多少個CPU,就部署多少個實(shí)例。


          知道了單機(jī)的最大QPS,緊接著就是下1個問題:

          我怎么知道這個最大QPS已經(jīng)是上限了,還有多大提升空間?


          瀏覽 554
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美国产操逼 | 五月天深爱激情网 | 啊啊啊啊91 | 逼网站| 手机看片天天干 |