Redis開(kāi)源版、Redis倚天版、Tair內(nèi)存型性能白皮書(shū)
本文介紹Tair內(nèi)存型、Redis開(kāi)源版、Redis倚天版的性能測(cè)試結(jié)果,以及測(cè)試環(huán)境、測(cè)試工具與測(cè)試方法。
測(cè)試結(jié)果
對(duì)包括SET、GET等在內(nèi)的十余種Redis基礎(chǔ)命令進(jìn)行性能測(cè)試并給出測(cè)試指標(biāo)。
命令 | Tair內(nèi)存型 | Redis開(kāi)源版 | Redis倚天版 | ||||||
QPS | Average Latency | 99th Percentile Latency | QPS | Average Latency | 99th Percentile Latency | QPS | Average Latency | 99th Percentile Latency | |
SET | 282,656 | 0.45 | 0.86 | 142,376 | 0.45 | 0.72 | 126,493 | 0.50 | 1.01 |
GET | 519,761 | 0.24 | 0.36 | 204,690 | 0.31 | 0.47 | 201,492 | 0.31 | 0.53 |
ZADD | 208,169 | 0.62 | 1.14 | 113,135 | 0.57 | 0.78 | 90,046 | 0.71 | 1.44 |
ZSCORE | 463,904 | 0.27 | 0.40 | 170,163 | 0.37 | 0.54 | 172,508 | 0.37 | 0.68 |
HSET | 260,069 | 0.49 | 1.03 | 124,613 | 0.51 | 0.97 | 116,706 | 0.54 | 1.12 |
HGET | 494,603 | 0.25 | 0.37 | 188,903 | 0.34 | 0.52 | 175,461 | 0.36 | 0.64 |
LPUSH | 286,324 | 0.44 | 0.84 | 153,269 | 0.42 | 0.59 | 129,188 | 0.49 | 0.96 |
LINDEX | 414,070 | 0.30 | 0.45 | 157,568 | 0.40 | 0.58 | 154,444 | 0.41 | 0.76 |
SADD | 292,738 | 0.44 | 0.86 | 140,155 | 0.45 | 0.63 | 126,199 | 0.50 | 0.99 |
SISMEMBER | 531,139 | 0.24 | 0.34 | 181,492 | 0.35 | 0.52 | 211,807 | 0.30 | 0.47 |
EVALSHA | 214,303 | 0.60 | 1.12 | 101,136 | 0.63 | 0.91 | 76,659 | 0.84 | 2.09 |
測(cè)試指標(biāo)說(shuō)明:
QPS:每秒處理的讀寫(xiě)操作數(shù),單位為次/秒。
Average Latency:操作的平均延遲時(shí)間,單位為毫秒(ms)。
99th Percentile Latency:99%操作延遲,指99%操作的最大延遲時(shí)間,單位為毫秒(ms)。例如該指標(biāo)的值為0.5毫秒,表示99%的請(qǐng)求可以在0.5毫秒內(nèi)被處理。
測(cè)試結(jié)果為在多個(gè)可用區(qū)、對(duì)多個(gè)實(shí)例、進(jìn)行多次測(cè)試的平均值。
測(cè)試結(jié)果中的延遲為全鏈路延遲,包含數(shù)據(jù)包在DB側(cè)及壓測(cè)端排隊(duì)的時(shí)延。
測(cè)試結(jié)果受到多種不可控因素的影響,存在約10%的誤差屬于合理范圍。
測(cè)試結(jié)果僅代表新購(gòu)實(shí)例進(jìn)行單一命令測(cè)試的結(jié)果,而生產(chǎn)環(huán)境實(shí)例的壓力測(cè)試請(qǐng)以業(yè)務(wù)壓測(cè)場(chǎng)景為準(zhǔn)。
測(cè)試結(jié)果反映了實(shí)例的極限性能,在生產(chǎn)環(huán)境中,不建議將實(shí)例維持在極限負(fù)載狀態(tài)。
測(cè)試環(huán)境
數(shù)據(jù)庫(kù)
測(cè)試環(huán)境信息 | 說(shuō)明 |
地域和可用區(qū) | 華北2(北京)可用區(qū)L、華東1(杭州)可用區(qū)K、華東2(上海)可用區(qū)N、華南1(深圳)可用區(qū)C。 說(shuō)明 本測(cè)試在多個(gè)地域進(jìn)行,本測(cè)試報(bào)告僅代表上述可用區(qū)的平均性能水平。 |
實(shí)例架構(gòu) | 標(biāo)準(zhǔn)架構(gòu)(雙副本),不啟用集群,詳情請(qǐng)參見(jiàn)標(biāo)準(zhǔn)架構(gòu)。 說(shuō)明 其他架構(gòu)的性能說(shuō)明:
n為集群架構(gòu)的分片節(jié)點(diǎn)數(shù)或讀寫(xiě)分離架構(gòu)的總節(jié)點(diǎn)數(shù)。 |
實(shí)例規(guī)格 | 由于測(cè)試結(jié)果受規(guī)格影響較小,本次測(cè)試以下實(shí)例規(guī)格:
規(guī)格詳情請(qǐng)參見(jiàn)規(guī)格查詢導(dǎo)航。 |
測(cè)試客戶端
測(cè)試環(huán)境信息 | 說(shuō)明 |
部署壓測(cè)工具的設(shè)備 | 云服務(wù)器ECS實(shí)例,規(guī)格為ecs.g7.8xlarge,詳情請(qǐng)參見(jiàn)實(shí)例規(guī)格族。 |
地域和可用區(qū) | 與實(shí)例對(duì)應(yīng)的地域及可用區(qū)。 |
操作系統(tǒng) | Alibaba Cloud Linux 3。 |
網(wǎng)絡(luò) | 與Tair實(shí)例為相同專有網(wǎng)絡(luò)(VPC),且與Tair實(shí)例通過(guò)專有網(wǎng)絡(luò)連接。 |
測(cè)試工具
使用resp-benchmark開(kāi)源工具進(jìn)行壓測(cè)。SET、GET等常規(guī)測(cè)試項(xiàng)與redis-benchmark保持一致,在其余測(cè)試項(xiàng)中可以更有效地模擬用戶真實(shí)場(chǎng)景,壓滿Tair多個(gè)線程,從而體現(xiàn)Tair的實(shí)際性能。
您可以執(zhí)行resp-benchmark --help
命令獲取更詳細(xì)的配置項(xiàng)說(shuō)明,或訪問(wèn)其GitHub主頁(yè)。
安裝方法
pip install resp-benchmark==0.1.7
測(cè)試示例
每次測(cè)試時(shí)建議先清空數(shù)據(jù)庫(kù),避免已有數(shù)據(jù)存在干擾。
resp-benchmark在未指定連接數(shù)時(shí)會(huì)自動(dòng)選擇相對(duì)合適的連接數(shù),為測(cè)得極限負(fù)載下的數(shù)據(jù)建議手動(dòng)調(diào)整連接數(shù),比如設(shè)置為128,可以通過(guò)增加參數(shù)
-c 128
實(shí)現(xiàn)。連接數(shù)過(guò)低時(shí),測(cè)試壓力不足,導(dǎo)致QPS數(shù)據(jù)偏低;連接數(shù)過(guò)高時(shí),測(cè)試壓力可能會(huì)超過(guò)DB的處理能力,數(shù)據(jù)包會(huì)在網(wǎng)絡(luò)鏈路中排隊(duì)較長(zhǎng)時(shí)間,導(dǎo)致延遲數(shù)據(jù)偏高。因?yàn)橛绊懸蛩剌^多,難以在下文中給出固定的連接數(shù)配置,常見(jiàn)的連接數(shù)設(shè)置為32、64、128、192和256,可根據(jù)實(shí)際測(cè)試情況自行調(diào)整。
以下為各命令的測(cè)試實(shí)例:
SET
該指標(biāo)代表SET命令的性能。
測(cè)試SET命令,Key范圍為0-10000000(表示生成的Key名稱為
key_0000000000
~key_0009999999
),Value大小為64字節(jié),測(cè)試時(shí)長(zhǎng)20秒:resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SET {key uniform 10000000} {value 64}"
GET
該指標(biāo)代表GET命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-10000000,Value大小為64字節(jié):
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "SET {key sequence 10000000} {value 64}"
測(cè)試GET命令,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "GET {key uniform 10000000}"
ZADD
該指標(biāo)代表ZADD命令的性能。
測(cè)試ZADD的寫(xiě)性能,Key范圍為0-1000,Score范圍為0-70000,每個(gè)Key最多10000個(gè)Field,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"
ZSCORE
該指標(biāo)代表ZSCORE命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,Score范圍為0-70000,每個(gè)Key最多10007個(gè)Field:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "ZADD {key sequence 1000} {rand 70000} {key sequence 10007}"
測(cè)試ZSCORE命令,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZSCORE {key uniform 1000} {key uniform 10007}"
HSET
該指標(biāo)代表HSET命令的性能。
測(cè)試HSET命令,Key范圍為0-1000,F(xiàn)ield范圍為0-10000,Value大小為64字節(jié),測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HSET {key uniform 1000} {key uniform 10000} {value 64}"
HGET
該指標(biāo)代表HGET命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個(gè)Key包含10007個(gè)Field,數(shù)據(jù)大小為64字節(jié):
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "HSET {key sequence 1000} {key sequence 10007} {value 64}"
測(cè)試HGET命令,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HGET {key uniform 1000} {key uniform 10007}"
LPUSH
該指標(biāo)代表LPUSH命令的性能。
測(cè)試LPUSH命令,Key范圍為0-1000,Value大小為64字節(jié),測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LPUSH {key uniform 1000} {value 64}"
LINDEX
該指標(biāo)代表LINDEX命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個(gè)Key包含10000條數(shù)據(jù),數(shù)據(jù)大小為64字節(jié):
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "LPUSH {key sequence 1000} {value 64}"
測(cè)試LINDEX命令,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LINDEX {key uniform 1000} {rand 10000}"
SADD
該指標(biāo)代表SADD命令的性能。
測(cè)試SADD命令,Key范圍為0-1000,Value大小為64字節(jié),測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SADD {key uniform 1000} {value 64}"
SISMEMBER
該指標(biāo)代表SISMEMBER命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個(gè)Key包含10007條數(shù)據(jù),數(shù)據(jù)大小為64字節(jié):
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "SADD {key sequence 1000} {key sequence 10007}"
測(cè)試SISMEMBER命令,測(cè)試時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SISMEMBER {key uniform 1000} {key uniform 10007}"
EVALSHA
該指標(biāo)代表在EVALSHA中執(zhí)行SET命令的性能,其中SET命令的Key范圍為0-10000000,Value大小為64字節(jié)。
載入Lua腳本:
redis-cli -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"
測(cè)試命令時(shí)長(zhǎng)20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000} {value 64}"