iceoryx(冰羚)-Service Discovery

news2024/7/6 19:05:43

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.coloradmin.cn/o/1209344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

易点易动固定资产管理系统助您轻松应对复杂的固定资产管理挑战

在现代企业运营中&#xff0c;固定资产是企业的重要财产&#xff0c;对于企业的发展和运营至关重要。然而&#xff0c;随着企业规模的扩大和业务的复杂化&#xff0c;固定资产管理面临着越来越多的挑战。传统的手工管理方法已经无法满足企业的需求&#xff0c;因此&#xff0c;…

Sentinel底层原理(下)

1、概述 Sentinel的核心原理&#xff0c;也就是前面提到暗流涌动的SphU.entry(…)这行代码背后的逻辑。 Sentinel会为每个资源创建一个处理链条&#xff0c;就是一个责任链&#xff0c;第一次访问这个资源的时候创建&#xff0c;之后就一直复用&#xff0c;所以这个处理链条每…

开源软件 FFmpeg 生成模型使用图片数据集

本篇文章聊聊&#xff0c;成就了无数视频软件公司、无数在线视频网站、无数 CDN 云服务厂商的开源软件 ffmpeg。 分享下如何使用它将各种视频或电影文件&#xff0c;转换成上万张图片数据集、壁纸集合&#xff0c;来让下一篇文章中的模型程序“有米下锅”&#xff0c;这个方法…

Genio 700安卓核心板-MT8390安卓核心板规格参数

Genio 700(MT8390)安卓核心板是一款专门针对智能家居、互动零售、工业和商业应用的高性能边缘人工智能物联网平台。它集成了高度响应的边缘处理、先进的多媒体功能、各种传感器和连接选项&#xff0c;并支持多任务操作系统。 )安卓核心板采用高效的芯片内人工智能多处理器(APU)…

Meta开源支持1000多种语言的文本转语音与语音识别大语言模型

据不完全统计,地球上有超过7000多种语言,而现在的大语言模型仅仅只涉及到了主流的100多种语言。相对全球7000多种语言来讲,这仅仅只是其中的一小部分。如何让全球的人获益,把大语言模型扩展到更多的语言上,一直是大语言模型研究的重点。Meta发布了涵盖 1406 种语言的预训练…

缺陷预测(一)——论文复现

运行CGCN文件 问题一&#xff1a;CNN输入维度的问题出现的问题解决问题原因 问题二&#xff1a;mix时&#xff0c;输入的train_in和train_gen.inputs数据格式不一致出现的问题解决问题 最终结果 问题一&#xff1a;CNN输入维度的问题 出现的问题 数据集改好之后&#xff0c;出…

WebStorm配置less编译wxss或css

文章目录 前言先下载安装less程序&#xff1a;实参&#xff1a;要刷新的输出路径成功 前言 使用WebStorm写微信小程序&#xff0c;wxss写着很麻烦&#xff0c;就想着用less&#xff0c;接下来是配置less编译 先下载安装less npm install -g lessless会安装在你当前目录下(以D…

记录第一次

1.看接口 看控制台 报错吗&#xff1f; 控制台 空指针报错 前端控制台 2.找报错 看哪里报的错误&#xff0c;控制台的错误&#xff08;空指针报错&#xff09; 错误问题&#xff1a; 3.分析业务 业务问题 一定要问&#xff0c; 4. 找到出错点

Netty Review - 核心组件扫盲

文章目录 PreNetty Reactor 的工作架构图CodePOMServerClient Netty 重要组件taskQueue任务队列scheduleTaskQueue延时任务队列Future异步机制Bootstrap与ServerBootStrapgroup()channel()option()与childOption()ChannelPipelinebind()优雅地关闭EventLoopGroupChannleChannel…

设置虚拟机静态IP

1、修改配置文件 /etc/sysconfig/network-scripts/ifcfg-ens160 将BOOTPROTOdhcp改为static&#xff0c;天机IPADDR192.168.10.13 2、重启网络服务 systemctl restart network

【算法练习Day47】两个字符串的删除操作编辑距离

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 两个字符串的删除操作编辑距…

Leetcode—122.买卖股票的最佳时机II【中等】

2023每日刷题&#xff08;二十八&#xff09; Leetcode—122.买卖股票的最佳时机II 实现代码 int maxProfit(int* prices, int pricesSize) {int totalProfit 0;if(pricesSize < 1) {return 0;}for(int i 1; i < pricesSize; i) {if(prices[i] - prices[i - 1] > …

劲升逻辑携手山东电子口岸及青岛港,赋能山东港口数字化建设

合作意向书签署现场 2023 年 11 月 11 日&#xff0c;中国山东——跨境贸易数字化领域的领导者劲升逻辑分别与山东省电子口岸有限公司&#xff08;简称“山东电子口岸”&#xff09;、山东港口青岛港子公司青岛港国际集装箱发展有限公司在新加坡-山东经贸理事会&#xff08;简…

【C#学习】常见控件学习

】 如何让Button控件只显示图片 第一步&#xff1a;设置按钮背景图片&#xff0c;并且图片随按钮大小变化 第二步&#xff1a;设置按钮使之只显示图片 button1.FlatStyle FlatStyle.Flat;//stylebutton1.ForeColor Color.Transparent;//前景button1.BackColor Color.Tran…

JUC工具包介绍

目录 1. 引言 2. 介绍JUC工具包 2.1. JUC工具包的概述和作用 2.2. 什么是JUC工具包&#xff1f; 2.2.1. JUC工具包与传统线程编程的区别和优势 3. 线程池&#xff08;Executor&#xff09; 3.1. 线程池的概念和优势 3.1.1. ThreadPoolExecutor类的介绍和使用示例 3.1.…

每天一点python——day68

#每天一点Python——68 #字符串的替换与合并 #如图&#xff1a; #①字符串的替换 shello&#xff0c;computer#创建一个字符串 print(s.replace(computer,python)) #用python替换computer替换语法 string.replace(old, new, count) sring&#xff1a;表示字符串 old&#xff1a…

javaSE学习笔记(八)-多线程

目录 九、多线程 1.概述 线程 多线程并行和并发的区别 Java程序运行原理 多线程为什么快 如何设置线程数比较合理 CPU密集型程序 I/O密集型程序 注意 线程的五种状态 新建状态&#xff08;new&#xff09; 就绪&#xff08;runnable&#xff09; 运行状态&#x…

Jmeter的参数化

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;加入1000人软件测试技术学习交流群&#x1f4e2;资源分享&#xff1a;进了字节跳动之后&#xff0c;才…

Linux文件描述符+缓冲区

Linux文件描述符缓冲区 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了文件描述符以及文件描述符…

【JavaEE】Servlet API 详解(HttpServletRequest类)

二、HttpServletRequest Tomcat 通过 Socket API 读取 HTTP 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象&#xff08;内容和HTTP请求报文一样&#xff09; 1.1 HttpServletRequest核心方法 1.2 方法演示 WebServlet("/showRequest&…