AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录

相关总结:AutoSar AP简单多绑定总结

7.3 多绑定

如在 5.4.3 小节中简要讨论的,某个代理类 / 骨架类的不同实例之间的技术传输是不同的,多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现:

  • 代理类使用不同的传输 / IPC 与不同的骨架进行通信。
  • 同样地,对于同一个骨架实例的不同代理实例,也可能使用不同的传输 / IPC 与这个骨架实例进行通信,即骨架实例支持多种传输机制的连接。

7.3.1 简单多绑定的用例

下图描绘了一个简单多绑定的用例。例子中,服务消费者和服务提供者在同一个节点(ECU 内部)中进行通信,服务消费者拥有同一个代理类的两个实例。图中可以看出,服务消费者首先触发了一个 “FindService”,它为搜索到的两个不同服务实例返回了两个句柄。服务消费者为每个句柄实例化了一个代理实例。在这个例子中,服务实例 1 与服务消费者(代理实例 1)位于同一个 AP 应用程序(相同的进程 / 地址空间)中,而服务实例 2 与服务消费者(代理实例 2)位于不同的 AP 应用程序(不同的进程 / 地址空间)中。

图 7.3 中,象征代理和骨架之间传输层的线条颜色不同:代理实例 1 有一个红色的传输层(绑定实现),而代理实例 2 的传输层是蓝色的。颜色不同是因为在代理实现层面上使用的技术不同。如果想努力打造一个性能良好的产品,AP 产品供应商(作为 IPC 绑定实现者的角色)需要这样做!

如图所示,因为代理实例 1 和骨架实例 1 包含在一个进程中,代理实例 1 和服务实例 1 之间的通信(红色)应该优化为一个简单的方法调用。因为代理实例 2 和服务实例 2 之间的通信(蓝色)是真正的 IPC,所以采取的行动成本要高得多,很可能涉及各种系统调用 (涉及到内核上下文切换),以便将调用 / 数据从服务消费者的进程传输到服务提供者的进程(通常使用像管道、套接字或共享内存这样的基本技术,并加上一些用于控制信号)。

从服务消费者开发者角度来看,供应商的 ProxyClass::FindService 实现为两个服务实例获得两个不透明的句柄,从这两个句柄中创建了同一个代理类的两个代理实例。“神奇地” 是,这两个代理实例虽然基于相同的代理类而创建,但是与各自的服务实例连接方式完全不同。所以,句柄中一定以某种方式包含了一些信息,代理类实例从这些信息中知道选择哪种技术传输。虽然乍一看很简单,但再看就不是了…… 问题是:是谁,在什么时候,把这些信息写入句柄中,使得从它创建的代理实例知道应该使用直接方法(函数调用),而不使用更复杂的 IPC 机制,或者反之亦然?

服务实例 1 通过 SkeletonClass::OfferService 在注册表(服务发现)中注册自己的时候吗?这取决于稍后使用它的服务消费者,所以很可能, AP 供应商的 SkeletonClass::OfferService 实现是从骨架的参数中获取所需信息,并通过特定的 IPC 通知 AP 供应商的注册表(服务发现)实现。前面句子中提及许多 “AP 供应商” 是有意的,只是表明,这里讨论的机制都没有标准化,因此可以由 AP 供应商设计和优化。然而,基本步骤将保持不变。所以通常在 SkeletonClass::OfferService 过程中从服务实例传递到注册表(服务发现)的是技术寻址信息,即如何通过本地 IPC 实现连接该服务实例。

通常在一个 AP 节点内部只会使用一种 IPC 机制!如果 AP 供应商在 AP 应用程序之间已经拥有一个优化的本地 IPC 实现,那么 AP 节点内部通常都会使用这个实现。所以 —— 在例子中,假设底层的 IPC 机制是 Unix 域套接字 —— 骨架实例 1 将创建一个套接字连接的文件描述符,并在 OfferService 期间将这个描述符传递给注册表(服务发现)。骨架实例 2 也是如此,只是描述符不同。当服务消费者执行 FindService 时,注册表将把两个服务实例的寻址信息发送给服务消费者(它们作为两个可见的不透明句柄)。

所以在这个例子中,这些句柄看起来完全相同 —— 只有一个小区别,即包含的文件描述符不同,因为它们引用不同的 Unix 域套接字。所以在这种情况下,在代理实例 1 中必须以某种方式检测到直接方法(比如:函数调用)的优化。一种可能的简单技巧是,在骨架实例 1 提供给注册表(服务发现)的寻址信息中,也包含进程的 ID(pid);要么显式地包含,要么将其包含在套接字描述符文件名中。所以服务消费者一侧的代理实例 1 可以简单地检查句柄中的 PID 是否表示与自身相同的进程,然后可以使用优化路径。顺便提一下:检测进程本地优化潜力是一件很平常的事情,几乎每个现有的中间件实现今天都在做 —— 所以无需进一步强调这个话题。

退一步的讲,我们必须认识到,这里的简单例子并没有完全反映多绑定的含义。它确实描述了同一个代理类的两个实例使用不同的传输层来联系服务实例的情况,但正如例子所示,这并没有反映在不同实例的句柄中,而仅仅是一种优化!在我们的具体例子中,使用代理实例 1 与服务实例 1 通信的服务消费者也可以像代理实例 2 一样使用 Unix 域套接字传输,而不会有任何功能损失 —— 只是从非功能性能的角度来看,这显然不好。尽管如此,这个简单的场景还是值得在这里提及,因为它是一个真实的场景,很可能在许多部署中发生,因此必须得到很好的支持!

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

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

相关文章

Xcode 16 pod init失败的解决方案

目录 前言 一、错误重现 二、解决方案 1.右击项目修改文件展示方式 2.修改.xcodeproj文件 3.参考文档 前言 我们使用Xcode创建新项目之后,执行pod init报错。我们看一下如何解决。 一、错误重现 RuntimeError - PBXGroup attempted to initialize an object …

MySQL联合索引(abc)命中测试

1.建表 mysql创建一张表,表名:‘test_models’ id列为 主键,int类型 ,自增a,b,c,d,e 全部是int(11)为(a,b,c)添加一个联合索引 index_abc 执行语句:创建表 CREATE TA…

ssm药房管理系统—计算机毕业设计源码42430

目 录 摘要 1 绪论 1.1课题目的及意义 1.2研究背景 1.3 研究方法 1.4论文结构与章节安排 2 药房管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

pgSQL-timescaledb复制表出现的问题

今日在工作中,需要复制一张timescaledb表,pgAdmin上复制一直未成功,或者我找错位置了。 1.我使用Navicate连接pgSQL,连上后选中相应表,右键复制结构即可 2.复制结构后,到pgAdmin中,将对应表下的…

CSP/信奥赛C++语法基础刷题训练(8):洛谷P5718:找最小值

CSP/信奥赛C语法基础刷题训练(8):洛谷P5718:找最小值 题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​,求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n,表示数字个数。…

恒源云使用手册记录:从服务器下载数据到本地

文章目录 一、xftp下载二、通过Xftp客户端连接站点 一、xftp下载 先下载xftp:下载连接 二、通过Xftp客户端连接站点 右击文件,点击新建 名称可以任意 主机、端口号、用户名 点击这里的复制登录命令 比如我这里得到ssh -p 41604 rooti-2.gpushare.co…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!

作者:来自 Elastic Platform Product Team Elastic Search AI 平台(Elasticsearch、Kibana 和机器学习)的 8.16 版本包含大量新功能,可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…

亮数据——助力全球数据抓取的高效代理平台

目录 实际案例:利用代理服务抓取企业信息完整代码运行结果 亮数据的技术优势与应用场景产品更新:简化注册流程与智能助手升级立即注册,开启您的数据抓取之旅! 在如今的大数据时代,企业决策越来越依赖于数据分析&#x…

使用win32com将ppt(x)文件转换为pdf文件

本文来记录下如何使用win32com将ppt(x)文件转换为pdf文件 文章目录 win32com概述win32com优缺点代码实例本文小结 win32com概述 Pywin32 是一个用于与 Microsoft Windows 操作系统交互的 Python 扩展模块,它提供了对多个 Windows API 的访问,包括对 Mic…

Win11专业版Docker安装、配置记录

零,系统环境配置 首先,安装Docker需要系统支持开启硬件虚拟化及Hyper-V功能,所以这里需要Win10/11的专业版,这样才能进行Docker for Windows软件安装。 1,硬件虚拟化 至于如何开启硬件虚拟化,自行百度即…

[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决

目录 一. 多线程下使用ArrayList 1.1. 自行判断加锁 1.2 使用Collections.synchronizedList()套壳加锁 1.3 CopyOnWriteArrayList类 二. 总结 一. 多线程下使用ArrayList 多线程下使用ArrayList会涉及到线程安全问题, 例如: public static void main(String[] args) thro…

idea项目运行时 java: 错误: 不支持发行版本 21

java项目运行时,同样的项目别的都是正常运行,单个这个项目一直报 java: 错误: 不支持发行版本 21, 报错的解释 这个错误表明你正在尝试使用Java编译器编译一个类,但是编译器遇到了一个它不支持的版本号,在这个上下文…

kafka和Flume的整合

目录 一、Kafka作为Source 【数据进入到kafka中,抽取出来】 1、在我的flume的conf文件夹下,有个myconf文件夹: 2、 创建一个flume脚本文件: kafka-memory-logger.conf 3、测试 二、kafka作为Sink 【数据从别的地方抽取到kafka里…

Tomcat漏洞利用工具-TomcatScanPro(二)

项目地址 https://github.com/lizhianyuguangming/TomcatScanPro 简介 本项目是一个针对 Tomcat 服务的弱口令检测、漏洞检测以及本地文件包含(LFI)攻击工具。除了支持 CVE-2017-12615 漏洞的多种利用方式外,新版本还集成了 CNVD-2020-104…

【2024软考架构案例题】你知道 Es 的几种分词器吗?Standard、Simple、WhiteSpace、Keyword 四种分词器你知道吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

Web认证机制 Cookie、Token、Session、JWT、OAuth2 解析

标题 一、Cookie二、Session三、Token四、JWTSSO(单点登录) 五、OAuth2如何设计权限系统区别总结 Cookie、Token、Session 和 JWT 都是在 Web 开发中常用的身份验证和授权技术,它们各有优缺点,适用于不同的场景。 Cookie 简单易用…

GEE遥感云大数据在灾害、水体与湿地领域典型案例实践:洪涝灾害、水体质量、河道轮廓、地下水变化监测;洪水敏感性和风险模拟;红树林遥感制图等

以Earth Engine(GEE)、PIE-Engine为代表全球尺度地球科学数据(尤其是卫星遥感数据)在线可视化计算和分析云平台应用越来越广泛。GEE平台存储和同步遥感领域目前常用的MODIS、Landsat和Sentinel等卫星影像、气候与天气、地球物理等…

安装一键式重置密码插件(Linux)-CloudResetPwdAgent

为了保证使用镜像创建的裸金属服务器可以实现一键式密码重置功能,建议您在制作镜像时安装重置密码插件“CloudResetPwdAgent”。 前提条件 需保证虚拟机根目录可写入,且剩余空间大于600MB。 1.下载插件包 华为云已提供下载包连接 在PC机里下载好软件…

力扣-Mysql-3328-查找每个州的城市 II(中等)

一、题目来源 3328. 查找每个州的城市 II - 力扣(LeetCode) 二、数据表结构 表:cities ---------------------- | Column Name | Type | ---------------------- | state | varchar | | city | varchar | ----------------…