python&;zeroMQ——处理大容量消息的能力?

python&;zeroMQ——处理大容量消息的能力?,python,zeromq,Python,Zeromq,我想使用python构建一个类似于 假设我们有10个worker,它们都运行在同一个多核服务器上 假设每2秒左右,每个工作者向接收器推送一条大小为5[MB]的消息。因此,接收器必须每2秒左右处理50[MB](=10 x 5[MB]) 如果这10名员工在不同的机器上工作,我知道网络可能是一个潜在的瓶颈 如果10名员工必须将数据写入磁盘(I/O),我知道磁盘可能是一个潜在的瓶颈 考虑到所有10名工人都在同一台机器上,我们应该期待什么瓶颈 例如,相同的10个工作者能否每2秒左右推送一条大小为10[MB

我想使用
python
构建一个类似于

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

假设每2秒左右,每个工作者接收器推送一条大小为5[MB]的消息。因此,接收器必须每2秒左右处理50[MB](=10 x 5[MB])

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

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

考虑到所有10名工人都在同一台机器上,我们应该期待什么瓶颈

例如,相同的10个工作者能否每2秒左右推送一条大小为10[MB]的消息? 他们能每2秒左右推送一条大小为20[MB]的消息吗

zmq的限制是什么


Linux
环境中使用
python
zeroMQ
时,人们会遇到什么类型的瓶颈?

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

例如,一个非常简单的基准测试显示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

泽凯,谢谢你。请注意——我的示例不涉及工作人员写入磁盘——只是将数据发送到接收器(这意味着不涉及磁盘)。有什么提示我应该期待什么类型的瓶颈吗?很难说,您可以通过许多与zeromq无关的方式来瓶颈自己。你们的工人在干什么?您是如何构建消息的?你使用什么协议?我将构造一个简单的基准测试,并在您的特定情况下测试性能。根据我的经验,假设消息的构造/处理速度足够快,您可以从单个工作进程每秒传输数百兆字节。我不知道zeromq的性能上限是多少。更新了答案,用一个简单的基准测试演示了zeromq发送10Mb消息的性能。zeekay,谢谢。我尝试使用
zeroMQ
,发送大小为4[MB]左右的消息,使用与您类似的代码。服务器上似乎没有接收到某些消息;它们已发送,但我看不到它们已收到。这是为什么?您可能想使用
推送
/
拉取
(或您使用的任何工具)询问另一个有关丢失邮件的问题。