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]左右的消息,使用与您类似的代码。服务器上似乎没有接收到某些消息;它们已发送,但我看不到它们已收到。这是为什么?您可能想使用推送
/拉取
(或您使用的任何工具)询问另一个有关丢失邮件的问题。