2

毎秒約150件のリクエストがAPI(node.js)に送信され、Redisにログインするとします。そのレートでは、手頃な価格のRedisToGoインスタンスが1時間程度ごとにいっぱいになります。

ログは、日次\月次\年次統計を生成するためにのみ必要です。これは、最も要求されたURLであり、最も要求されたURLであり、毎日の要求の総数などです。非常に重い計算はありませんが、配列の実行には多少時間がかかります。それぞれの中で最も頻繁な要素を確認します。

このデータを分析してからダンプすると(ノードのsetInterval関数を使用して?)、たとえば30分ごとに、それほど大したことではないように見えます。しかし、突然、たとえば1秒あたり2500のリクエストに対処しなければならない場合はどうなりますか?

突然、1時間あたり4.5〜Gbのデータを処理しています。30分ごとに約2.25Gb。redis \ nodeがどれほど高速であっても、最も頻繁なリクエストを計算するには1分かかります。

質問:2.25 GB相当のdadaが処理されている間、redisインスタンスはどうなりますか?(リストから、私は想像します)

潜在的に大量のログデータをredisに移動してから定期的にフラッシュするよりも、より良い方法はありますか?

4

2 に答える 2

6

IMO、ログ行を保存して後でバッチで処理するためのバッファとしてRedisを使用しないでください。このためにメモリを消費することは実際には意味がありません。ログを単一のサーバーに収集し、ファイルシステムに書き込むことで、より適切にサービスを提供できます。

現在、Redisでできることは、統計をリアルタイムで計算しようとしていることです。これがRedisが本当に輝いているところです。生データをRedisに保持する(後でバッチで処理する)代わりに、計算する必要のある統計を直接保存して集約することができます。

たとえば、ログ行ごとに、次のコマンドをRedisにパイプライン処理できます。

zincrby day:top:keyword 1 my_keyword
zincrby day:top:url 1 my_url
incr day:nb_req

これにより、当日の上位キーワード、上位URL、およびリクエスト数が計算されます。一日の終わりに:

# Save data and reset counters (atomically)
multi
rename day:top:keyword tmp:top:keyword
rename day:top:url tmp:top:url
rename day:nb_req tmp:nb_req
exec

# Keep only the 100 top keyword and url of the day
zremrangebyrank tmp:top:keyword 0 -101
zremrangebyrank tmp:top:url 0 -101

# Aggregate monthly statistics for keyword
multi    
rename month:top:keyword tmp
zunionstore month:top:keyword 2 tmp tmp:top:keyword
del tmp tmp:top:keyword
exec

# Aggregate monthly statistics for url
multi    
rename month:top:url tmp
zunionstore month:top:url 2 tmp tmp:top:url
del tmp tmp:top:url
exec

# Aggregate number of requests of the month
get tmp:nb_req
incr month:nb_req <result of the previous command>
del tmp:nb_req

月末のプロセスは完全に似ています(zunionstoreまたは月次データのget / incrを使用して、年次データを集計します)。

このアプローチの主な利点は、各ログ行に対して実行される操作の数が制限されている一方で、月次および年次の集計を簡単に計算できることです。

于 2012-07-30T10:41:32.033 に答える
1

flumeまたはchukwa(またはスクライブ)を使用してログデータを別のサーバー(利用可能な場合)に移動するのはどうですか?hadoop/hbaseまたは他のディスクベースのストアを使用してログデータを保存できます。

https://cwiki.apache.org/FLUME/

http://incubator.apache.org/chukwa/

https://github.com/facebook/scribe/

于 2012-07-29T23:30:05.137 に答える