0

Beanstalk キューからジョブを取り出して DB に書き込むだけの db logging ruby​​ gem を作成しています。

これは、サーバー A の 1 つのプロセスが (ログに記録したい) ジョブをサーバー B の Beanstalk キューに入れ、サーバー B のログ プロセスがそれを取り出して、サーバー B の mysql DB に書き込むというものです。

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

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

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

したがって、別のサーバーへの mysql は、Beanstalk キューに入れるよりも遅くなります。

4

1 に答える 1

4

主に、Beanstalkd ジョブはデフォルトでメモリ内に保存され、たとえばサーバーの電源が失われた場合に失われるため、はるかに高速になりますが、MySQL は強力な ACID 準拠のリレーショナル データベースであるため、多くの労力を費やして、各ログをディスクにフラッシュします。

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

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

于 2011-08-13T08:38:21.420 に答える