iceoryx2 分层架构
核心思想 iceoryx2 采用分层架构,实现关注点分离和模块化设计。各层基于下层提供的组件构建,职责明确。
主要层次(从高层到低层)
用户 API 层 (iceoryx2)
- 功能: 提供应用程序与 iceoryx2 系统交互的接口。
- 描述: 这层是面向应用开发者的主要接口,封装了系统核心功能。
概念抽象层 (iceoryx2-cal)
- 功能: 实现共享内存通信的领域特定功能和组件。
- 描述: 每个概念提供多个实现,可以组合配置以形成完整的 iceoryx2 部署方案。该层是架构中连接高层应用与底层技术的核心。
构建块层 (iceoryx2-bb)
- 功能: 提供独立于 iceoryx2 和共享内存通信领域的、可复用且优化的组件。
- 描述: 处理通用计算逻辑和数据管理模式的组件,相当于为 iceoryx2 定制的“标准库”,且符合认证要求。
平台抽象层 (iceoryx2-pal)
- 功能: 抽象 iceoryx2 运行所需的核心平台功能。
- 当前实现: 支持 POSIX 风格,适配所有支持的平台。
- 扩展性: 可通过为目标平台实现对应抽象接口,来添加新平台支持。
附加信息
- 设计优势: 分层的架构便于理解、扩展和维护。
- 参考资源:
- 深入了解共享内存通信概念。
- 熟悉通信模型中用于建立通信的组件。
- 可访问 https://github.com/eclipse-iceoryx/iceoryx2 查看具体代码实现。
通信模型
pub/sub
核心概念
- 模式定义:一种单向、多生产者、多消费者的通信模型。
- 核心优势:将生产者(发布者)与消费者(订阅者)解耦。
- 运行特点:
- 参与者拥有独立生命周期,可完全独立运行。
- 发布者发送消息时无需知晓接收者。
- 订阅者声明对特定服务的负载感兴趣,系统会自动将其与匹配的发布者连接。
适用场景与局限
- 擅长领域:向多个参与者传递大型负载。其零拷贝特性使得无论负载大小,都能实现基本恒定的延迟。
- 不适用场景:
- 需要向参与者无限期保留数据(如 blackboard 模式)。
- 需要进行双向通信(如请求-响应模式)。
实现机制(基于共享内存)
该模式通过共享内存中的数据结构实现,主要涉及:
- 负载段
- 共享内存中的一个区域,用于在参与者之间传递负载数据。
- 发布者拥有一个负载段,用于与订阅者共享数据样本。
- 负载段中内存的组织方式取决于 iceoryx2 部署中使用的分配器。
- 这种灵活性允许不同的部署(例如,桌面应用程序与安全关键型应用程序)根据其使用场景采用不同的合适策略。
- 偏移通道
- 一个用于传递负载段内负载偏移量的通道。
- 每个发布者-订阅者对都拥有自己独立的偏移通道。
event
req-rsp