本文介紹Tair(企業版)磁碟(SSD)型效能測試的測試環境、測試載入器、測試方法與測試結果。
測試環境
測試環境資訊 | 說明 |
地區和可用性區域域 | 所有測試均在華東1(杭州)地區的可用性區域J中完成。 |
Redis執行個體架構 | 標準版(雙副本)架構,詳情請參見標準架構。 |
部署壓測工具的機器 | Elastic Compute Service執行個體,規格為ecs.c9i.8xlarge,規格詳情請參見執行個體規格類型系列。 |
磁碟(SSD)型執行個體規格 |
|
測試主要針對下述兩種情境進行:
記憶體大於資料情境:絕大部分資料可以在記憶體中訪問到,此情境下記憶體與資料的比例約為7:1。
資料大於記憶體情境:只有部分資料緩衝在記憶體,部分訪問請求需要讀取硬碟中的資料,根據負載不同,需要訪問磁碟的比例也不一樣,此情境下記憶體與資料的比例約為1:4。
測試載入器
採用開源社區的YCSB壓測工具進行壓測。YCSB是一款Java編寫的支援多種資料庫的效能測試工具,具體安裝和使用方法請參見YCSB。
本測試中,對YCSB的相關內容做了一定的修改,使其支援匯入long類型的recordcount參數、支援測試Redis的String相關命令,修改後的完整原始碼請參見YCSB源碼。
測試命令
下述指令碼以資料大於記憶體情境為例。
#! /bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=640000000
fieldcount=1
fieldlength=100
threads=64
load_sleep_time=600
run_sleep_time=60
echo "##################################### $command_group ############################################"
#Load
./bin/ycsb load redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${recordcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads}
sleep ${load_sleep_time}
#Uniform-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}
#Zipfian-Read
./bin/ycsb run redis -s -P workloads/workloadc -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}
#Uniform-50%Read-50%Update
./bin/ycsb run redis -s -P workloads/workloada -p "redis.host=${ip}" -p "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}表 1. 參數說明
參數 | 說明 |
ip | Tair執行個體的IP地址。 |
port | Tair執行個體的服務連接埠。 |
timeout | 測試命令的逾時時間,單位為ms。 |
command_group | 測試類型,配置為String。 |
recordcount | 資料載入階段準備的資料量。 |
run_operationcount | Run階段操作的資料量。本測試中:
|
fieldcount | 欄位個數,配置為1。 |
fieldlength | 值長度,配置為100。 |
threads | YCSB線程數,根據執行個體規格配置。 |
測試結果
測試單位 | 說明 |
QPS | 每秒處理的讀寫運算元,單位為次/秒。 |
Average Latency | 讀或寫操作的平均延遲,單位為微秒(us)。 |
99th Percentile Latency | 處理速度最快的99%的操作中,最長的延遲時間,單位為微秒。例如該指標的值為500微秒,表示99%的請求可以在500微秒內被處理。 |
記憶體大於資料情境
執行個體規格 | YCSB配置 | 工作負載 | QPS(次/秒) | Average Latency(微秒) | 99th Percentile Latency(微秒) |
tair.localssd.c1m8.xlarge | recordcount=20000000 run_operationcount=20000000 threads=64 fieldlength=100 | Load | 42275 | 1511 | 4987 |
Uniform-Read | 104303 | 611 | 2163 | ||
Zipfian-Read | 105217 | 605 | 2259 | ||
Uniform-50%Read-50%Update | 52267 | READ:1114 | READ:4191 | ||
UPDATE:1329 | UPDATE:4827 | ||||
tair.localssd.c1m8.2xlarge | recordcount=40000000 run_operationcount=40000000 threads=128 fieldlength=100 | Load | 64104 | 1993 | 5951 |
Uniform-Read | 174533 | 730 | 2049 | ||
Zipfian-Read | 177612 | 718 | 2033 | ||
Uniform-50%Read-50%Update | 75762 | READ:1509 | READ:4667 | ||
UPDATE:1864 | UPDATE:5479 | ||||
tair.localssd.c1m8.with.proxy.xlarge(3分區) | recordcount=60000000 run_operationcount=60000000 threads=192 fieldlength=100 | Load | 116107 | 1647 | 9983 |
Uniform-Read | 225613 | 847 | 3687 | ||
Zipfian-Read | 234014 | 816 | 3279 | ||
Uniform-50%Read-50%Update | 138884 | READ:1321 | READ:8131 | ||
UPDATE:1435 | UPDATE:8479 | ||||
tair.localssd.c1m8.with.proxy.2xlarge(3分區) | recordcount=120000000 run_operationcount=120000000 threads=384 fieldlength=100 | Load | 170447 | 2246 | 11935 |
Uniform-Read | 323136 | 1184 | 4005 | ||
Zipfian-Read | 330023 | 1159 | 3951 | ||
Uniform-50%Read-50%Update | 207350 | READ:1759 | READ:9031 | ||
UPDATE:1934 | UPDATE:9439 |

資料大於記憶體情境
執行個體規格 | YCSB配置 | 工作負載 | QPS(次/秒) | Average Latency(微秒) | 99th Percentile Latency(微秒) |
tair.localssd.c1m8.xlarge | recordcount=640000000 run_operationcount=640000000 threads=64 fieldlength=100 | Load | 33198 | 1925 | 7699 |
Uniform-Read | 48243 | 1324 | 3659 | ||
Zipfian-Read | 66635 | 958 | 3003 | ||
Uniform-50%Read-50%Update | 28779 | READ:2169 | READ:7531 | ||
UPDATE:2272 | UPDATE:7851 | ||||
tair.localssd.c1m8.2xlarge | recordcount=1280000000 run_operationcount=1280000000 threads=128 fieldlength=100 | Load | 48605 | 2631 | 8463 |
Uniform-Read | 83687 | 1527 | 3889 | ||
Zipfian-Read | 113742 | 1123 | 3351 | ||
Uniform-50%Read-50%Update | 46606 | READ:2652 | READ:8815 | ||
UPDATE:2835 | UPDATE:9367 | ||||
tair.localssd.c1m8.with.proxy.xlarge(3分區) | recordcount=1920000000 run_operationcount=1920000000 threads=192 fieldlength=100 | Load | 89421 | 2144 | 15351 |
Uniform-Read | 115967 | 1653 | 9311 | ||
Zipfian-Read | 155686 | 1231 | 6359 | ||
Uniform-50%Read-50%Update | 72890 | READ:2585 | READ:16479 | ||
UPDATE:2676 | UPDATE:16719 | ||||
tair.localssd.c1m8.with.proxy.2xlarge(3分區) | recordcount=3840000000 run_operationcount=3840000000 threads=384 fieldlength=100 | Load | 137521 | 2789 | 16591 |
Uniform-Read | 185273 | 2070 | 8575 | ||
Zipfian-Read | 238099 | 1610 | 6203 | ||
Uniform-50%Read-50%Update | 128080 | READ:2930 | READ:15535 | ||
UPDATE:3060 | UPDATE:15807 |
