1

環境: 複数の Web (30)、キャッシュ (8) サーバー、および 1 つの専用データベース サーバー。

データベースをオフロードするために、中央の Redis キャッシュとローカル メモリ キャッシュが用意されています。

  • 大規模な共通イベント データがキャッシュされ、スケジュールに基づいて更新されます
  • ユーザー固有のデータは、アクセス時に個別にキャッシュされます

イベントによってユーザー固有のデータ ニーズの大規模なセットがすべて更新されると、問題が発生します。

約 20 万人の登録ユーザーがいて、イベントが発生すると約 10K ~ 20K がサイトに (同時に) 訪れます。ユーザーあたり平均 5 個のキャッシュ キーを使用すると、更新が必要なユーザー固有のデータを含む合計 50K ~ 100K のキャッシュ キーになります。

現在のソリューションは失敗します:

  1. ユーザーキャッシュをフラッシュすると、データベースが過負荷になります (30 Web サーバー)
  2. すべてのデータをキャッシュにロードするのに時間がかかる (10% しか使用されない)
  3. KEYS と SCAN はキャッシュをブロックできます (まだ試していません...これは問題ですか?)

この状況でのベストプラクティスは何ですか?

4

0 に答える 0