【发布时间】:2020-11-10 23:09:09
【问题描述】:
我在一个应用程序中有一个ROUTER-socket,多个DEALER-sockets 在不同的应用程序中连接到。我希望ROUTER 尽可能强大。
这是我想在ROUTER 上处理好的特定场景:
- 1000-s of
DEALER-s 连接到ROUTER - 每个
DEALER向ROUTER发送一个请求,而不是使ROUTER向DEALER发送一个大响应 -
DEALER-s 不读取响应,而是立即重复第二步
我在ROUTER 上看到的一种行为:它为响应创建了大量非常大的 ZeroMQ 消息,然后将 zmq 发送回DEALER。 ZeroMQ 负责在消息实际发送时重新分配消息。由于DEALER-s 从不调用recv(),ZeroMQ 会永久保存消息,内存会慢慢“泄漏”,直到 O/S 在内存不足时终止进程。
我使用的一些选项有帮助:
ZMQ_SNDHWM :限制我们在传出队列中只为每个DEALER 保存 N 条消息,但并不理想,因为ROUTER 将在队列已满时丢弃传出消息
ZMQ_SNDTIMEO : ZeroMQ 将在 N 毫秒后丢弃消息,没有成功发送
指定这些选项后,如果打开了 1000 个 DEALER 连接,仍然有可能使 ROUTER 崩溃,因为高水位标记是针对每个客户端应用的。
我可以使用其他选项来防止客户端请求使我崩溃吗?
【问题讨论】:
标签: zeromq distributed-computing low-latency