このトピックでは、Tair (Enterprise Edition) SSDベースのインスタンスでのパフォーマンステストのテスト環境、テストツール、テスト方法、およびテスト結果について説明します。
テスト環境
項目 | 説明 |
リージョンとゾーン | すべてのテストは杭州ゾーンIで実行されます。 |
インスタンスアーキテクチャ | 標準のマスター-レプリカアーキテクチャが使用されます。 詳細については、「標準アーキテクチャ」をご参照ください。 |
ストレステストツールがデプロイされている仮想マシン | ECS. g6e.13xlargeインスタンスタイプのElastic Compute Service (ecs) インスタンスが使用されます。 詳細については、「インスタンスファミリーの概要」をご参照ください。 |
SSDベースのインスタンスタイプ |
|
パフォーマンステストは、次のシナリオでSSDベースのインスタンスのパフォーマンスを評価することに焦点を当てています。
メモリサイズがデータ量よりも大きいシナリオ: ほとんどのデータはメモリからアクセスできます。 これらのシナリオでは、メモリサイズとデータ量の比率は約7:1です。
データ量がメモリサイズよりも大きいシナリオ: データの一部のみがメモリにキャッシュされます。 ほとんどのアクセス要求は、ディスクに対する読み取りおよび書き込み操作を必要とする。 これらのシナリオでは、メモリサイズとデータ量の比率は約1:4です。
テストツール
オープンソースYCSBを使用してストレステストを実行できます。 YCSBは、複数の種類のデータベースのパフォーマンスをベンチマークするために使用できるJavaツールです。 YCSBのインストール方法と使用方法の詳細については、「YCSB」をご参照ください。
テストでは、YCSBソースコードが変更され、recordcountパラメーターをLONG型の値に設定し、Redisの文字列関連コマンドをテストできるようになります。 変更したソースコードを取得するには、YCSBソースコードパッケージをダウンロードします。
テストコマンド
次のスクリプトは、データ量がメモリサイズよりも大きいシナリオでのパフォーマンスをテストするために使用されます。
#! /bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=20000000
fieldcount=1
fieldlength=100
threads=32
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. Parameters
パラメーター | 説明 |
ip | TairインスタンスのIPアドレス。 |
port | Tairインスタンスのサービスポート。 |
timeout | testコマンドのタイムアウト時間。 単位:ms。 |
command_group | テストするデータのタイプ。 このパラメーターをStringに設定します。 |
recordcount | データロードフェーズ中に準備されたデータの量。 |
run_operationcount | 操作に含まれるデータの量。 このパラメーターを設定するときは、次のルールに注意してください。
|
フィールドカウント | フィールドの数。 このパラメーターを1に設定します。 |
フィールド长さ | 各フィールドの長さ。 このパラメーターを100に設定します。 |
スレッド | YCSBスレッドの数。 インスタンスタイプに基づいてこのパラメーターを設定します。 |
テスト結果
テストメトリック | 説明 |
QPS | 1秒あたりに処理される読み取りおよび書き込み操作の数。 |
平均レイテンシ | 読み取りまたは書き込み操作の平均レイテンシ。 単位: µ s。 |
99パーセンタイル遅延 | 操作の最速99% のための最も高いレイテンシ。 単位: µ s。 たとえば、このパラメーターが500 µ sに設定されている場合、99% の操作は500 µ s以内に処理されます。 |
メモリサイズがデータボリュームよりも大きいシナリオ
インスタンスタイプ | YCSB設定 | ワークロード | QPS | 平均レイテンシ (µ s) | 99パーセンタイル遅延 (µ s) |
tair.localssd.c1m4.2xlarge | recordcount=40000000 run_operationcount=40000000 スレッド=64 | ロード | 59830 | 1066 | 2761 |
ユニフォーム-読み取り | 158221 | 389 | 891 | ||
Zipfian-読む | 164233 | 379 | 873 | ||
Uniform-50% Read-50% アップデート | 78099 | 読む: 651 | 読む: 2012 | ||
更新: 974 | 更新: 2731 | ||||
tair.localssd.c1m4.4xlarge | recordcount=80000000 run_operationcount=80000000 スレッド=128 | ロード | 91991 | 1388 | 3077 |
ユニフォーム-読み取り | 302940 | 414 | 921 | ||
Zipfian-読む | 305639 | 410 | 899 | ||
Uniform-50% Read-50% アップデート | 124929 | 読む: 798 | 読む: 2231 | ||
更新: 1234 | 更新: 3013 | ||||
tair.localssd.c1m4.8xlarge | recordcount=160000000 run_operationcount=160000000 スレッド=256 | ロード | 132865 | 1924 | 3323 |
ユニフォーム-読み取り | 489287 | 513 | 1313 | ||
Zipfian-読む | 501847 | 499 | 1272 | ||
Uniform-50% Read-50% アップデート | 187390 | 読む: 1069 | 読む: 2749 | ||
更新: 1644 | 更新: 3613 |
データ量がメモリサイズよりも大きいシナリオ
インスタンスタイプ | YCSB設定 | ワークロード | QPS | 平均レイテンシ (µ s) | 99パーセンタイル遅延 (µ s) |
tair.localssd.c1m4.2xlarge | recordcount=1280000000 run_operationcount=1280000000 スレッド=64 | ロード | 50396 | 1258 | 4463 |
ユニフォーム-読み取り | 74611 | 842 | 1745 | ||
Zipfian-読む | 106366 | 588 | 1406 | ||
Uniform-50% Read-50% アップデート | 47833 | 読む: 1232 | 読む: 4049 | ||
書き込み: 1402 | 書き込み: 4583 | ||||
tair.localssd.c1m4.4xlarge | recordcount=2560000000 run_operationcount=2560000000 スレッド=128 | ロード | 81097 | 1573 | 4119 |
ユニフォーム-読み取り | 118141 | 1071 | 3085 | ||
Zipfian-読む | 194704 | 634 | 1595 | ||
Uniform-50% Read-50% アップデート | 75625 | 読む: 1562 | 読む: 4999 | ||
更新: 1795 | 更新: 5419 | ||||
tair.localssd.c1m4.8xlarge | recordcount=5120000000 run_operationcount=5120000000 スレッド=256 | ロード | 115660 | 2210 | 5235 |
ユニフォーム-読み取り | 202365 | 1252 | 3985 | ||
Zipfian-読む | 309019 | 804 | 2551 | ||
Uniform-50% Read-50% アップデート | 122318 | 読む: 1861 | 読む: 5603 | ||
更新: 2307 | 更新: 6415 |