我正在考虑在使用 RT-PREEMPT(使其实时)修补的 Linux 内核上将 ZeroMQ 设置为消息代理。
基本上我想发布/订阅使用谷歌 Protocol Buffer 序列化的短事件。
1. Event Model Object (App #1) --->
2. Serialize Google protobuf --->
3. ZeroMQ --->
4. Deserialize Google protobuf -->
5. Event Model object (App #2)
从#1 到#5,也许回到#1,Linux RT-PREEMPT 的实时保证将如何受到 ZeroMQ 的影响?
我专门寻找 ZeroMQ 的实时功能。它是否提供此类保证?
为了正确看待这个问题,假设我想知道 ZeroMQ 是否值得部署在弹道导弹防御系统或波音 777 自动驾驶仪等时间关键型系统上。
最佳答案
首先,PREEMPT_RT 减少了任务的最大延迟,但整体系统吞吐量会降低,平均延迟可能会更高。
实时是一个广泛的主题;为避免混淆,我对实时的定义是每帧以 30hz 或更高频率运行数十毫秒。
Does it provide such (real time features) guarantees?
正如已经回答的那样,不,它不是,这不是 PREEMPT_RT 的真正意义。
Is ZeroMQ worthy of deploying on time critical systems?
时间紧迫是一个宽松的定义;但是具有正确设计的协议(protocol)的 ZeroMQ 将为您提供消息传输方式(内存、TCP、UDP/多播)的选项,并且请放心,ZeroMQ 确实做得很好。
IME ZeroMQ 通常在本地高速网络上交付速度很快 - 但如果您使用的是宽网络,这个数字会下降,并且这个数字可能会随着端点的增加而增加,具体取决于您在 ZeroMQ 中使用的模型。
对于实时系统,不仅仅是传输速度,还需要考虑延迟和时间同步。
值得一读的文章0MQ: Measuring messaging performance - 请注意,在消息传输开始时有一个高延迟(1.5 毫秒),该延迟很快就会稳定下来 - 如果您需要以高频率传输大量小消息,这可能很好 - 如果您正在传输一些较大的消息,则效果不佳以较低的速度。
is ZeroMQ is worthy of deploying on time critical systems such as Ballistic Missile Defense or Boeing 777 autopilot.
重要的是要了解您正在连接的拓扑结构以及延迟将如何影响事物并相应地设计协议(protocol)。
所以以 777 自动驾驶仪为例——几乎可以肯定,ZeroMQ 是合适的,因为稳定的飞机有很大的惯性,所以机身需要时间来响应,而聪明之处在于自动驾驶仪,而不是这样很大程度上依赖于高速传入的传感器数据。在 777 上有一个连接航空电子设备的 Arinc 429 总线,它在任何给定总线上的有限数量的端点之间以最大 100kbit/s 的速度运行。
关于linux - 带有 RT Linux(RT-PREEMPT 补丁)的 ZeroMQ 是实时的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298715/