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