我有两个关于Zmq的问题: -
1)我正在实现一个服务器,它将每分钟接收10K请求,然后将这些请求重定向到后端。从后端获得响应后,它将发回响应。我无法使用请求/回复作为此模式中的限制,recv / reply应该是同步的。任何人都可以建议我在这种情况下使用什么。
2)我是否还需要实现多线程。
提前致谢。
答案 0 :(得分:1)
首先让我回答一下 Q1 - 要求对性能& Q2 - 如果需要多线程:
从琐碎的性能测试中,故意添加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中有很多很好的例子。