Tair (Redis OSS-compatible) は、高性能なインメモリデータ処理を提供します。効率的なシステムを構築し、Tair を最大限に活用するために、Tair (Redis OSS-compatible) の以下の開発および O&M 標準に従ってください。これらの標準は、Alibaba Cloud の長年の O&M 経験に基づいており、ビジネスデプロイ、キー設計、SDK 使用、コマンド使用、O&M 管理をカバーしています。
Tair のパフォーマンス境界
図 1. Tair のパフォーマンス境界
|
リソースタイプ |
説明 |
|
コンピューティングリソース |
ワイルドカード、並行 Lua スクリプト、1 対多の PUBSUB、ホットキーは、大量のコンピューティングリソースを消費します。クラスターインスタンスでは、これらの項目はリクエストスキューやシャードの未活用も引き起こす可能性があります。 |
|
ストレージリソース |
ストリーミングジョブやラージキーは、大量のストレージリソースを消費します。クラスターインスタンスでは、これらの項目はデータスキューやシャードの未活用も引き起こす可能性があります。 |
|
ネットワークリソース |
データベース全体のスキャン (KEYS) や、ラージキーおよびラージバリューに対する範囲クエリ (HGETALL) は、大量のネットワークリソースを消費し、スレッドの輻輳を引き起こすことがよくあります。 重要
Tair の高並行性機能は、期待されるほどアクセスパフォーマンスを大幅に向上させるわけではなく、Tair の全体的なパフォーマンスに影響を与えます。たとえば、Tair へのラージバリューの保存は、アクセスパフォーマンスを大幅に向上させることはありません。 |
クラスターインスタンスでは、ホットキー、ラージキー、またはラージバリューは、データスキューやリクエストスキューを引き起こす可能性もあります。本番環境では、Tair のパフォーマンス境界に達することを避けることが重要です。
ビジネスデプロイ標準
|
重要度 |
標準 |
説明 |
|
★★★★★ |
シナリオが高速キャッシュかインメモリデータベースかを判断してください。 |
|
|
★★★★★ |
Elastic Compute Service (ECS) インスタンスなど、Tair インスタンスと同じ Virtual Private Cloud (VPC) にアプリケーションをデプロイしてください。 |
Tair は高いパフォーマンスを提供しますが、Tair インスタンスから離れた場所にデプロイしたり、インターネット経由で接続したりすると、ネットワークレイテンシーによってパフォーマンスが大幅に低下します。 説明
クロスリージョンデプロイの場合は、グローバル分散キャッシュを使用して、geo ディザスタリカバリ、アクティブ地理的冗長性、レイテンシー削減を実現します。 |
|
★★★★☆ |
サービスごとに Tair インスタンスを作成してください。 |
複数のサービス間で Tair インスタンスを共有しないでください。キャッシュとインメモリデータベースのワークロードを混在させると、1 つのサービスのエビクションポリシー、スロークエリ、FLUSHDB コマンドの実行が他のサービスに影響を与えます。 |
|
★★★★☆ |
期限切れキーをエビクトするために、適切なエビクションポリシーを設定してください。 |
Tair の期限切れキーのデフォルトエビクションポリシーはvolatile-lruです。エビクションポリシーは、Redis Open-Source Edition インスタンスで設定可能なパラメータで設定します。 |
|
★★★☆☆ |
ストレステストデータと期間を管理してください。 |
Tair はストレステストデータを削除しません。ビジネスへの影響を防ぐために、ストレステストデータと期間を自分で管理する必要があります。 |
キー設計標準
|
重要度 |
標準 |
説明 |
|
★★★★★ |
バリューを 10 KB 未満に保ってください。 |
過大なバリューは、データスキュー、ホットキー、高帯域幅、または高 CPU 使用率を引き起こします。 |
|
★★★★★ |
説明的で簡潔なキー名を使用してください。 |
|
|
★★★★★ |
複雑なデータ構造あたりのサブキーを 1,000 未満に制限してください。 説明
一般的な複雑なデータ構造には、Hash、Set、Zset、Geo、Stream、および Tair (Enterprise Edition) 固有の拡張データ構造 (exString、exHash、exZset、GIS、Bloom など) が含まれます。 |
HGETALL などのコマンドの時間計算量は、サブキー数に応じてスケールします。過剰なサブキーを持つキーに対して頻繁に O(N)+ コマンドを実行すると、スロークエリ、データスキュー、ホットキーが発生します。 |
|
★★★★☆ |
バリューを読みやすい構造にシリアル化してください。 |
言語バイトコードはバージョン間で変更される可能性があります。生のオブジェクト (Java、C#) を Tair に保存すると、スタックのアップグレードが困難になります。代わりに、バリューを読みやすい構造にシリアル化してください。 |
SDK 使用標準
|
重要度 |
標準 |
説明 |
|
★★★★★ |
JedisPool または JedisCluster を使用して Tair インスタンスに接続してください。 説明
Tair (Enterprise Edition) DRAM ベースのインスタンスには、TairJedis クライアントを使用してください。新しいデータ構造のカプセル化クラスが提供されています。詳細については、「クライアントを使用してインスタンスに接続する」をご参照ください。 |
単一接続はタイムアウト後に自動的に再接続できません。JedisPool 接続を設定してください。詳細については、「クライアントを使用してインスタンスに接続する」、「JedisPool の最適化」、「JedisCluster」をご参照ください。 |
|
★★★★☆ |
クライアントに適切なフォールトトレランスメカニズムを設計してください。 |
ネットワークの変動やリソースの高使用率により、Tair で接続タイムアウトやスロークエリが発生する可能性があります。これらのリスクを防ぐために、クライアントに適切なフォールトトレランスメカニズムを設計する必要があります。 |
|
★★★★☆ |
適切な再試行間隔を使用してください。 |
200 ms 未満の再試行間隔は、急速な再試行をトリガーし、サービス雪崩を引き起こす可能性があります。詳細については、「Redis クライアントの再試行メカニズム」をご参照ください。 |
コマンド使用標準
|
重要度 |
標準 |
説明 |
|
★★★★★ |
KEYS * などの範囲クエリを避けてください。代わりに、ポイントクエリまたは SCAN を使用してください。 |
範囲クエリは、サービス中断、スロークエリ、または輻輳を引き起こす可能性があります。 |
|
★★★★★ |
Lua スクリプトの代わりに拡張データ構造 (exString (Redis 文字列機能を拡張するコマンドを含む) 、exHash、exZset、GIS、Bloom、Doc、TS、Cpc、Roaring、Search、Vectorなど) を使用してください。 |
Lua スクリプトはマルチスレッドをサポートしていないため、大量のコンピューティングリソースとメモリリソースを消費します。複雑または不適切なスクリプトは、リソースを使い果たす可能性があります。 |
|
★★★★☆ |
パイプラインを使用して、データのラウンドトリップタイム (RTT) を削減してください。 |
クライアントが個々の応答に依存しない場合は、パイプラインでコマンドをバッチ処理してください。ガイドライン:
|
|
★★★★☆ |
Redis コマンドを正しく使用してください。 |
トランザクションコマンドの制限:
|
|
★★★★☆ |
Pub/Sub コマンドによる大規模なメッセージ配信を避けてください。 |
Pub/Sub には、データ永続化と確認応答メカニズムがありません。1 KB を超えるメッセージを 100 を超えるサブスクライバーに配信すると、サーバーリソースを使い果たし、メッセージ損失を引き起こす可能性があります。 説明
パフォーマンスとバランスを向上させるために、Tair はクラスターインスタンスで Pub/Sub を最適化し、チャネル名に基づいてコマンドをデータノードにハッシュします。 |
O&M 管理標準
|
重要度 |
標準 |
説明 |
|
★★★★★ |
さまざまなインスタンス管理操作の影響を理解してください。 |
設定変更または再起動により、Tair インスタンスで一時的な切断が発生する可能性があります。実行する前に影響を理解してください。詳細については、「インスタンスの状態と影響」をご参照ください。 |
|
★★★★★ |
クライアントのエラー処理とディザスタリカバリロジックをテストしてください。 |
Tair はノードの健全性を監視し、マスターが使用不可になったときに自動的にマスター/レプリカ切り替えをトリガーします。クライアントが本番稼働する前に、手動で切り替えをトリガーして、エラー処理とディザスタリカバリロジックを検証してください。詳細については、「マスターノードからレプリカノードへのワークロードの手動切り替え」をご参照ください。 |
|
★★★★★ |
時間のかかるコマンドやリスクの高いコマンドを無効にしてください。 |
本番環境でのコマンドの誤用は、データ損失 (FLUSHALL) やネットワーク輻輳 (KEYS) を引き起こす可能性があります。安定性を向上させるために、リスクの高いコマンドを無効にしてください。詳細については、「リスクの高いコマンドを無効にする」をご参照ください。 |
|
★★★★☆ |
保留中のイベントに迅速に対処してください。 |
Alibaba Cloud は、ハードウェアアップグレード、ソフトウェア更新、またはネットワークメンテナンスのために保留中のイベントを生成します。たとえば、マイナーデータベースバージョンの更新が必要な場合などです。影響を確認し、必要に応じて再スケジュールしてください。詳細については、「スケジュールされたイベントの表示と管理」をご参照ください。 |
|
★★★★☆ |
コアメトリックのアラートを設定してください。 |
アラート設定を使用して、CPU 使用率、メモリ使用量、帯域幅をリアルタイムで監視してください。 |
|
★★★★☆ |
Tair O&M 機能を使用してインスタンスの健全性を定期的にチェックし、リソース異常をトラブルシューティングしてください。 |
|
|
★★★☆☆ |
監査ログ機能を有効にし、監査ログを評価してください。 |
監査ログ機能は、書き込み操作を記録し、クエリ、オンライン分析、エクスポートをサポートします。これを使用して、インスタンスのセキュリティとパフォーマンスを監視してください。詳細については、「監査ログ」をご参照ください。 重要
監査ログ機能を有効にすると、書き込みおよび監査量に応じて、Tair インスタンスのパフォーマンスが 5% から 15% 低下する可能性があります。書き込み負荷の高い Tair ワークロードの場合は、トラブルシューティングなどの O&M 操作中にのみ監査ログを有効にしてください。 |