Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

カスタムメトリックを使用してキャッシュヒットを追跡する

AppSignalを使用するアプリを実行しているすべてのサーバーは、サンプルとメトリックのコレクションを30秒ごとにPushAPIに送信します。

各リクエストには、データの送信元のアプリを判別するために使用するキーがあります。そのためには、データベースにクエリを実行して、着信リクエストごとにアプリを見つける必要があります。 1か月あたり300億件のリクエストがあり、AppSignalを高速化するためにクエリの数を減らす方法を常に模索しています。

データベースクラスターでのクエリの数を減らすために、キャッシュを実装しました。データベースからアプリをフェッチするたびに、それをMemcachedに1分間保存します。この変更を本番環境にデプロイした後、もっと行っていることがわかりました。 以前よりもクエリ。キャッシュが頻繁に無効化されたようです。それが発生した場所を見つけるために、キャッシュが不適切に無効化された場所を見つけるためにいくつかのカスタムメトリックを追加しました。

プッシュ処理時間が更新されたときや、新しい名前空間を検出したときなど、キャッシュを無効にする場所がいくつかあります。

# Update last push processed at time
if app.last_push_processed_at < 5.minutes.ago
  app.set(:last_push_processed_at => Time.now)
  Rails.cache.delete(cache_key)
end
 
if namespaces_diff.any?
  app.add_to_set(:namespaces => namespaces_diff)
  Rails.cache.delete(cache_key)
end

これらのキャッシュ無効化のどれが原因であるかを判別するために、複数のカウンターを追加しました。この例では、app.cache.invalidateをインクリメントします カウンターを使用して検証の総数をカウントし、app.cache.invalidate_push_timeなどの特定のキーを使用します およびapp.cache.invalidate_namespaces 特定の無効化について。

# Update last push processed at at time
if app.last_push_processed_at < 5.minutes.ago
  app.set(:last_push_processed_at => Time.now)
  Rails.cache.delete(cache_key)
  Appsignal.increment_counter('app.cache.invalidate', 1)
  Appsignal.increment_counter('app.cache.invalidate_push_time', 1)
end
 
if namespaces_diff.any?
  app.add_to_set(:namespaces => namespaces_diff)
  Rails.cache.delete(cache_key)
  Appsignal.increment_counter('app.cache.invalidate', 1)
  Appsignal.increment_counter('app.cache.invalidate_namespaces', 1)
end

上記のカスタムメトリックを追加すると、時間の経過に伴うキャッシュヒットをグラフ化することができました。どのキャッシュキーがクエリの増加を引き起こしたかがすぐに明らかになりました。 app.cache.invalidate_namespaces キーはリクエストごとに無効になりました。

キャッシュ可能なリクエストの総数は、app.cache.maybeとしてカウントされます。 。

この問題の修正をデプロイした後、アプリの名前空間が更新されていない限り、無効化の数はゼロになりました。

カスタムメトリックを追加すると、どこで、いつ、どのくらいの頻度で何が起こっているのかを簡単に理解できます。この場合、キャッシュの無効化の数を知り、それらを読み取り可能なグラフに表示することで、問題をすばやく見つけることができました。特定の値をインクリメントしてダッシュボードを作成するには、数行のコードが必要です。

カスタム指標についてご不明な点がありましたら、アプリケーションでの設定をサポートできるかどうかをお知らせください。喜んでお手伝いさせていただきます!


  1. Android でアプリ キャッシュを削除する方法

    Chrome やその他のブラウザーと共に Android デバイスにインストールされたアプリは、情報を保存します。これにより、ページの読み込みとアプリケーションの読み込み時間が短縮されます。しかし、時間の経過とともにこれらのファイルが収集されると、デバイスが乱雑になるだけです。したがって、デバイスのパフォーマンスを高速化する方法や、ストレージ容量を少し解放する方法を探している場合は、Android のアプリ キャッシュをクリアする必要があります。このキャッシュのクリアは、Web サイトの動作にも役立ちます。 手動で行うこともできますが、時間がかかります。私を信用できない場合は、自分で試してみ

  2. Android でキャッシュをクリアする方法

    お持ちですか人間が日を追うごとに若返るのを見たことがありますか?いいえ?そうですね!ガジェットも同じです!これほどスムーズに動作するガジェットは他にありません。 でも、なぜそうなのか不思議に思ったことはありませんか?コンピュータについて言えば、データやジャンクも持っているため、動作が遅くなります。同様に、Android デバイスもキャッシュに感染するため、おかしな動作をします。 Android デバイスのキャッシュとは? キャッシュ データは、アクセスを高速化するために電話のメモリに保存されている元のデータのコピーです。簡単に言えば、スムーズに機能するために作成されたデータの自動セカンダリ コ