1

我想python用来构建一个类似于zeroMQ呼吸机/水槽方案的应用程序

假设我们有10 个 Worker,它们都运行在同一个多核服务器上。

假设每2[sec]左右,每个WorkerSink推送一条大小为 5[MB] 的消息。因此,Sink必须每2[sec]左右处理总共 50[MB] (= 10 x 5[MB] )的数据。

如果这 10 个工人在不同的机器上,我知道网络可能是一个潜在的瓶颈。

如果这 10 个工人必须将他们的数据写入磁盘 (I/O),我知道磁盘可能是一个潜在的瓶颈。

鉴于所有10 名工人同一台机器上,人们应该期待什么瓶颈?

例如,相同的10 个 Worker可以每2[sec]左右推送一条大小为 10[MB] 的消息吗?他们可以每2[sec]左右推送一条大小为 20[MB] 的消息吗?

有什么zmq限制?

在环境中使用python和使用时会遇到哪些类型的瓶颈?zeroMQLinux

4

1 回答 1

2

在同一台服务器上使用PUSH/PULL我已经能够以 400MB/秒的速度最大限度地写入一个 RAID 阵列(写入速度瓶颈)。这里有 10GbE 基准测试结果。我建议构建一些简单的基准,性能将取决于许多因素,如消息格式、大小等。

例如,一个完全简单的基准测试显示 zeromq 能够在我的机器上在 12.3 毫秒内发送 100 条 10mb 消息:

# 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 回答