1

の人工呼吸器/シンク スキームpythonに似たアプリを構築するために使用したいzeroMQ

10 個の Workersがあり、すべてが同じマルチコアサーバーで実行されているとします。

約2[秒]ごとに、各ワーカーがサイズ 5[MB] のメッセージをシンクにプッシュするとします。つまり、Sinkは2[sec]ごとに合計 50[MB] ( = 10 x 5[MB] ) を処理する必要があります。

10 個のワーカーが別のマシンにあったとしたら、ネットワークがボトルネックになる可能性があったことはわかっています。

10 人のワーカーがデータをディスクに書き込む (I/O)必要があった場合、ディスクがボトルネックになる可能性があることはわかっています。

10 個のワーカーすべてが同じマシン上にあるという事実を考えると、どのようなボトルネックが予想されるでしょうか?

たとえば、同じ10 個のワーカーが、サイズ 10[MB] のメッセージを2[sec]ごとにプッシュできるでしょうか? サイズが 20[MB] のメッセージを2[sec]ごとにプッシュできますか?

zmqの制限事項は何ですか?

環境内で使用する場合python、どのような種類のボトルネックが予想されますか?zeroMQLinux

4

1 に答える 1

2

PUSH同じサーバーで/を使用PULLすると、raid アレイへの書き込みを 400MB/秒で最大にすることができました (書き込み速度がボトルネックになっています)。ここに 10GbE ベンチマークの結果があります。いくつかの簡単なベンチマークを作成することをお勧めします。パフォーマンスは、メッセージの形式、サイズなどの多くの要因に依存します。

たとえば、完全に自明なベンチマークは、私のマシンで 12.3 ミリ秒で 100 MB のメッセージを 100 個送信できる zeromq を示しています。

# server
import zmq

context = zmq.Context()
reciever = context.socket(zmq.PULL)
reciever.bind('tcp://127.0.0.1:5555')

while True:
    reciever.recv()

# client
import os, zmq

context = zmq.Context()
pusher = context.socket(zmq.PUSH)
pusher.connect('tcp://127.0.0.1:5555')

message = ' ' * 10485760

>>> %timeit pusher.send(message)
100 loops, best of 3: 12.3 ms per loop
于 2011-07-15T01:54:57.073 に答える