DDS中间件设计

OpenDDS、FastDDS数据分发服务中间件设计

软件架构

  • 应用层
  • DDS层
  • RTPS层
  • 传输层

软件层次

FastDDS整体架构如下,这里可以看到DDS和RTPS的关系。另外缺少一部分IDL(统一描述语言),其应该是Pub、Sub的反序列化、序列化工具。

在RTPS层,主角是Writer&Reader,其接口复杂和灵活。DDS层,主角是Publisher&Subscriber。

执行模型

FastDDS中每个节点(也叫 DomainParticipant)具有:

  • 一个 主程序线程(用户持有)
  • 一个 事件和周期性任务的线程
  • 一个 异步发送线程,用于用户完成写入数据后,异步得完成网络通信
  • 多个 接收线程,每个reception channel,取决于传输层的实现方式

网络传输

在传输上,Fast-RTPS支持以下五种传输方式:

  • UDPv4
  • UDPv6
  • TCPv4
  • TCPv6
  • SHM(共享内存)

当 Participant 创建时,会自动的配置两个传输通道:

  • SHM:使用同一个机器上的参与者通信
  • UDPv4:同来与跨机器的参与者通信

RTPS的通信SHM实现

在同一Host中,RTPS会采用更高效的SHM(shared memory)方式在participant间共享信息。这里有三个实现版本:

  1. 共享内存传输 Shared Memory Transport (基本本版)
  2. 数据共享交付 Data Sharing Delivery
  3. 零拷贝 ZERO-COPY communication

上面的图中可见,通过减低Writer、Reader中对消息的备份减少内存的copy。可预见的,越高共享的内存实现越依赖通信同步机制。最终的zero copy方案直接预设A、B节点能实现完美的读写交错。

实际的自动驾驶场景,zero copy是十分必要的。

下图描述的是FastRTPS中的节点使用zero copy的实现。

底层实现原理

低延时、高吞吐量

  • UDP传输
  • 共享内存技术、零拷贝等技术

稳定性

  • 主从负载均衡原理

下面是FastDDS的负载均衡原理的工作流程:

  1. 主节点选举:在FastDDS中,一个节点被选为主节点,它负责协调数据传输以及任务的分发。主节点的选举可能基于配置文件、节点优先级或其他条件。
  2. 从节点注册:通过与主节点建立连接,从节点向主节点注册自己的存在。从节点可以提供资源(例如CPU、内存)的信息,以便主节点进行任务分配时考虑。
  3. 任务分配:当主节点收到发布者的消息后,它会根据当前系统的状态和从节点的资源情况,确定将数据发送给哪些从节点。
  4. 数据传输:主节点将数据分发给各个从节点,并确保数据的可靠传输。每个从节点负责接收并处理它们所分配到的数据。
  5. 状态监控和更新:主节点定期监控各个从节点的状态,包括资源利用率、延迟等。根据这些状态信息,主节点可以动态地重新分配任务,实现动态的负载均衡。
  6. 故障处理和容错:如果主节点发生故障或失去连接,FastDDS系统会根据事先定义的容错策略重新选择一个新的主节点。这样能够保证系统的连续性和可靠性。

参考文献

了解FastDDS、FastRTPS 的底层实现原理 - 知乎 (zhihu.com)

1. Getting Started --- Fast DDS 2.12.0 documentation (eprosima.com)

【linux】图文并茂|彻底搞懂零拷贝(Zero-Copy)技术 - 知乎 (zhihu.com)

相关推荐
fantasy5_511 小时前
从零手写线程池:把多线程、锁、同步、日志讲透
开发语言·c++·中间件
heimeiyingwang15 小时前
【架构实战】海量数据存储:分库分表中间件实战
中间件·架构
别抢我的锅包肉15 小时前
【FastAPI】 依赖注入 + 中间件详解
中间件·fastapi
敢敢のwings15 小时前
ROS2通信中间件深度解析:从DDS到下一代传输架构整理
中间件·架构
理人综艺好会16 小时前
路由中间件快速了解(Gin版)
中间件·gin
lifewange2 天前
MQ中间件是什么
中间件
小邓的技术笔记2 天前
聊聊 ASP.NET Core 中间件和过滤器的区别
后端·中间件·asp.net
8Qi83 天前
微服务通信:同步 vs 异步与MQ选型指南
java·分布式·微服务·云原生·中间件·架构·rabbitmq
初中就开始混世的大魔王4 天前
3.2 DDS 层-Domain
开发语言·c++·中间件
2601_949814174 天前
docker离线安装及部署各类中间件(x86系统架构)
docker·中间件·系统架构