Redis開源版、Redis倚天版、Tair內(nèi)存型性能白皮書
本文介紹Tair內(nèi)存型、Redis開源版、Redis倚天版的性能測試結(jié)果,以及測試環(huán)境、測試工具與測試方法。
測試結(jié)果
對包括SET、GET等在內(nèi)的十余種Redis基礎(chǔ)命令進行性能測試并給出測試指標。
命令 | Tair內(nèi)存型 | Redis開源版 | 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 |
測試指標說明:
QPS:每秒處理的讀寫操作數(shù),單位為次/秒。
Average Latency:操作的平均延遲時間,單位為毫秒(ms)。
99th Percentile Latency:99%操作延遲,指99%操作的最大延遲時間,單位為毫秒(ms)。例如該指標的值為0.5毫秒,表示99%的請求可以在0.5毫秒內(nèi)被處理。
測試結(jié)果為在多個可用區(qū)、對多個實例、進行多次測試的平均值。
測試結(jié)果中的延遲為全鏈路延遲,包含數(shù)據(jù)包在DB側(cè)及壓測端排隊的時延。
測試結(jié)果受到多種不可控因素的影響,存在約10%的誤差屬于合理范圍。
測試結(jié)果僅代表新購實例進行單一命令測試的結(jié)果,而生產(chǎn)環(huán)境實例的壓力測試請以業(yè)務(wù)壓測場景為準。
測試結(jié)果反映了實例的極限性能,在生產(chǎn)環(huán)境中,不建議將實例維持在極限負載狀態(tài)。
測試環(huán)境
數(shù)據(jù)庫
測試環(huán)境信息 | 說明 |
地域和可用區(qū) | 華北2(北京)可用區(qū)L、華東1(杭州)可用區(qū)K、華東2(上海)可用區(qū)N、華南1(深圳)可用區(qū)C。 說明 本測試在多個地域進行,本測試報告僅代表上述可用區(qū)的平均性能水平。 |
實例架構(gòu) | 標準架構(gòu)(雙副本),不啟用集群,詳情請參見標準架構(gòu)。 說明 其他架構(gòu)的性能說明:
n為集群架構(gòu)的分片節(jié)點數(shù)或讀寫分離架構(gòu)的總節(jié)點數(shù)。 |
實例規(guī)格 | 由于測試結(jié)果受規(guī)格影響較小,本次測試以下實例規(guī)格:
規(guī)格詳情請參見規(guī)格查詢導(dǎo)航。 |
測試客戶端
測試環(huán)境信息 | 說明 |
部署壓測工具的設(shè)備 | 云服務(wù)器ECS實例,規(guī)格為ecs.g7.8xlarge,詳情請參見實例規(guī)格族。 |
地域和可用區(qū) | 與實例對應(yīng)的地域及可用區(qū)。 |
操作系統(tǒng) | Alibaba Cloud Linux 3。 |
網(wǎng)絡(luò) | 與Tair實例為相同專有網(wǎng)絡(luò)(VPC),且與Tair實例通過專有網(wǎng)絡(luò)連接。 |
測試工具
使用resp-benchmark開源工具進行壓測。SET、GET等常規(guī)測試項與redis-benchmark保持一致,在其余測試項中可以更有效地模擬用戶真實場景,壓滿Tair多個線程,從而體現(xiàn)Tair的實際性能。
您可以執(zhí)行resp-benchmark --help
命令獲取更詳細的配置項說明,或訪問其GitHub主頁。
安裝方法
pip install resp-benchmark==0.1.7
測試示例
每次測試時建議先清空數(shù)據(jù)庫,避免已有數(shù)據(jù)存在干擾。
resp-benchmark在未指定連接數(shù)時會自動選擇相對合適的連接數(shù),為測得極限負載下的數(shù)據(jù)建議手動調(diào)整連接數(shù),比如設(shè)置為128,可以通過增加參數(shù)
-c 128
實現(xiàn)。連接數(shù)過低時,測試壓力不足,導(dǎo)致QPS數(shù)據(jù)偏低;連接數(shù)過高時,測試壓力可能會超過DB的處理能力,數(shù)據(jù)包會在網(wǎng)絡(luò)鏈路中排隊較長時間,導(dǎo)致延遲數(shù)據(jù)偏高。因為影響因素較多,難以在下文中給出固定的連接數(shù)配置,常見的連接數(shù)設(shè)置為32、64、128、192和256,可根據(jù)實際測試情況自行調(diào)整。
以下為各命令的測試實例:
SET
該指標代表SET命令的性能。
測試SET命令,Key范圍為0-10000000(表示生成的Key名稱為
key_0000000000
~key_0009999999
),Value大小為64字節(jié),測試時長20秒:resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SET {key uniform 10000000} {value 64}"
GET
該指標代表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}"
測試GET命令,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "GET {key uniform 10000000}"
ZADD
該指標代表ZADD命令的性能。
測試ZADD的寫性能,Key范圍為0-1000,Score范圍為0-70000,每個Key最多10000個Field,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"
ZSCORE
該指標代表ZSCORE命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,Score范圍為0-70000,每個Key最多10007個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}"
測試ZSCORE命令,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZSCORE {key uniform 1000} {key uniform 10007}"
HSET
該指標代表HSET命令的性能。
測試HSET命令,Key范圍為0-1000,F(xiàn)ield范圍為0-10000,Value大小為64字節(jié),測試時長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
該指標代表HGET命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個Key包含10007個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}"
測試HGET命令,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HGET {key uniform 1000} {key uniform 10007}"
LPUSH
該指標代表LPUSH命令的性能。
測試LPUSH命令,Key范圍為0-1000,Value大小為64字節(jié),測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LPUSH {key uniform 1000} {value 64}"
LINDEX
該指標代表LINDEX命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個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}"
測試LINDEX命令,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LINDEX {key uniform 1000} {rand 10000}"
SADD
該指標代表SADD命令的性能。
測試SADD命令,Key范圍為0-1000,Value大小為64字節(jié),測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SADD {key uniform 1000} {value 64}"
SISMEMBER
該指標代表SISMEMBER命令的性能。
構(gòu)造數(shù)據(jù),Key范圍為0-1000,每個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}"
測試SISMEMBER命令,測試時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SISMEMBER {key uniform 1000} {key uniform 10007}"
EVALSHA
該指標代表在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])"
測試命令時長20秒:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000} {value 64}"