このトピックでは、Tair DRAMベースインスタンスおよびRedis Open-Source Editionインスタンスのパフォーマンステスト結果、テスト環境、テストツール、およびテスト方法について説明します。
テスト結果
パフォーマンステストは、SETやGETなど、12を超える基本的なRedisコマンドで実施され、いくつかの主要なメトリックに焦点を当てています。
コマンド | Tair DRAMベースのインスタンス | Redisオープンソース版インスタンス | ||||
QPS | 平均レイテンシ | 99パーセンタイル遅延 | QPS | 平均レイテンシ | 99パーセンタイル遅延 | |
SET | 282,656 | 0.45 | 0.86 | 142,376 | 0.45 | 0.72 |
GET | 519,761 | 0.24 | 0.36 | 204,690 | 0.31 | 0.47 |
ZADD | 208,169 | 0.62 | 1.14 | 113,135 | 0.57 | 0.78 |
ZSCORE | 463,904 | 0.27 | 0.40 | 170,163 | 0.37 | 0.54 |
HSET | 260,069 | 0.49 | 1.03 | 124,613 | 0.51 | 0.97 |
HGET | 494,603 | 0.25 | 0.37 | 188,903 | 0.34 | 0.52 |
LPUSH | 286,324 | 0.44 | 0.84 | 153,269 | 0.42 | 0.59 |
LINDEX | 414,070 | 0.30 | 0.45 | 157,568 | 0.40 | 0.58 |
サッド | 292,738 | 0.44 | 0.86 | 140,155 | 0.45 | 0.63 |
SISMEMBER | 531,139 | 0.24 | 0.34 | 181,492 | 0.35 | 0.52 |
EVALSHA | 214,303 | 0.60 | 1.12 | 101,136 | 0.63 | 0.91 |
テスト指標:
QPS: 1秒あたりに処理された読み取りおよび書き込み操作の数。
平均レイテンシ: 操作の平均レイテンシ。 単位:ミリ秒。
99パーセンタイル待ち時間: 操作の99% が経験する最大待ち時間。 単位:ミリ秒。 たとえば、0.5の値は、99% の要求を0.5ミリ秒以内に処理できることを示します。
テスト結果は、複数のゾーンおよびインスタンスにわたって行われた複数のテストから得られた平均値を表す。
テスト結果のレイテンシは、エンドツーエンドの遅延の合計を表します。これには、パケットがデータベースとストレステストクライアントでキューに入れるのに必要な時間が含まれます。
テスト結果は、複数の制御不能な要因の影響を受けます。 約10% の許容誤差は妥当であると考えられる。
テスト結果は、新しいインスタンスで実行された単一コマンドテストの結果のみを表します。 ただし、本番環境でのストレステストの特定のビジネスシナリオを検討することが重要です。
テスト結果は、インスタンスの最大パフォーマンスを反映しています。 本番環境では、インスタンスをピーク負荷条件で動作させないことを推奨します。
テスト環境
データベース
項目 | 説明 |
リージョンとゾーン | 北京ゾーンL、杭州ゾーンK、上海ゾーンN、深センゾーンC 説明 このテストは、複数の領域にわたって実行される。 テストレポートは、前のゾーンの平均パフォーマンスレベルのみを表します。 |
インスタンスアーキテクチャ | 標準のマスター-レプリカアーキテクチャが使用されます。 詳細については、「標準アーキテクチャ」をご参照ください。 説明 他のアーキテクチャのパフォーマンスの説明:
nは、クラスターインスタンス内のシャードの数、または読み書き分離インスタンス内のノードの総数を示します。 |
インスタンスタイプ | テスト結果は、使用されるインスタンスタイプの影響を最小限に抑えます。 このテストでは、次のインスタンスタイプが選択されます。
インスタンスタイプの詳細については、「概要」をご参照ください。 |
クライアント
項目 | 説明 |
クライアントのホスト | ECS. g7.8xlargeタイプのElastic Compute Service (ecs) インスタンス。 詳細については、「インスタンスファミリーの概要」をご参照ください。 |
リージョンとゾーン | インスタンスのリージョンとゾーン。 |
オペレーティングシステム | Alibaba Cloud Linux 3 |
ネットワーク | クライアントは、Tairインスタンスと同じ仮想プライベートクラウド (VPC) にあり、VPCを介してTairインスタンスに接続されています。 |
テストツール
オープンソースツールのresp-benchmarkは、ストレステストに使用されます。 SETコマンドやGETコマンドなどの一般的なテスト項目は、redis-benchmarkで使用されるものと一致します。 他のテスト項目を使用して、システムとの実際のユーザー操作をより正確に複製できます。 これには、複数のスレッドでTairを最大限に活用して、ストレス下でのTairの根底にあるパフォーマンスを明らかにすることが含まれます。
resp-benchmark -- help
コマンドを実行して設定項目の詳細を取得するか、ツールのGitHubホームページにアクセスして詳細を確認してください。
インストール方法
pip install resp-benchmark==0.1.7
テストアイテム
既存のデータとの干渉を防ぐため、最初に各テスト中にデータベースをクリアすることをお勧めします。
個別ベンチマークツールは、接続カウントが指定されていない場合、比較的適切な数の接続を自動的に選択します。 ただし、極端な負荷条件下でデータを正確に測定するには、手動で接続数を調整することをお勧めします。 たとえば、
-c 128
パラメーターを使用して、数値を128に設定できます。 データベースへの接続数が少ない場合、データベースは十分な数の同時リクエストを受信しないため、QPSが低くなります。 接続数が多い場合、データベースには過剰な負荷を処理するのに十分なリソースがない可能性があります。 これにより、パケットがネットワーク内で長時間待ち行列に入れられ、待ち時間の増加につながる。 様々な要因の影響により、接続の数に対して固定構成を提供することは困難である。 接続数の一般的な設定には、32、64、128、192、256があります。 実際のテスト結果に基づいて数値を調整できます。
次のセクションでは、Redisコマンドのテスト例を示します。
SET
このメトリックは、SETコマンドのパフォーマンスを測定します。
このテストでは、SETコマンドを実行します。このコマンドでは、キーの範囲は0〜10,000,000 (
key_0000000000
〜key_0009999999
の形式) で、各値のサイズは64バイトです。 テストは20秒間実行されます。resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SET {key uniform 10000000} {value 64}"
GET
このメトリックは、GETコマンドのパフォーマンスを測定します。
キーと値のペアで構成されるデータセットを作成します。キーの範囲は0〜10,000,000で、各値のサイズは64バイトです。
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の書き込みパフォーマンスを評価します。キーの範囲は0〜1,000で、スコアは0〜70,000です。 各キーには最大10,000個のフィールドを含めることができます。 テストは20秒間実行されます。
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"
ZSCORE
このメトリックは、ZSCOREコマンドのパフォーマンスを測定します。
キーと値のペアで構成されるデータセットを作成します。キーの範囲は0〜1,000で、スコアは0〜70,000です。 各キーには最大10,007個のフィールドを含めることができます。
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コマンドを実行します。このコマンドでは、キーの範囲は0〜1,000で、各値のサイズは64バイトです。 各キーには、0〜10,000の範囲のフィールドが含まれます。 テストは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コマンドのパフォーマンスを測定します。
キーと値のペアで構成されるデータセットを作成します。キーの範囲は0〜1,000で、各値のサイズは64バイトです。 各キーは10,007フィールドを含む。
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コマンドのパフォーマンスを測定します。
このテストでは、キーの範囲が0から1,000で、各値のサイズが64バイトであるLPUSHコマンドを実行します。 テストは20秒間実行されます。
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LPUSH {key uniform 1000} {value 64}"
LINDEX
このメトリックは、LINDEXコマンドのパフォーマンスを測定します。
キーと値のペアで構成されるデータセットを作成します。キーの範囲は0〜1,000で、各値のサイズは64バイトです。 各キーは10,000フィールドを含む。
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コマンドを実行します。このコマンドでは、キーの範囲は0〜1,000で、各値のサイズは64バイトです。 テストは20秒間実行されます。
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SADD {key uniform 1000} {value 64}"
SISMEMBER
このメトリックは、SISMEMBERコマンドのパフォーマンスを測定します。
キーと値のペアで構成されるデータセットを作成します。キーの範囲は0〜1,000で、各値のサイズは64バイトです。 各キーは10,007フィールドを含む。
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コンテキストでSETコマンドを実行するパフォーマンスを測定します。 この場合、SETコマンドは、0から10,000,000の範囲のキーを格納するために使用され、各値は64バイトのサイズである。
Luaスクリプトをロードする:
redis-cli -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"
EVALSHAコマンドのパフォーマンスを20秒間ベンチマークします。
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000} {value 64}"