iceoryx(冰羚)-Service Discovery

Service Discovery

Summary and problem description

IPC通道(例如消息队列或UNIX域套接字)上的服务发现是不可执行的,因为传输的数据较大,这可能会导致多个帧的传输。如果发现大量高频服务,例如在启动时,IPC通道可能会成为瓶颈。

Status quo in iceoryx v1.0 (Almond)(iceoryx v1.0的现状(Almond)

Runtime
  • iox::expected<InstanceContainer, FindServiceError> PoshRuntime::findService(capro::ServiceDescription)
    • Sends message over IPC channel
RouDi
  • runtime::IpcMessage{ProcessManager,PortManager}::findService(caper::ServiceDescription)

    • 在RouDi收到来自运行时的请求后调用

    • 通过IPC通道将应答发送回“PoshRuntime”

Requirements

  • 用户界面应具有轮询和推送通知界面。

  • 请求/响应和发布/订阅主题应由用户发现和区分。

  • 必须保证用户不会破坏服务发现

    • 通过获取服务发现通信所需的内存块
    • 通过发送关于用户创建的服务的虚假服务发现信息
  • 应提供C接口

  • 内存开销应该最小,以便在各种环境中启用此功能

  • 性能应针对默认用例进行优化,在默认用例中,大多数服务都是在启动时创建的,并且在运行时服务发现的变化最小。

  • 在不影响系统的情况下,每个应用程序都可以同时使用服务发现。

Static discovery Design Draft(静态发现设计草案)

  • 应支持静态发现
    • 启动时,RouDi读取一个配置文件,其中包含
      • 所有主题(发布/订阅)
      • 所有服务(请求/响应)
    • 共享内存管理段由RouDi预先配置,并且已经包含所有硬连接的发布者、订阅者、服务器和客户端端口,并且应用程序获取这些预先创建和连接的端口。
  • ServiceRegistry创建抽象接口
    • 将新类添加到StaticServiceRegistry::StaticServicesRegistry(std::map<CaproIdString_t,instance_t>map)

      • 基于通知的回调只调用一次,并且用户获得完整的服务注册表

      • 使用“FindService()”进行轮询将始终返回相同的结果

    • 另一种选择是在初始化阶段之后使用“finalize()”方法

Alternative D: Discovery Class + Listener

在RouDi中创建一个发送“ServiceRegistryTopic”的新发布者。此发布者将用于发出服务注册表中的更改信号,并传输服务发现注册表。完整的旧服务注册表(保存在本地)将与新类中的新服务注册表进行比较,从而扩展公共用户API。
在RouDi中创建一个发送“ServiceRegistryTopic”的新发布者。此发布者将用于发出服务注册表中的更改信号,并传输服务发现注册表。完整的旧服务注册表(保存在本地)将与新类中的新服务注册表进行比较,从而扩展公共用户API。

在这里插入图片描述
在这里插入图片描述Pro:

  • 用于基于事件和同步请求的简单一致的用户API
    • “findService”的筛选可以在新类中完成
  • 不需要变化计数器,因为通过POSH机制解决了ABA问题
  • 不仅传输服务注册表的增量,还传输完整的服务注册表信息
  • 快速数据传输
  • 接近DDS机制
  • 无法替换“接口端口”

Con:

  • New publisher in RouDi needed
  • Memory consumption is high through to traditional pub/sub(通过传统的pub/sub,内存消耗很高)

注:

  • 为了避免自定义用户配置的内存池出现内存不足问题或访问权限问题,发布者应写入iceoryx_management段(内省发布者也是如此)
Alternative E: Introduce new StatusPort/ConfigPort/BroadcastPort

传统的发布者和订阅者没有针对发送不经常或从不更改的数据(例如参数、配置或内省数据)进行优化。在传统的发布者和订阅者被重新用作“StatusPort”的情况下,就像在备选方案D中一样,内存消耗很高,并且在某些情况下很少需要(比如启动)。因此,应引入一类新的端口,称为“StatusPort”。在内部,只能使用两个内存块,类似于“iox::concurrent::TACO”,使用ABA计数器检查作者是否在阅读时进行了写作(弗兰肯斯坦对象)。读者应将ServiceRegistryTopic从共享存储器复制到本地副本。仅支持可复制的琐碎数据。客户端数据不应直接访问,而应通过lambda访问。
Pro:

  • “StatusPort”可用于在两个安全域(例如ASIL-B和ASIL-D)之间进行通信,因为订阅者只需要读取访问而不需要写入访问
  • 重新使用“StatusPort”进行内省2.0、心跳/保持活动和发送静态配置
  • 使用共享内存实现快速数据传输
  • 无法替换“接口端口”
  • 不仅传输服务注册表的增量,还传输完整的服务注册表信息
  • 用于基于事件和同步请求的简单一致的用户API
    • “findService”的筛选可以在新类中完成
      Con:
  • 新类,需要RouDi基础设施集成(例如请求此端口)
  • 复制是必要的
  • 如果编写器更新太频繁,而读取器从未完成读取,则可能会出现饥饿(这是一个常见的无锁问题,应通过良好的文档进行处理)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145511.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jetson配置笔记

typora-root-url: /home/msj/ubuntu笔记本台式机环境配置说明/images Ubuntu18.04 配置 说明&#xff1a;我们所有文档配置都是按照ubuntu18.04&#xff0c;保证x86架构(笔记本台式机)和 ARM架构(jetson Nano只能安装18.04)的一致性 1. 更换各类源 我们所有源都更换清华源&a…

【教学类-07-08】20231114《破译电话号码-图形篇(图形固定列不重复)》(大4班 有名字 有班级 无学号、零=0)

效果展示 背景需求&#xff1a; 最近大4班做“嵌套骰子”非常频繁&#xff0c;为了避免“疲劳”&#xff0c;我找出他们班家长的手机号&#xff0c;批量做了“破译电话号码”&#xff0c;有图案版和加减法版&#xff0c;考虑到第一次做&#xff0c;还是选最简单的“点数总数&a…

C++算法:全 O(1) 的数据结构

题目 请你设计一个用于存储字符串计数的数据结构&#xff0c;并能够返回计数最小和最大的字符串。 实现 AllOne 类&#xff1a; AllOne() 初始化数据结构的对象。 inc(String key) 字符串 key 的计数增加 1 。如果数据结构中尚不存在 key &#xff0c;那么插入计数为 1 的 key…

蒙特卡洛树搜索(Monte Carlo Tree Search)揭秘

一. 什么是蒙特卡洛树搜索 蒙特卡洛树搜索(MCTS)是一种启发式搜索算法&#xff0c;一般用在棋牌游戏中&#xff0c;如围棋、西洋棋、象棋、黑白棋、德州扑克等。MCTS与人工神经网络结合&#xff0c;可发挥巨大的作用&#xff0c;典型的例子是2016年的AlphaGo&#xff0c;以4:1…

压测工具主要功能是什么?该怎样选择?

压测工具是一类用于模拟并评估系统在不同负载条件下的性能的软件应用程序。通过模拟大量用户同时访问系统&#xff0c;压测工具能够帮助开发者识别系统的瓶颈、性能瓶颈以及潜在的故障点。这种实时、模拟的方式允许开发者在正式投入使用之前发现并解决问题&#xff0c;提高系统…

MySQL8 绿色版安装

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; MySQL学习 ✨特色专栏&#xff1a; My…

数据结构线性表——队列

前言&#xff1a;哈喽小伙伴们&#xff0c;这篇文章我们继续来学习线性表的第五章——队列。 世上无难事&#xff0c;只怕有心人。数据结构看似有很多种类型&#xff0c;但是它们之间都有着千丝万缕的联系。 只要我们能够耐心学习思考&#xff0c;就一定能够将知识串通起来&a…

一例plugx样本的分析(AcroRd32cWP)

这是一例plugx的样本&#xff0c;使用了一个合法签名的程序 &#xff0c;使用侧加载的方式加载一个恶意的dll&#xff0c;解密一个dat文件来&#xff0c;在内存中执行一个反射型dll来完成恶意功能。 这个病毒会使用摆渡的方式的来窃取内网的文档数据&#xff0c;具有严重的失泄…

c语言11周(16~20)

利用函数求和 //只填写要求的函数 double fun(int n) {double s 0;int i;for (i 1; i < n; i) {s 1.0 / (i * i);}return s; } 编写char fun(char c)函数&#xff0c;将数字参数字符c按如下规则转换。 题干编写char fun(char c)函数&#xff0c;将数字参数字符c按如…

YOLO目标检测——苹果数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;监测果园中苹果的生长情况、水果品质监控、自动化分拣数据集说明&#xff1a;苹果检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(…

《视觉SLAM十四讲》-- 后端 1(上)

文章目录 08 后端 18.1 概述8.1.1 状态估计的概率解释8.1.2 线性系统和卡尔曼滤波&#xff08;KF&#xff09;8.1.3 非线性系统和扩展卡尔曼滤波&#xff08;EKF&#xff09;8.1.4 小结 08 后端 1 前端视觉里程计可以给出一个短时间内的轨迹和地图&#xff0c;但由于不可避免的…

项目经理为什么要考PMP?PMP考试条件有哪些?

考得PMP&#xff0c;项目经理可以有以下收获&#xff1a; 1、面试条件上&#xff1a;有PMP证书优先&#xff1b; 2、覆盖行业和职位范围广&#xff0c;医疗&#xff0c;互联网&#xff0c;机械&#xff0c;建筑金融&#xff0c;汽车&#xff0c;零售等各行各业&#xff0c;基…

【FastCAE源码阅读9】鼠标框选网格、节点的实现

一、VTK的框选支持类vtkInteractorStyleRubberBandPick FastCAE的鼠标事件交互类是PropPickerInteractionStyle&#xff0c;它扩展自vtkInteractorStyleRubberBandPick。vtkInteractorStyleRubberBandPick类可以实现鼠标框选物体&#xff0c;默认情况下按下键盘r键开启框选模式…

qt之扫码枪编码自动识别文本

一、前言 使用扫码枪输入扫码后&#xff0c;自动将编码转为文字或识别进入下一功能。 只是简单的实现了一种方式&#xff0c;并不适用于商业用途 二、环境 扫码枪免驱自动扫码编码打印到输入库的环境下 三、正文 本文介绍也是输入一种方式&#xff0c;不限于非得扫码识别…

YOLO-NAS:最高效的目标检测算法之一

YOLO-NAS目标检测 介绍 YOLO&#xff08;You Only Look Once&#xff09;是一种目标检测算法&#xff0c;它使用深度神经网络模型&#xff0c;特别是卷积神经网络&#xff0c;来实时检测和分类对象。该算法首次在2016年的论文《You Only Look Once&#xff1a;统一的实时目标检…

【Proteus仿真】【51单片机】拔河游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、动态数码管模块等。 主要功能&#xff1a; 系统运行后&#xff0c;指示灯处于中间位置&#xff0c;数码管显示得分0&#xff0c;当按下…

c++范围for语句

语法格式 for(declaration:expression)statement 基本使用 遍历输出 vector<int> nums { 1,2,3,4,5}; for (int num : nums) {num;cout << num << " "; } cout << endl; 遍历时修改 vector<int> nums { 1,2,3,4,5}; for (int&…

Android 布局优化,看过来 ~

屏幕刷新机制 基本概念 刷新率&#xff1a;屏幕每秒刷新的次数&#xff0c;单位是 Hz&#xff0c;例如 60Hz&#xff0c;刷新率取决于硬件的固定参数。帧率&#xff1a;GPU 在一秒内绘制操作的帧数&#xff0c;单位是 fps。Android 采用的是 60fps&#xff0c;即每秒 GPU 最多…

[文件读取]cuberite 文件读取 (CVE-2019-15516)

1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…

苍穹外卖项目笔记(1)

前言 苍穹外卖项目笔记附代码&#xff0c;贴上 github 链接&#xff0c;持续更新中&#xff1a;GitHub - Echo0701/sky-take-out &#xff08;不知道为啥发不了项目压缩包&#xff0c;那就下次再试试吧........&#xff09; 1 软件开发整体介绍 1.1 软件开发流程 1.2 角色分…