從我們的直觀感受來講,對(duì)于任何服務(wù),只要在中間增加了一層,肯定會(huì)對(duì)服務(wù)性能造成影響。那么到底會(huì)影響什么呢?在考察一個(gè)服務(wù)性能的時(shí)候,有兩個(gè)最重要的指標(biāo),那就是吞吐和延遲。吞吐定義為服務(wù)端單位時(shí)間內(nèi)能處理的請(qǐng)求數(shù),延遲定義為客戶端從發(fā)出請(qǐng)求到收到請(qǐng)求的耗時(shí)。中間環(huán)節(jié)的引入我們首先想到的就是那會(huì)增加處理時(shí)間,這就會(huì)增加服務(wù)的延遲,于是順便我們也會(huì)認(rèn)為吞吐也會(huì)下降。從單個(gè)用戶的角度來講,事實(shí)確實(shí)如此,我完成一個(gè)請(qǐng)求的時(shí)間增加了,那么我單位時(shí)間內(nèi)所能完成的請(qǐng)求量必定就減少了。然而站在服務(wù)端的角度來看,雖然單個(gè)請(qǐng)求的處理時(shí)間增加了,但是總的吞吐就一定會(huì)減少嗎?
接下來我們就來對(duì)redis來進(jìn)行一系列的測(cè)試,利用redis自帶的redis-benchmark,分別對(duì)set和get命令;單個(gè)發(fā)送和批量發(fā)送;直連redis和連接redis代理predixy。這樣組合起來總共就是八種情況。redis-benchmark、redis是單線程的,predixy支持多線程,但是我們也只運(yùn)行一個(gè)線程,這三個(gè)程序都運(yùn)行在一臺(tái)機(jī)器上。
項(xiàng)目 內(nèi)容
CPU?AMD Ryzen 7 1700X Eight-Core Processor 3.775GHz?
內(nèi)存?16GB DDR4 3000?
OS?x86_64 GNU/Linux 4.10.0-42-generic #46~16.04.1-Ubuntu?
redis?版本3.2.9,端口7200?
predixy?版本1.0.2,端口7600?
八個(gè)測(cè)試命令
測(cè)試命令 命令行
redis set?redis-benchmark -h xxx -p 7200 -t set -r 3000 -n 40000000?
predixy set?redis-benchmark -h xxx -p 7600 -t set -r 3000 -n 40000000?
redis get?redis-benchmark -h xxx -p 7200 -t get -r 3000 -n 40000000?
predixy get?redis-benchmark -h xxx -p 7600 -t get -r 3000 -n 40000000?
redis 批量set?redis-benchmark -h xxx -p 7200 -t set -r 3000 -n 180000000 -P 20?
predixy 批量set?redis-benchmark -h xxx -p 7600 -t set -r 3000 -n 180000000 -P 20?
redis 批量get?redis-benchmark -h xxx -p 7200 -t get -r 3000 -n 420000000 -P 20?
predixy 批量get?redis-benchmark -h xxx -p 7600 -t get -r 3000 -n 220000000 -P 20?
以上8條命令采取redis-benchmark默認(rèn)的50個(gè)并發(fā)連接,數(shù)據(jù)大小為2字節(jié),指定3000個(gè)key,批量測(cè)試時(shí)一次發(fā)送20個(gè)請(qǐng)求。依次間隔2分鐘執(zhí)行以上命令,每一個(gè)測(cè)試完成時(shí)間大約4分鐘。最后得到下圖的總體結(jié)果:
眼花繚亂是不是?左邊的縱軸表示CPU使用率,右邊的縱軸表示吞吐。其中redis used表示redis總的CPU使用率,redis user表示redis CPU用戶態(tài)使用率,redis sys表示redis CPU內(nèi)核態(tài)使用率,其它類推。先別擔(dān)心分不清里面的內(nèi)容,下面我們會(huì)一一標(biāo)出數(shù)值來。在這圖中總共可以看出有八個(gè)凸起,依次對(duì)應(yīng)我們上面提到的八個(gè)測(cè)試命令。
1 redis set測(cè)試
2 predixy set測(cè)試
3 redis get測(cè)試
4 predixy get測(cè)試
5 redis 批量set測(cè)試
評(píng)論
查看更多