我想使用python
构建一个类似于zeroMQ
's ventilator / sink scheme的应用
假设我们有 10名工作人员,所有人都在同一个多核服务器上运行。
假设每个 2 [sec] 左右,每个工作人员都会向接收器推送一个大小为5 [MB]的消息。因此,接收器必须每 2 [sec] 左右处理总共50 [MB](= 10 x 5 [MB])。
如果10名工作人员在不同的计算机上,我知道网络可能是潜在的瓶颈。
如果10 Workers 必须将他们的数据写入磁盘(I / O),我知道 磁盘可能是潜在的瓶颈。
鉴于所有 10名工人
例如,相同的 10名工作人员每个 2 [sec] 的每个人都可以推送大小为10 [MB]的邮件吗? 他们可以每隔 2 [sec] 推送大小为20 [MB]的消息吗?
zmq
的限制是什么?
在python
环境中使用zeroMQ
和Linux
时应该会遇到哪些类型的瓶颈?
答案 0 :(得分:2)
在同一台服务器上使用PUSH
/ PULL
我已经能够最大限度地写入raid阵列@ 400MB / sec(写入速度瓶颈)。有10GbE基准测试结果here。我建议构建一些简单的基准测试,性能将取决于许多因素,如消息格式,大小等。
例如,一个完全无关紧要的基准测试显示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