C++ 用于随机接收和回复的Zmq

C++ 用于随机接收和回复的Zmq,c++,zeromq,C++,Zeromq,关于Zmq,我有两个问题:- 1) 我正在实现一个每分钟接收10K请求的服务器,然后将这些请求重定向到后端。从后端获得响应后,它将返回响应。我不能使用request/reply,因为此模式中的限制是recv/reply应该是同步的。有谁能建议我在这个场景中使用什么 2) 我是否也需要在这种情况下实现多线程 提前感谢。让我首先回答Q1-关于性能的要求和Q2-如果需要多线程: ZeroMQ传输开销时间是多少? 通过琐碎的性能测试,故意增加TCP传输包装开销, 每发送一条消息,您可以在[usec]中体

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

1) 我正在实现一个每分钟接收10K请求的服务器,然后将这些请求重定向到后端。从后端获得响应后,它将返回响应。我不能使用request/reply,因为此模式中的限制是recv/reply应该是同步的。有谁能建议我在这个场景中使用什么

2) 我是否也需要在这种情况下实现多线程


提前感谢。

让我首先回答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
为了了解消息批量大小的影响缓解,让我们阅读“使用增长大小重新测试”

>>> [ 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事件流不会有问题

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

关于第二季度使用什么的建议


因此,
REQ/REP
不在表中。而不是多线程,因此尝试考虑任何性能规模的方法来增加您的“强”端到端处理能力< /强> -使用更先进的负载均衡器方案,如代码> Req/Routh/路由器/Req等,既可以提高处理速度,又可以增加一些故障解决特性。检查

中的示例平凡化结构,查看您的消息量,这与消息大小有关。假设一个大致“典型”的消息大小(比如说几百字节是典型的)和一个能够处理该吞吐量的系统(例如,如果您要预加载消息而不是使用ZMQ接收消息,它会足够有效地处理消息量吗?),那么每分钟10k消息不会让您汗流浃背。你可能每秒钟都会这样做(正如你在另一个答案中看到的)

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