认为区分“集中式代理”架构(该代理可能成为/成为单点故障)和每台机器上基于 DDS-QoS 管理流量的服务/守护程序(例如重要性)确实很好(DDS:传输优先级)和紧迫性(DDS:延迟预算)。
有趣的是,大多数人认为在将 CPU 作为关键/共享资源(基于时间片、优先级等)管理的机器上拥有一个(实时)进程调度程序是绝对必要的,但是当它谈到 DDS,这完全是关于分发信息(而不是处理应用程序代码),人们发现“网络调度程序”会出现在“方便”(最少)来管理网络(-接口)作为共享资源并调度流量(基于 QoS 策略驱动的“打包”和多个流量形状的优先级通道的利用)。
这正是 OpenSplice 在利用其(可选)联合架构模式时所做的,在这种模式下,在单台机器上运行的多个应用程序可以使用共享内存段共享数据,并且每个物理网络都有一个网络服务(守护进程) -根据其实际 QoS 策略的紧迫性和重要性来调度入站和出站流量的接口。这样的服务可以“访问”所有节点信息这一事实也有助于将来自不同应用程序的不同主题的不同样本组合成(可能很大的)UDP 帧,甚至可能利用一些可用的延迟预算来进行这种“打包”和从而允许在效率(吞吐量)和确定性(延迟/抖动)之间进行适当的平衡。priority-lanes ' 带有 'private' Rx/Tx 线程和 DIFSERV 设置。
因此,每个节点都有一个网络调度守护进程肯定有一些优势(也因为它将网络与可能“过度生产”(即炸毁系统)或“反应不足”导致系统范围内重新传输的故障应用程序分离.. 在争论“网络调度守护进程”可以被视为“单点故障”这一事实时经常被遗忘的一个方面,而“其他观点”可能是没有任何仲裁,任何直接与线路对话的“独立”应用程序可以被视为潜在的系统线程,当它出于任何原因开始出现如上所述的行为不端时。
无论如何......它总是一个有争议的讨论,这就是为什么 OpenSplice DDS(从 v6 开始)支持两种部署模式:联合和非联合(也称为“独立”或“单一进程”)。
希望这有点帮助。