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基础设施集成(例如请求此端口)
  • 复制是必要的
  • 如果编写器更新太频繁,而读取器从未完成读取,则可能会出现饥饿(这是一个常见的无锁问题,应通过良好的文档进行处理)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSDN每日一题学习训练——Java版(字符串相乘、子集、删除链表的倒数第 N 个结点)

版本说明 当前版本号[20231112]。 版本修改说明20231112初版 目录 文章目录 版本说明目录字符串相乘题目解题思路代码思路补充说明参考代码 子集题目解题思路代码思路参考代码 删除链表的倒数第 N 个结点题目解题思路代码思路参考代码 字符串相乘 题目 给定两个以字符串形…

光刻机ASML CYMER光电模块组件维修114122,S111310

1&#xff1a;436nm g-line 可以满足0.8-0.35 微米制程芯片的生产&#xff0c;对应设备有接触式和接近式光刻机。 2&#xff1a;365nm i-line 同样可以满足0.8~0.35微米制程芯片的生产。设备于上相同。 早期的光刻机采用接触式光刻&#xff0c;即掩模贴在硅片上进行光刻&…

【MongoDB】索引 – 通配符索引

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

C语言--数组的长度计算【详细解释】

一.数组的长度计算公式 我们都知道字符串有特定的函数strlen,而数组没有&#xff0c;&#xff08;虽然字符串也是一种特殊的数组&#xff09; 但是&#xff0c;类似于这样的数组&#xff1a; int arr[]{12,89,1,5,31,78,45,12,12,0,45,142,21,12}&#xff1b; 我们很难一眼…

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

腾讯云2核4G服务器CVM标准型S5实例租用5年价格表

腾讯云服务器网整理五年云服务器活动 txyfwq.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;睿频…

Transformer模型

目录 1. 概述 2. Model Architecture 2.1 自回归 2.2 编码器与解码器 2.3 Attention 2.4 Attention—mask 2.5 Multi-Head Attention 2.6 自注意力使用 2.7 point-wise feed forward network 2.8 embeddings 2.9 positional Encoding 1. 概述 之前的模型&#xf…

Shiro快速入门之三

一、前言 接Shiro快速入门之二&#xff0c;上篇侧重于介绍认证&#xff0c;这篇介绍一下Shiro的授权&#xff0c;先初始化5张表的数据。 注&#xff1a;创建三条权限记录&#xff0c;一个admin角色分配查询和添加用户权限&#xff0c;一个账户qingcai18036授予管理员角色。 二…

数据结构:串(定义,基本操作,存储结构)

目录 1.串的定义2.串的基本操作3.字符集编码4.串的存储结构1.顺序存储2.链式存储 1.串的定义 串&#xff0c;即字符串( String&#xff09;是由零个或多个字符组成的有限序列。 一般记为s ‘a1a2……an’ (n ≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是…

FCOS难点记录

FCOS 中有计算 特征图&#xff08;Feature map中的每个特征点到gt_box的左、上、右、下的距离&#xff09; 1、特征点到gt_box框的 左、上、右、下距离计算 x coords[:, 0] # h*w&#xff0c;2 即 第一列y coords[:, 1] l_off x[None, :, None] - gt_boxes[..., 0][:, No…

使用U盘安装ubuntu22操作教程

U盘启动 将烧录好的U盘&#xff0c;插上待安装系统的电脑 服务器在开机之后长按【ESC键】进入BIOS选项中&#xff0c;选择对应的U盘启动 如下图&#xff0c;在界面中“USB”选项就是我的U盘&#xff0c;第一启动项选择U盘启动&#xff0c;其他启动项不动&#xff0c;选择后按F…

【推荐】一款AI写作大师、问答、绘画工具-「智元兔 AI」

在当今技术飞速发展的时代&#xff0c;越来越多的领域开始应用人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;。其中&#xff0c;AI写作工具备受瞩目&#xff0c;备受推崇。在众多的选择中&#xff0c;智元兔AI是一款在笔者使用过程中非常有帮助的…