1

何百人もの同時ログイン ユーザー (常に約 10,000 ~ 30,000 人のユーザー) に対応する Web アプリケーションがあります。アプリは、特に 1 秒間に数回発生する可能性のある特定のユーザー アクションに関する分析を収集します。

これまでのところ、アプリの設計はかなり分離されており (多くの memcache/redis と遅延 DB 書き込み)、ロックをうまく回避して、何も「集中化」されていないことを確認しました。

経営陣は最終的に、これらのアクションをグローバル カウンター (1 秒の粒度まで) に集約するリアルタイム分析パネルを構築することを決定しました。これらの「グローバル」カウンターを持つ最良の方法は何ですか? 一部の memcache キーをインクリメントすることはできますが、memcaches (EC2) のクラスターがあるため、キーをカウントアップするためにそれらすべてを反復処理すると、このメトリクスが遅れます。その点で多くのボトルネックがあったため、DB は問題外であり、すべての DB 書き込みはメッセージ キュー (beanstalkd) によって遅延されます。

どんなヒントでも大歓迎です。

4

1 に答える 1

2

これは、定期的な集計を伴うアクションの NoSQL ダンプに適しているように見えます。また、EC2 を使用しているため、必要なツールにアクセスできる適切な場所にいます。

セカンダリ Web サーバーをセットアップしてすべてのアクションを記録し、別のデータベース サーバーに送り込むことで、既存の Web サーバー インフラストラクチャを完全に回避できます。または、適切でない場合は、Web サーバーを共有しますが、別の NoSQL サーバーにオフロードします。

次に、「リアルタイム」をわずかな期間 (秒または数分) 遅らせることができる場合は、NoSQL テーブルを分析システムにより適した形式に集約し、「ライブ」に送り込むスイーパー関数を使用できます。処理された NoSQL データを消去します。

または、NoSQL から直接統計情報を取得することはできますか?

NoSQL は Memcached を使用する場合と同じくらい高速かもしれませんが (レポートの作成者によって、さまざまなベンチマークでさまざまな結果が報告されます)、集計が必要な場合にデータをまとめて取得する方が確実に高速です。

于 2012-11-09T04:37:27.930 に答える