Zmq随机recv和回复

时间:2014-09-26 04:43:43

标签: c++ zeromq

我有两个关于Zmq的问题: -

1)我正在实现一个服务器,它将每分钟接收10K请求,然后将这些请求重定向到后端。从后端获得响应后,它将发回响应。我无法使用请求/回复作为此模式中的限制,recv / reply应该是同步的。任何人都可以建议我在这种情况下使用什么。

2)我是否还需要实现多线程。

提前致谢。

2 个答案:

答案 0 :(得分:1)

首先让我回答一下 Q1 - 要求对性能& Q2 - 如果需要多线程:

什么是ZeroMQ传输开销时间?

从琐碎的性能测试中,故意添加TCP传输包装开销, 您可以根据发送的消息在[usec]中品尝ZeroMQ消息处理层的“成本”。

                         21.936  [usec]/MSG
                        111.280  [usec]/MSG
                         39.714  [usec]/MSG
                         37.080  [usec]/MSG
                         11.351  [usec]/MSG

要了解消息批量大小影响缓解,请阅读带有growin size的重新测试

>>> [ sender( nBatchSIZE = x ) for x in ( 1, 10, 100, 1000, 10000, 100000, 1000000 ) ]

sent       1 ... RUN took:       58  [usec] i.e.  58.0  [usec]/MSG
sent      10 ... RUN took:      156  [usec] i.e.  15.6  [usec]/MSG
sent     100 ... RUN took:     1071  [usec] i.e.  10.7  [usec]/MSG
sent    1000 ... RUN took:    10561  [usec] i.e.  10.5  [usec]/MSG
sent   10000 ... RUN took:   106478  [usec] i.e.  10.6  [usec]/MSG
sent  100000 ... RUN took:  1333242  [usec] i.e.  13.3  [usec]/MSG

根据这些数据,您的 Q1 系统在合理大小的MSG(不提及多GB BLOB)上的10k / min事件流没有问题

处理性能因此受到后端阶段的限制

建议 Q2 - 使用什么

REQ/REP因此不在表中。因此,尝试考虑任何性能可扩展的方法来提高您的端到端处理能力 - 而不是多线程 - 使用更高级的方案来实现负载均衡器REQ/ROUTER||ROUTER/REQ等,你可能都会提高处理速度并增加一些故障解决功能。检查Single- & Multi-Cluster Architectures

中的样本平凡结构

答案 1 :(得分:0)

对于您的消息量,它完全与消息大小有关。假设大概"典型"消息大小(通常说高达几百个字节)和一个可以处理吞吐量的系统(例如,如果您要预先加载消息而不是使用ZMQ接收它们,它是否会足够有效地处理您的消息量?),然后你不会以10k /分钟的速度打破汗水。你可能每秒都这样做(正如你在其他答案中看到的那样)。

ZMQ将支持您正在寻找的任何消息模式,但您必须提供更多信息以确定哪种模式最适合您。 the guide中有很多很好的例子。