3

Websocket 接続を介してデータを受信し、各メッセージを Azure Redis キャッシュにプッシュする Node.js アプリケーションがあります。メッセージの永続的な配列をダウンストリームで使用するために変数に保存し、一定の間隔でその配列をキャッシュから同期します。少し複雑ですが、後で、キャッシュに書き込むアプリケーションの半分と、キャッシュから読み取るアプリケーションの半分を分離したいと思います..

02:00 GMT 頃、Azure portal の統計に基づいて、その同期で "キャッシュ ミス" が発生し始めたようです。これは、05:00 頃に再び "キャッシュ ヒット" を取得し始めるまでの数時間続きました。

キャッシュ ミスは、05:00 頃にピークに達する CPU 使用率の急激な増加に対応しています。そして私がピークと言うとき、私はそれが 81​​% に達することを意味します。

したがって、05:00頃にCPUがピークに達し、その後通常に戻り、「キャッシュミス」はなくなりますが、キャッシュメモリの使用量を見ると、約37.4mbの使用から約3.85mbの使用に減少します(これは「空」状態)、およびこのアプリケーションで使用されているリストは空でした。

アプリケーションがキャッシュに対して実行している唯一の関数は LPUSH と LRANGE であり、データを削除する機能を備えたものは何もありません。また、誰かが疑問に思っている場合に備えて、CPU がメモリ使用量を増やしたときにそうではなかったので、その不正を示唆するものは何もありません。データの追加がトリミングされました。

ベーシックプランのみなので、無敵などとは思っていませんが、スタンダードプランのレプリケーション機能がなくても、完全に自分自身を一掃することはできないと思っていました-私はRedis は定期的に自身をディスクに書き込み、エラーから回復したときにそこから復元するという印象。

これらはすべて、私の質問方法です。

  1. ここで何が起こったのか、誰か知っていますか?

  2. これが他の人が誤って自分自身をトリガーできるものである場合、同じキャッシュを使用している他のアプリケーションで、壊滅的な失敗を引き起こした可能性のある問題に注意する必要がありますか?

  3. スタンダード プランはこの種の問題に悩まされることはないと言う声を大歓迎します。なぜなら、私はすでにそれを分岐させており、それが正しい選択であると感じられるのは素晴らしいことだからです。

事前に多くの感謝..

4

3 に答える 3

2
  1. Basic プランを使用していないことを確認してください。基本プランはSLAを想定しておらず、私の経験上、かなり頻繁にデータが失われました
  2. Standard プランは SLA を提供し、Redis Cache の 2 つのインスタンスを利用します。それは非常に安定しており、データを失うことはありませんでしたが、そのようなケースはまだ可能です.
  3. ここで、Azure Redis をキャッシュとしてではなくデータベースとして使用する場合は、Azure Redis Cache Premium Tier で既に利用可能なデータ永続化機能を利用する必要があります: https://azure.microsoft.com/en- us/documentation/articles/cache-premium-tier-intro (Redis データの永続化を参照)
于 2016-02-19T08:51:38.827 に答える
0

James さん、Standards インスタンスを使用すると、可用性が大幅に向上するはずです。

Basic レベルでは、マスター ノードに対する Azure Fabric の更新 (またはハードウェア障害) により、すべてのデータが失われます。

Azure Redis Cache は、Standard レベルであっても、永続化 (ディスク/BLOB への書き込み) をまだサポートしていません。ただし、標準層では複製されたスレーブ ノードが提供され、マスターがダウンした場合に引き継ぐことができます。

于 2014-09-02T21:20:45.223 に答える