创建多个ZeroMQ套接字的开销是多少?

时间:2018-02-12 08:51:16

标签: sockets performance-testing zeromq distributed-system

我尝试使用 ZMQ_PAIR 套接字构建点对点频道。但ZMQ_PAIR套接字仅允许独占连接,这意味着如果一个对等体(A)连接到另一个对等体(B),则其他对等体无法连接到B,直到A与B断开连接。

因此,我想到的第一个解决方案是设置与网络中对等方数量一样多的ZMQ_PAIR个套接字,并轮询套接字以复用来自其他对等方的事件。这样做的问题是管理大量可能产生不可忽视的开销的套接字。

但是我没有关于管理多个套接字的开销的实验数据,例如创建50,000个ZMQ_PAIR套接字的时间或者轮询50,000个ZMQ_PAIR套接字的时间。当然,我可以自己做,但我想知道是否有使用ZeroMQ的研究人员或网络开发人员进行的任何现有实验。

(我不想要任何代理或REQ/REP模式。使用代理会导致一些性能下降,我想要纯粹的点对点网络。REQ/REP模式本质上是同步通信,而不是我现在的目的。)

1 个答案:

答案 0 :(得分:1)

一般来说,这不是一个容易思考的实验。

在作出决定前绝对是基准。

ZeroMQ拥有自己的简易智能时钟工具, Stopwatch() 。每个实例都有 .start() .stop() 方法,因此您的代码可以独立地对每个关键部分进行基准测试,最多可以 {{1} 分辨率,所以你准备好了。

可以合理地开始设置并首先对一些1,10,20,50,100,200个实例进行基准测试,从而在从头开始解决50k +大小的网格之前,有进一步缩放观察到的行为的合理基础。

[us] -domain(内存分配)和 [SPACE] -domain非线性都会很重,因为比例是将会扩展到50k +级别。

下一个问题来自非均质运输级混合物。 [TIME] 将拥有最少的开销,而某些L3 +传输协议将需要更大的开销,而不是其他。

有人可能会喜欢测试 inproc:// ,因为它具有 nanomsg 可扩展的正式通信原型,可以更好地满足需求。< / p>