DDS中间件设计

这篇具有很好参考价值的文章主要介绍了DDS中间件设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

软件架构

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

软件层次

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

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

DDS中间件设计,中间件

执行模型

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

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

网络传输

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

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

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

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

DDS中间件设计,中间件

RTPS的通信SHM实现

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

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

DDS中间件设计,中间件

DDS中间件设计,中间件

DDS中间件设计,中间件

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

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

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

DDS中间件设计,中间件

底层实现原理

低延时、高吞吐量

  • 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)文章来源地址https://www.toymoban.com/news/detail-632458.html

到了这里,关于DDS中间件设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【系统架构设计】架构核心知识: 1 构件和中间件

    目录 一 构件 1 构件的特性 2 构件、对象和模块的对比  3 构件的复用

    2024年02月07日
    浏览(29)
  • 【.NET源码解读】深入剖析中间件的设计与实现

    .NET本身就是一个基于中间件(middleware)的框架,它通过一系列的中间件组件来处理HTTP请求和响应。在之前的文章《.NET源码解读kestrel服务器及创建HttpContext对象流程》中,已经通过源码介绍了如何将HTTP数据包转换为.NET的HttpContext对象。接下来,让我们深入了解一下.NET是如何

    2024年02月11日
    浏览(28)
  • Gin框架: 控制器, 中间件的分层设计案例

    对控制器的分组与继承 1 )设计项目目录结构 2 )主程序 main.go 3 ) HTML模板目录配置 tpls/web/index.html 4 ) routers 配置 4.1 webRouters.go 4.2 apiRouters.go 4.2 adminRouters.go 5 ) controller 配置 5.1 web/webCtrl.go 5.2 api/apiCtrl.go 5.3 admin/indexCtrl.go 5.4 admin/baseCtrl.go 5.4 admin/userCtrl.go 以上就是对控制器的一

    2024年02月21日
    浏览(44)
  • 软考高级系统架构设计师(八) 基于中间件的开发&实际项目

    目录 中间件的用途 中间件技术  中间件的特点 中间件的十大优越性  企业应用集成 轻量级架构 Struts框架 spring Hibernate 实际项目举例 产品逻辑大图 gRPC的接口规范 关键中间件交互 整体架构设计 大数据素材底层处理 业务交互大图 底层数据素材加工大图 属于可复用软件的范

    2024年02月11日
    浏览(74)
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记17_中间件、背压和调速器

    2.4.3.1. SMTP和SMS系统通常由人(而不是服务器)充当消息代理,且系统延迟往往很高 2.6.2.1. 相关的实施会波及系统的每个部分 3.5.2.1. 随着时间的推移价值迅速降低的数据,抛弃队列中最先发出的请求可能是最佳选择 3.5.4.1. 一种流量控制手段,允许队列向发送数据包的上游

    2024年02月11日
    浏览(59)
  • 软考高级系统架构设计师系列论文七十三:论中间件在SIM卡应用开发中的作用

    软考高级系统架构设计师:构件与中间件技术 我曾于近期参与过一个基于SIM卡应用的开发项目,并在项目中担任系统分析的工作。 在分析过程中,我们依据面向对象方法对系统进行了划分,其中许多的模块已有成熟的中间件产品可供使用。我们选择中间件产品的标准是:功

    2024年02月11日
    浏览(31)
  • 【中间件】消息中间件之Kafka

    一、概念介绍 Apache Kafka是一个分布式流处理平台,用于构建实时数据管道和流应用。它可以处理网站、应用或其他来源产生的大量数据流,并能实时地将这些数据流传输到另一个系统或应用中进行处理。 核心概念: Topic(主题) :消息的分类,用于区分不同的业务消息。

    2024年01月20日
    浏览(53)
  • 常见的中间件以及什么是中间件

    中间件顾名思义就是系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件在客户服务器的操作系统、网络和数

    2024年02月06日
    浏览(44)
  • scrapy---爬虫中间件和下载中间件

            -进来request对象         -加代理         -加cookie         -加请求头     -出去response对象         -修改响应对象,最后进入到爬虫的parser中就是修改后的response 1.加代理   2.加cookie,修改请求头,随机生成UserAgent         2.1加cookie        2.2 修改请求头

    2024年02月16日
    浏览(54)
  • 探索Scrapy中间件:自定义Selenium中间件实例解析

    Scrapy是一个强大的Python爬虫框架,可用于从网站上抓取数据。本教程将指导你创建自己的Scrapy爬虫。其中,中间件是其重要特性之一,允许开发者在爬取过程中拦截和处理请求与响应,实现个性化的爬虫行为。 本篇博客将深入探讨Scrapy中间件的关键作用,并以一个实例详细介

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包