2011-08-13 4 views
0

私はBeanstalkキューからジョブを取り出してDBに書き込むdb logging ruby​​ gemを書いています。Beanstalk対DB

これは、サーバAの1つのプロセスがサーバBのBeanstalkキューにジョブを入れ、サーバBのログ処理がそれを取り出してサーバBのmysql DBに書き込みます。

これが価値があるかどうか知りたいですか? DBへの書き込みよりも速くBeanstalkキューにジョブを投入しています。または、私のプロセスは、DBにログを記録したいのではなく、ログ記録プロセスを使用する代わりにDBに直接書き込むことができます。

beanstalkサーバーとDBの両方が別のサーバーにあることに注意してください。

Beanstalkは、内部的にサーバーAからサーバーBへのソケット呼び出しを行います。 mysqlも同じように処理する必要があると思いますか?

したがって、別のサーバへのmysqlは、beanstalkキューに入れるよりも遅くなるでしょう。

答えて

4

Beanstalkdのジョブがデフォルトでare stored in-memoryであり、サーバーの電源が落ちるなどの損失が発生した場合、MySQLは強くACID準拠のリレーショナルデータベースであるため、たくさんの努力をして、それぞれのログをディスクにフラッシュします。

多くのログがシステムによって作成されているベンチマークの後、そのディスクI/OがTCP/IPソケットの速度ではなく、制限要因になると思います。あなたの現在のシステムの利点は、サーバAがサーバBのbeanstalkdインスタンスにログを記録するときにサーバAの時間をほとんど占めることがなく、サーバBが定期的に多くのログをBeanstalkdからMySQLに定期的にフラッシュしてプロセスを効率的にすることです。欠点は、ディスクに書き込むことで耐久性のあるBeanstalkdの "-b"パラメータを使用しない限り、ログをバッチアップするほど、ソフトウェア/電源障害が発生した場合に失われるログが増えることですプロセスを遅くする)。

もちろん、この質問を真に解決する唯一の方法は、ベンチマークです!

関連する問題