本文介紹Tair(企業版)持久內存型性能測試的測試環境、測試工具、測試方法與測試結果。
產品概述
Tair持久內存型,基于持久內存技術,為您提供大容量、兼容Redis的內存數據庫產品。單實例成本對比Redis開源版最高可降低30%,且數據持久化不依賴傳統磁盤,保證每個操作持久化的同時提供近乎Redis開源版的吞吐和延時,極大提升業務數據可靠性。更多信息請參見持久內存型。
測試環境
測試環境信息 | 說明 |
地域和可用區 | 所有測試均在華北3(張家口)地域的可用區A中完成。 |
實例架構 | 標準版(雙副本)架構,詳情請參見標準架構。 |
部署壓測工具的機器 | |
持久內存型實例規格 | 本次測試以tair.scm.standard.32m.128d規格為例。 |
測試工具
采用開源社區的YCSB壓測工具進行壓測。YCSB是一款Java編寫的支持多種數據庫的性能測試工具,具體安裝和使用方法請參見YCSB。
由于開源版本僅支持測試Hash結構的數據,下載YCSB工具后,需要將YCSB/redis/src/main/java/site/ycsb/db/RedisClient.java文件替換為RedisClient.java文件,用于測試String結構的數據。
工作負載
測試的總數據量8 GB,數據分布方法為zipfian,具體測試場景如下:
Load:100%的寫操作。
Workload C:100%的讀操作。
Workload A:50%的更新操作與50%的讀操作。
關于Workload的詳細介紹,請參見Core Workloads。
由于應用場景不同,Set、Zset中的復雜命令無法進行通用測試,您可以根據您的業務場景自行測試。
測試命令
#加載數據
workload=a
./bin/ycsb load redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=***:*****"
#運行Workload C
workload=c
./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=***:*****"
#運行Workload A
workload=a
./bin/ycsb run redis -s -P workloads/workload${workload} -p "redis.host=${server_ip}" -p "redis.port=${port}" -p "redis.password=${password}" -p "recordcount=${recordcount}" -p "operationcount=${operationcount}" -p "redis.timeout=30000" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads} -p "redis.password=***:*****"
表 1. 參數說明
參數 | 說明 |
server_ip | 實例的IP地址。 |
port | 實例的服務端口。 |
password | 根據選取賬號的不同,密碼的填寫格式有一定區別:
說明 如果忘記密碼,請參見修改或重置密碼。 |
recordcount | 數據裝載階段準備的數據量。 |
operationcount | 執行操作的數據量。 |
command_group | 測試的數據結構,本案例中,依次測試下述數據結構:
|
fieldcount | 字段或元素個數,本案例中,String數據結構配置為1,其他數據結構配置為10。 |
fieldlength | 值長度,根據測試需求配置。 |
threads | YCSB線程數,根據實例規格配置。 |
測試結果
測試指標 | 說明 |
QPS | 每秒處理的讀寫操作數,單位為次/秒。 |
INSERT Average Latency | 寫操作平均延遲,單位為微秒(us)。 |
INSERT 99th Percentile Latency | 處理速度最快的99%寫操作中,最長的延遲時間,單位為微秒。例如該指標的值為500微秒,表示99%的請求可以在500微秒內被處理。 |
READ AverageLatency | 讀操作平均延遲,單位為微秒。 |
READ 99thPercentileLatency | 處理速度最快的99%讀操作中,最長的延遲時間,單位為微秒。 |
UPDATE AverageLatency | 更新操作平均延遲,單位為微秒。 |
UPDATE 99thPercentileLatency | 處理速度最快的99%更新操作中,最長延遲時間,單位為微秒。 |
Load場景測試結果
表 2. String數據結構
Value長度(字節) | QPS(次/秒) | INSERT Average Latency(微秒) | INSERT 99th Percentile Latency(微秒) |
128字節 | 134,478 | 473 | 687 |
256字節 | 126,139 | 504 | 828 |
1024字節 | 99,775 | 638 | 1,051 |
2048字節 | 77,130 | 826 | 1,157 |
4096字節 | 60,646 | 1,050 | 1,534 |
表 3. Hash數據結構
Key中的Field數量 | Value長度(字節) | QPS(次/秒) | INSERT Average Latency(微秒) | INSERT 99th Percentile Latency(微秒) |
10 | 128 | 47,353 | 1,348 | 1,885 |
256 | 46,716 | 1,366 | 2,181 | |
1,024 | 27,759 | 2,297 | 2,873 | |
2,048 | 16,605 | 3,833 | 4,923 |
表 4. List數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | INSERT Average Latency(微秒) | INSERT 99th Percentile Latency(微秒) |
10 | 128 | 64,950 | 979 | 1,310 |
256 | 47,157 | 1,348 | 1,752 | |
1,024 | 26,719 | 2,386 | 3,457 | |
2,048 | 16,714 | 3,811 | 4,751 | |
4,096 | 10,129 | 6,279 | 7,891 |
表 5. Set數據結構
Key中的Member數量 | Value長度(字節) | QPS(次/秒) | INSERT Average Latency(微秒) | INSERT 99th Percentile Latency(微秒) |
10 | 128 | 63,670 | 1,001 | 1,514 |
256 | 44,707 | 1,427 | 2,129 | |
1,024 | 25,375 | 2,513 | 3,239 | |
2,048 | 14,318 | 4,451 | 5,619 | |
4,096 | 8,378 | 7,608 | 9,095 |
表 6. Sorted Set數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | INSERT Average Latency(微秒) | INSERT 99th Percentile Latency(微秒) |
10 | 128 | 40,292 | 1,585 | 2,469 |
256 | 34,168 | 1,869 | 2,569 | |
1,024 | 21,347 | 2,989 | 3,905 | |
2,048 | 12,868 | 4,956 | 6,255 | |
4,096 | 7,864 | 8,101 | 9,599 |
Workload C場景測試結果
表 7. String數據結構
Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) |
128字節 | 170,699 | 362 | 546 |
256字節 | 163,829 | 380 | 565 |
1024字節 | 161,491 | 386 | 569 |
2048字節 | 130,189 | 487 | 729 |
4096字節 | 115,433 | 548 | 808 |
表 8. Hash數據結構
Key中的Field數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) |
10 | 128 | 96,111 | 662 | 874 |
256 | 86,892 | 733 | 915 | |
1,024 | 61,608 | 1,030 | 1,293 | |
2,048 | 37,334 | 1,696 | 2,331 | |
4,096 | 25,943 | 2,429 | 3,319 |
表 9. List數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) |
10 | 128 | 105,296 | 604 | 889 |
256 | 97,047 | 655 | 890 | |
1,024 | 66,384 | 955 | 1,192 | |
2,048 | 35,796 | 1,769 | 2,461 | |
4,096 | 26,314 | 2,392 | 3,271 |
表 10. Set數據結構
Key中的Member數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) |
10 | 128 | 97,825 | 651 | 896 |
256 | 80,954 | 787 | 970 | |
1024 | 59,924 | 1060 | 1313 | |
2048 | 33,356 | 1900 | 2637 | |
4096 | 23,605 | 2677 | 3723 |
表 11. Sorted Set數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) |
10 | 128 | 58,380 | 1,093 | 1,341 |
256 | 56,287 | 1,133 | 1,390 | |
1,024 | 47,468 | 1,338 | 1,688 | |
2,048 | 30,073 | 2,096 | 2,783 | |
4,096 | 21,850 | 2,880 | 3,765 |
Workload A場景測試結果
表 12. String數據結構
Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) | UPDATE AverageLatency(微秒) | UPDATE 99thPercentileLatency(微秒) |
128 | 141,120 | 451 | 616 | 450 | 618 |
256 | 137,551 | 463 | 617 | 461 | 618 |
1,024 | 124,165 | 516 | 724 | 508 | 725 |
2,048 | 92,652 | 695 | 881 | 678 | 871 |
4,096 | 78,994 | 819 | 1,042 | 791 | 1,024 |
表 13. Hash數據結構
Key中的Field數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) | UPDATE AverageLatency(微秒) | UPDATE 99thPercentileLatency(微秒) |
10 | 128 | 99,495 | 646 | 831 | 633 | 820 |
256 | 88,235 | 731 | 985 | 712 | 966 | |
1,024 | 72,013 | 892 | 1,159 | 863 | 2,049 | |
2,048 | 45,790 | 1,379 | 1,898 | 1,354 | 2,821 | |
4,096 | 32,912 | 1,891 | 2,931 | 1,915 | 7,887 |
表 14. List數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) | UPDATE AverageLatency(微秒) | UPDATE 99thPercentileLatency(微秒) |
10 | 128 | 71,696 | 591 | 775 | 1,185 | 1,383 |
256 | 66,294 | 638 | 800 | 1,281 | 1,456 | |
1,024 | 53,402 | 791 | 1,006 | 1,581 | 1,865 | |
2,048 | 36,519 | 1,221 | 1,581 | 2,232 | 2,831 | |
4,096 | 28,390 | 1,618 | 2,113 | 2,803 | 3,777 |
表 15. Set數據結構
Key中的Member數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) | UPDATE AverageLatency(微秒) | UPDATE 99thPercentileLatency(微秒) |
10 | 128 | 66,346 | 640 | 792 | 1,282 | 1,445 |
256 | 60,010 | 707 | 993 | 1,415 | 1,957 | |
1,024 | 45,359 | 933 | 1,128 | 1,858 | 2,073 | |
2,048 | 29,027 | 1,529 | 2,021 | 2,820 | 4,507 | |
4,096 | 21,440 | 2,144 | 2,773 | 3,726 | 5,095 |
表 16. Sorted Set數據結構
Key中的Element數量 | Value長度(字節) | QPS(次/秒) | READ AverageLatency(微秒) | READ 99thPercentileLatency(微秒) | UPDATE AverageLatency(微秒) | UPDATE 99thPercentileLatency(微秒) |
10 | 128 | 49,695 | 861 | 1,050 | 1,707 | 1,912 |
256 | 48,036 | 891 | 1,084 | 1,763 | 1,970 | |
1,024 | 39,795 | 1,081 | 1,386 | 2,107 | 2,563 | |
2,048 | 28,415 | 1,597 | 1,981 | 2,855 | 3,589 | |
4,096 | 21,317 | 2,247 | 2,821 | 3,665 | 4,787 |