このトピックでは、ApsaraDB for Redis Enhanced Edition (Tair) ESSDベースのインスタンスでのパフォーマンステストのテスト環境、テストツール、テスト方法、およびテスト結果について説明します。
テスト環境
項目 | 説明 |
リージョンとゾーン | すべてのテストは杭州ゾーンIで実行されます。 |
インスタンスアーキテクチャ | 標準のマスター-レプリカアーキテクチャが使用されます。 詳細については、「標準アーキテクチャ」をご参照ください。 |
ストレステストツールがデプロイされている仮想マシン | ECS. g6e.13xlargeインスタンスタイプのElastic Compute Service (ecs) インスタンスが使用されます。 詳細については、「インスタンスファミリーの概要」をご参照ください。 |
ESSDベースのインスタンスタイプ |
インスタンスタイプの詳細については、「ESSD/SSDベースのインスタンス」をご参照ください。 |
パフォーマンステストは、次のシナリオでESSDベースのインスタンスのパフォーマンスを評価することに焦点を当てています。
メモリサイズがデータ量よりも大きいシナリオ: ほとんどのデータはメモリからアクセスできます。 これらのシナリオでは、メモリサイズとデータ量の比率は約7:1です。
データ量がメモリサイズよりも大きいシナリオ: データの一部のみがメモリにキャッシュされます。 ほとんどのアクセス要求は、ディスクに対する読み取りおよび書き込み操作を必要とする。 これらのシナリオでは、メモリサイズとデータ量の比率は約1:4です。
テストツール
オープンソースYCSBを使用してストレステストを実行できます。 YCSBは、複数の種類のデータベースのパフォーマンスをベンチマークするために使用できるJavaツールです。 YCSBのインストール方法と使用方法の詳細については、「YCSB」をご参照ください。
テストでは、YCSBソースコードが変更され、recordcountパラメーターをLONG型の値に設定し、Redisの文字列関連コマンドをテストできるようになります。 変更したソースコードを取得するには、YCSBソースコードパッケージをダウンロードします。
ワークロード
データロード: 文字列に対して100% のSET操作 (書き込み操作) を実行します。
Uniform-Read: ランダムな文字列に対する100% のGET操作 (読み取り操作) で構成されるワークロードAを使用します。 このワークロードは、過酷な条件下での読み取りパフォーマンスのテストを目的としています。
Zipfian-Read: Zipfianディストリビューションに従うワークロードCを使用して、データのごく一部にアクセスするためにほとんどの読み取り要求が送信されるシナリオで読み取りパフォーマンスをテストします。 ほとんどの読み取りシナリオはこれらのシナリオに属します。
Uniform-50% Read-50% Update: 文字列に対する50% のSET操作 (更新操作) と文字列に対する50% のGET操作で構成されるワークロードAを使用します。 このワークロードは、ランダム更新のパフォーマンスをテストすることを目的としています。
ワークロードの詳細については、「コアワークロード」をご参照ください。
テストコマンド
次のスクリプトは、データ量がメモリサイズよりも大きいシナリオでのパフォーマンスをテストするために使用されます。
#! /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.essd.standard.xlarge | recordcount=20000000 run_operationcount=20000000 スレッド=32 | ロード | 36,740 | 851 | 1,595 |
ユニフォーム-読み取り | 103,890 | 294 | 907 | ||
Zipfian-読む | 106,357 | 288 | 865 | ||
Uniform-50% Read-50% アップデート | 46,610 | 読む: 530 | 読む: 1,108 | ||
更新: 795 | 更新: 1,684 | ||||
tair.essd.standard.2xlarge | recordcount=40000000 run_operationcount=40000000 スレッド=50 | ロード | 54,670 | 911 | 1,528 |
ユニフォーム-読み取り | 150,796 | 314 | 995 | ||
Zipfian-読む | 151,110 | 314 | 977 | ||
Uniform-50% Read-50% アップデート | 69,137 | 読む: 537 | 読む: 948 | ||
更新: 878 | 更新: 1,479 | ||||
air.essd.standard.4xlarge | recordcount=80000000 run_operationcount=80000000 スレッド=100 | ロード | 90,703 | 1,099 | 1,697 |
ユニフォーム-読み取り | 285,833 | 339 | 1,196 | ||
Zipfian-読む | 288,750 | 335 | 1,162 | ||
Uniform-50% Read-50% アップデート | 110,316 | 読む: 757 | 読む: 1,114 | ||
更新: 1,041 | 更新: 1,536 | ||||
tair.essd.standard.8xlarge | recordcount=160000000 run_operationcount=160000000 スレッド=120 | ロード | 117,581 | 1,011 | 1,692 |
ユニフォーム-読み取り | 477,099 | 242 | 784 | ||
Zipfian-読む | 494,550 | 234 | 727 | ||
Uniform-50% Read-50% アップデート | 196,245 | 読む: 519 | 読む: 829 | ||
更新: 691 | 更新: 1,096 | ||||
tair.essd.standard.13xlarge | recordcount=240000000 run_operationcount=240000000 スレッド=160 | ロード | 126,366 | 1,249 | 2,281 |
ユニフォーム-読み取り | 673,183 | 231 | 637 | ||
Zipfian-読む | 691,383 | 230 | 652 | ||
Uniform-50% Read-50% アップデート | 197,803 | 読む: 678 | 読む: 940 | ||
更新: 935 | 更新: 1,925 |
データ量がメモリサイズよりも大きいシナリオ
インスタンスタイプ | YCSB設定 | ワークロード | QPS | 平均レイテンシ (µ s) | 99パーセンタイル遅延 (µ s) |
tair.essd.standard.xlarge | recordcount=640000000 run_operationcount=20000000 スレッド=32 | ロード | 25,561 | 1,245 | 3,497 |
ユニフォーム-読み取り | 25,727 | 1,239 | 2,042 | ||
Zipfian-読む | 47,559 | 667 | 1,217 | ||
Uniform-50% Read-50% アップデート | 19,731 | 読む: 1,576 | 読む: 6,383 | ||
更新: 1,639 | 更新: 6,487 | ||||
tair.essd.standard.2xlarge | recordcount=1280000000 run_operationcount=40000000 スレッド=50 | ロード | 42,287 | 1,179 | 3,465 |
ユニフォーム-読み取り | 35,794 | 1,394 | 1,880 | ||
Zipfian-読む | 77,759 | 637 | 1,219 | ||
Uniform-50% Read-50% アップデート | 28,656 | 読む: 1,716 | 読む: 8,863 | ||
更新: 1,761 | 更新: 8,951 | ||||
air.essd.standard.4xlarge | recordcount=2560000000 run_operationcount=80000000 スレッド=100 | ロード | 65,923 | 1,514 | 6,615 |
ユニフォーム-読み取り | 44,753 | 2,232 | 7,903 | ||
Zipfian-読む | 120,337 | 826 | 1,382 | ||
Uniform-50% Read-50% アップデート | 38,470 | 読む: 2,577 | 読む: 8,535 | ||
更新: 2,617 | 更新: 8,583 | ||||
tair.essd.standard.8xlarge | recordcount=5120000000 run_operationcount=160000000 スレッド=120 | ロード | 89,231 | 1,340 | 9,575 |
ユニフォーム-読み取り | 51,175 | 2,343 | 2,955 | ||
Zipfian-読む | 131,317 | 911 | 1,573 | ||
Uniform-50% Read-50% アップデート | 38,930 | 読む: 3,063 | 読む: 8,695 | ||
更新: 3,097 | 更新: 8,735 | ||||
tair.essd.standard.13xlarge | recordcount=7680000000 run_operationcount=240000000 スレッド=160 | ロード | 92,163 | 1,733 | 9,879 |
ユニフォーム-読み取り | 51,267 | 3,510 | 16,623 | ||
Zipfian-読む | 138,522 | 1,152 | 2,131 | ||
Uniform-50% Read-50% アップデート | 39,584 | 読む: 4,022 | 読む: 12,159 | ||
更新: 4,057 | 更新: 12,239 |