この記事では、Azure Managed Redis のコードを開発する方法について説明します。
接続の回復力とサーバーの負荷
クライアント アプリケーションを開発するときは、 接続の回復性 と サーバー負荷の管理に関連するベスト プラクティスを検討してください。
キーを増やすことと値を小さくすることを検討する
Azure Managed Redis は、より小さい値で最適に動作します。 データを複数のキーに分散するには、より大きなデータ チャンクをより小さなチャンクに分割することを検討してください。 理想的な値のサイズの詳細については、 この記事を参照してください。
要求または応答のサイズが大きい
要求または応答が大きいと、タイムアウトが発生する可能性があります。 たとえば、クライアントのタイムアウト値を 1 秒として構成するとします。 アプリケーションでは、(同じ物理ネットワーク接続を使用して) 2 つのキー ( A と Bなど) を同時に要求します。 ほとんどのクライアントは要求 パイプライン処理をサポートしています。要求 A と B の両方が、応答を待たずに 1 つずつ送信されます。 サーバーは同じ順序で応答を返します。 応答 A が大きい場合は、後の要求でほとんどのタイムアウトが消費される可能性があります。
次の例では、要求 A と B がサーバーにすばやく送信されます。 サーバーは応答 A と B をすぐに送り始めます。 データ転送時間のため、応答 B は、サーバーが迅速に応答した場合でも、応答 A タイムアウトするまで待機する必要があります。
|-------- 1 Second Timeout (A)----------|
|-Request A-|
|-------- 1 Second Timeout (B) ----------|
|-Request B-|
|- Read Response A --------|
|- Read Response B-| (**TIMEOUT**)
この要求と応答のパターンは測定が困難です。 大きい要求や応答を追跡するように、クライアント コードをインストルメント化する必要があります。
応答サイズが大きい場合の解決策はさまざまですが、次のものが含まれます。
- アプリケーションを少数の大きい値ではなく、多数の小さい値用に最適化します。
- データを関連する小さい値に分割します。
- より小さい値が推奨される理由の詳細については、Redis に最適な値のサイズ範囲は何ですか? 100 KB では大きすぎますか? に関する投稿を参照してください。
- より高い帯域幅機能を得るには、仮想マシン (VM) のサイズを増やします。
- クライアントまたはサーバー VM の帯域幅を増やすと、より大きい応答のデータ転送時間が削減される可能性があります。
- 両方のコンピューターの現在のネットワーク使用量を現在の VM サイズの制限と比較します。 サーバーのみ、またはクライアントのみの帯域幅を増やすだけでは十分でない可能性があります。
- アプリケーションが使用する接続オブジェクトの数を増やします。
- ラウンド ロビン方式を使用して、異なる接続オブジェクト経由で要求を送信します。
パイプライニングを使用する
Redis パイプライン処理をサポートする Redis クライアントを選択してみます。 パイプラインを使用すると、ネットワークを効率的に使用して、最高のスループットを実現できます。
コストのかかる操作を避ける
KEYS コマンドのような一部の Redis 操作はコストがかかるので、避ける必要があります。 長期実行コマンドに関する考慮事項については、長期実行コマンドに関する記事を参照してください。
適切な層を選択する
Azure Managed Redis には、メモリ最適化、バランス、コンピューティング最適化、フラッシュ最適化のレベルが用意されています。 レベルを選択する方法の詳細については、「 スケーリング方法」を参照してください。 パフォーマンスをテストして適切なレベルを選択し、接続設定を検証します。 詳細については、「パフォーマンス テスト」を参照してください。
適切な可用性モードを選択する
Azure Managed Redis には、高可用性構成を有効または無効にするオプションが用意されています。 高可用性モードを無効にすると、AMR インスタンス内のデータはレプリケートされず、メンテナンス中に Redis インスタンスを使用できなくなります。 計画済みまたは計画外のメンテナンス中に、AMR インスタンス内のすべてのデータが失われます。 高可用性は、開発ワークロードまたはテスト ワークロードに対してのみ無効にします。 高可用性を備えた Redis インスタンスのパフォーマンスは、プライマリデータシャードとレプリカデータシャードの間で負荷を分散することが重要なデータレプリケーションがないため、低下する可能性もあります。
Redis インスタンスと同じリージョンのクライアント
Redis インスタンスとアプリケーションを同じリージョンに配置します。 別のリージョンにある Redis に接続すると、待ち時間が大幅に増加して、信頼性が低下します。
Azureの外部から接続できますが、特にアプリケーションまたはデータベースのパフォーマンスを向上させるために Redis を使用する場合は推奨されません。 Redis サーバーを単なるキー/値ストアとして使用している場合は、待ち時間は一番の問題ではない可能性があります。
パブリック IP アドレスではなくホスト名に依存する
キャッシュに割り当てられた IP アドレスは、スケール操作またはバックエンドの改善の結果として変更される可能性があります。 明示的なパブリック IP アドレスまたはプライベート IP アドレスではなく、ホスト名に依存します。 仮想ネットワーク内のキャッシュに対して構成された静的 IP アドレスは不変の保証ではなく、変更はまれですが、特定の操作中に変更される可能性があります。
Azure Managed Redis のホスト名は次のようになります: <DNS name>.<Azure region>.redis.azure.net
TLS 暗号化を使用する
Managed Redis Azureには、既定で TLS で暗号化された通信が必要です。 現在、TLS バージョン 1.2 および 1.3 がサポートされています。 お使いのクライアント ライブラリまたはツールで TLS がサポートされていない場合は、暗号化されていない接続を有効にすることができます。
メモリ使用量、CPU 使用率メトリック、クライアント接続、ネットワーク帯域幅を監視する
運用環境Azure Managed Redis インスタンスを使用する場合は、Used Memory Percentage、CPU メトリック、および Connected Clients のアラートを設定します。 これらのメトリックが一貫して 75% を超える場合は、インスタンスをより大きなメモリまたはより速いスループット レベルにスケーリングすることを検討してください。 詳細については、 スケーリングするタイミングを参照してください。 メモリの報告方法と容量を計画する方法の詳細については、 メモリ管理に関するページを参照してください。
データ永続化またはデータ バックアップを有効にすることを検討する
Redis は既定で一時的なデータ用に設計されているため、メンテナンスや停止などのさまざまな状況により、まれにデータが失われる可能性があります。 アプリケーションがデータ損失の影響を受けやすい場合は、データのエクスポート操作を使用して、データの永続化または定期的なデータ バックアップを有効にします。
データ永続化機能は、キャッシュがダウンしたときにデータの迅速な復旧ポイントを自動的に提供します。 この機能は、キャッシュ インスタンスにマウントするマネージド ディスクに RDB または AOF ファイルを格納するため、迅速な復旧が可能です。 ユーザーはディスク上の永続化ファイルにアクセスできません。また、他の AMR インスタンスで使用することはできません。
多くのお客様は、永続化を使用して、キャッシュ上のデータの定期的なバックアップを取得したいと考えています。 この目的でデータ永続化を使用しないでください。 代わりに、インポート/エクスポート機能を使用します。 RDB 形式のデータのコピーを選択したストレージ アカウントに直接エクスポートし、必要な頻度でデータ エクスポートをトリガーできます。 ポータルから、または CLI、PowerShell、または SDK ツールを使用してエクスポートをトリガーできます。
クライアント ライブラリ固有のガイダンス
詳細については、「Azure Managed Redis クライアント ライブラリを参照してください。