专业的系统分析甚至可能需要您运行多个Poller()
实例:
根据事实和需求设计系统,而不是听信一些大众化的意见。
实施绩效基准并衡量有关实际实施的细节。将事实与阈值进行比较也称为基于事实的决策。
如果不寻找最后几百个 [ns],典型的场景可能是这样的:
您在事件响应循环中的核心逻辑是处理几类 ZeroMQ 集成信号 / 消息输入/输出,所有这些都以非阻塞模式为主,而且您的设计必须对每个此类类花费特定数量的相对注意力。
人们可能会接受远程键盘的一些更高的进程间延迟(“跨”网络运行 CLI 接口,而您的事件循环必须满足严格要求,不要错过来自 QUOTE 流的任何“新鲜”更新. 所以必须创建一个轻量级的 Real-Time-SCHEDULER 逻辑,这将引入一个Poller()
非阻塞(零等待)的高优先级,另一个对读取“慢”通道进行约 5 ms 测试的另一个一个对读取主数据流管道进行 15 毫秒测试的测试。如果您已将事件处理例程配置为在最坏情况下不超过 5 毫秒,您仍然可以处理 25 毫秒的 TAT,并且您的事件循环可以处理系统要求具有 40 Hz 的稳定控制回路周期。
不使用一组几个“专门的”轮询器将不允许一个人通过易于表达的核心逻辑获得这种级别的调度确定性,以集成到这种主要稳定的控制回路中。
量子点
我使用类似的设计来驱动基于外部 AI/ML 预测器的异构分布式系统进行外汇交易,其中交易时间保持在 ~ 70 毫秒(端到端 TAT,从 QUOTE 到达到 AI/ML由于需要匹配控制环调度要求的实时约束,因此建议提交 XTO 订单指令。
结语:
如果文档说明了轮询器的性能,在 1 kHz 以上的信号传递范围内,但没有提及信号/消息处理过程的持续时间,那么它对公众的服务很差。第一步是测量进程延迟,然后分析性能包络。所有的 ZeroMQ 工具都是为扩展而设计的,应用程序基础设施也是如此——所以忘记任何 SLOC 大小的示例吧,瓶颈不是轮询器实例,而是应用程序对可用 ZeroMQ 组件的不良使用(给定一个已知的性能范围)考虑到)——人们总是可以增加可用的整体处理能力,使用 ZeroMQ,我们从第 0 天开始就处于分布式系统领域,不是吗?
因此,在设计简洁 + 监控 + 自适应缩放的系统中,不会出现窒息现象。