このトピックでは、Tair メモリ最適化、Redis Community Edition インスタンスのパフォーマンステスト結果を示します。また、テスト環境、ツール、およびメソッドについても説明します。
テスト結果
このセクションでは、SET や GET などの 10 を超える基本的な Redis コマンドのパフォーマンステストメトリックを示します。
コマンド | Tair メモリ最適化版 | 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 |
SADD | 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 秒あたりに処理される読み取りおよび書き込み操作の数。
平均レイテンシ: 操作の平均レイテンシ (ミリ秒 (ms))。
99 パーセンタイルレイテンシ: 99% の操作の最大レイテンシ (ミリ秒 (ms))。たとえば、値が 0.5 ms の場合、99% のリクエストが 0.5 ms 以内に処理されることを意味します。
テスト結果は、複数のゾーンにまたがる複数のインスタンスで実行された複数のテストの平均値です。
テスト結果のレイテンシはエンドツーエンド遅延です。これには、データベースとストレステストクライアントの両方でのデータパケットのキューイング時間が含まれます。
テスト結果は、多くの制御不能な要因の影響を受けます。約 10% の誤差は妥当です。
テスト結果は、新しいインスタンスでの単一コマンドテストのみを反映しています。本番環境でのストレステストには、特定のビジネスシナリオを使用してください。
テスト結果は、インスタンスのピークパフォーマンスを示しています。本番環境では、ピーク負荷でインスタンスを実行しないでください。
テスト環境
データベース
環境コンテキスト | 説明 |
リージョンとゾーン | 中国 (北京) ゾーン L、中国 (杭州) ゾーン K、中国 (上海) ゾーン N、および中国 (深圳) ゾーン C。 説明 このテストは複数のリージョンで実施されました。このレポートは、前述のゾーンの平均パフォーマンスレベルのみを示しています。 |
インスタンスアーキテクチャ | 標準アーキテクチャ (デュアルレプリカ)。クラスターは有効になっていません。詳細については、「標準アーキテクチャ」をご参照ください。 説明 他のアーキテクチャのパフォーマンス:
n は、クラスタアーキテクチャのシャード数、または読み書き分離アーキテクチャのノードの総数です。 |
インスタンスバージョン | このテストは Redis 7.0 と互換性があります。通常、バージョンが結果に与える影響はほとんどありません。 |
インスタンスタイプ | 次のインスタンスタイプがテストされました:
テスト結果はインスタンスタイプによる大きな影響を受けません。インスタンスタイプの詳細については、「インスタンスタイプとよくある質問」をご参照ください。 |
テストクライアント
テスト環境 | 説明 |
ストレステストツールをデプロイするためのデバイス | Elastic Computing Service (ECS) インスタンス (インスタンスタイプ ecs.g7.8xlarge)。詳細については、「インスタンスファミリー」をご参照ください。 |
リージョンとゾーン | インスタンスと同じリージョンおよびゾーン。 |
オペレーティングシステム | Alibaba Cloud Linux 3。 |
ネットワーク | クライアントは Tair インスタンスと同じ VPC にあり、VPC 経由で Tair インスタンスに接続します。 |
テストツール
テストでは、Tair チームのオープンソースツール resp-benchmark を使用します。
SET や GET などの一般的なコマンドのテストは、redis-benchmark のテストと一致しています。複雑なコマンドには、実際のビジネスシナリオをより厳密にシミュレートするテストモードが使用されます。
マルチスレッド機能はデフォルトで有効になっており、サーバーへのリクエスト圧力を最大化し、ストレステストクライアントがパフォーマンスボトルネックになるのを防ぎます。
redis-benchmark を使用する場合は、Redis 7.0 以降を使用してください。このバージョンでは、ベンチマークツールに最適化されたマルチスレッドサポートが提供されています。
インストール方法
pip install resp-benchmark==0.1.7インストール後、resp-benchmark --help コマンドを実行して設定項目の詳細を確認するか、GitHub ホームページにアクセスしてください。
テスト例
各テストの前に、既存のデータによる干渉を避けるためにデータベースをクリアしてください。
接続数を指定しない場合、resp-benchmark は自動的に適切な数を選択します。ピーク負荷時のデータを測定するには、接続数を手動で調整します。たとえば、
-c 128パラメーターを追加して接続数を 128 に設定します。接続数が少ないと、テスト圧力が不十分になり、QPS が低くなります。接続数が多すぎると、DB の処理能力を超える可能性があり、データパケットがネットワークリンクで長時間キューイングされ、高レイテンシが発生します。多くの要因が影響するため、固定の接続数を提供することはできません。一般的な設定は 32、64、128、192、256 です。テスト結果に基づいて必要に応じて数を調整してください。
次のセクションでは、各コマンドのテスト例を示します。
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 -s 20 "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 で、フィールドの範囲は 0 から 10,000 です。各フィールドの値は 64 バイトです。テスト期間は 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 です。各キーには 10,007 のフィールドが含まれます。各フィールドの値は 64 バイトです。
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 コマンドのパフォーマンスを表します。
この例では、LPUSH コマンドをテストします。キーの範囲は 0 から 1,000 で、値のサイズは 64 バイト、テスト期間は 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 です。各キーには 10,000 の要素が含まれ、各要素のサイズは 64 バイトです。
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 コマンドのパフォーマンスを表します。
この例では、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 です。各キーには 10,007 のメンバーが含まれ、各メンバーのサイズは 64 バイトです。
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])"コマンドを 20 秒間テストします:
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000} {value 64}"