面向服务的架构 (SOA)

什么是面向服务的架构?

面向服务的架构 (SOA) 是一种现代软件架构模式,用于将应用构建为模块化软件单元(称为服务)的集合。在 SOA 中,服务具有自包含、模块化和松散耦合的特征。通过这种方法,您能够构建复杂的分布式应用。在其中,您可以更新单个组件,而不必更新整个一体化应用。典型的 SOA 软件堆栈包括应用软件,而应用软件又由服务、平台服务和中间件构成。这些服务运行在高性能硬件或虚拟机上。

运行在高性能硬件上的广义 SOA 软件堆栈,按层级自上而下分为应用软件、中间件和基础软件。

广义 SOA 软件堆栈。

面向服务的通信 (SOC)

基于 SOA 的应用使用面向服务的接口进行面向服务的通信,以提供和使用通过消息交换信息的功能。服务在 SOA 中起着客户端或服务器的作用。每个客户端或服务器服务都是作为组件在软件中实现的。客户端和服务器组件之间的连接点称为客户端/服务器端口,它们构成了面向服务的接口。

两个面向服务的应用通过消息相互通信。

使用消息进行面向服务的通信。

为了便于信息交换,客户端和服务器组件使用各种面向服务的通信模式,包括发布-订阅、请求-响应和触发-忘记。这些模式可以是异步的,也可以是同步的,这是 SOC 的关键特征。基于事件的建模可以使用 Stateflow® 和 SimEvents® 完成。此外,借助 Simulink® 中的 Messages & Events 库,您能够使用基于消息的通信对应用进行建模和仿真,并为其生成 C++ 代码。

面向服务的通信接口模式,包括方法(请求/响应和触发/忘记)、事件和字段。

面向服务的通信接口模式。

SOA 工作流

使用基于模型的设计工作流,您可以通过以下方式构建面向服务的应用:

  • 使用 Requirements Toolbox™ 指定需求
  • 使用 System Composer™ 创建 SOA
  • 在 Simulink 中对服务和组件进行建模和仿真
  • 导入现有服务和组件以供复用
  • 使用 Embedded Coder® 生成 C++ 产品级代码
  • 集成完整的 SOA 应用
  • 将 SOA 应用部署到边缘设备和云

SOA 的可扩展性

服务可复用且可升级。通过这些服务,软件工程师可以根据敏捷原则构建面向服务的可扩展应用,包括支持空口 (OTA) 更新的系统,以使其始终保持最新状态。

软件定义汽车的工作流,显示一系列步骤和相关工具,用于加快从事故中恢复的时间。

软件定义汽车的工作流,用于加快从事故中恢复的时间。

SOA 的用例

对于包含自主性、连接性和电气化的软件定义系统,面向服务的架构作为基础框架发挥着至关重要的作用。SOA 还广泛应用于汽车、航空航天、工业自动化和物联网、医疗设备和机器人等行业,用来构建体系、多代理系统、离散事件系统和分布式系统。

一些新兴的软件架构框架、中间件标准和通信协议基于面向服务的架构和面向服务的通信,为这些行业提供了有力的支持。例如,这些框架和标准包括 AUTOSAR Adaptive、DDS、ROS/ROS2、FACE、SOME/IP、MOSA、MQTT 和 OPC UA。

SOA 在汽车行业中的应用

随着软件定义汽车 (SDV) 的出现,SOA 在汽车行业中得到了最广泛的应用。SDV 可将基于信号的应用和面向服务的应用都集成到具有车载计算机和区域控制器的更新 EE 架构中。使用 System Composer 和 Simulink,开发人员可以先对 SOA 进行建模、仿真并为其生成 C++ 产品级代码,然后再将 SOA 作为模块化服务部署到边缘设备和云。在汽车行业中,AUTOSAR 是一种常见标准,它的 Adaptive 平台使用了 SOA 方法。使用 AUTOSAR Blockset,您可以对 AUTOSAR Classic 和 Adaptive 应用进行建模和仿真,然后生成 C/C++ 代码并使用 Embedded Coder 进行验证。此外,这些服务可以在车辆的整个生命周期内通过空口软件更新进行升级,以提升客户体验。SOA 已纳入上述行业标准以及内部框架。

汽车示例说明连接到云的 AUTOSAR Classic 软件堆栈和 AUTOSAR Adaptive 软件堆栈。

汽车示例:AUTOSAR Classic 和 Adaptive 软件堆栈。

SOA 在航空航天和国防领域的应用

在航空航天和国防领域中,SOA 出现在未来机载能力环境 (FACE™) 标准中,该标准是模块化开放系统方法 (MOSA) 标准化计划的一部分。FACE 使用传输服务段 (TSS) 进行面向服务的通信。使用 Simulink 和 DDS Blockset,您可以根据 FACE 标准对应用进行建模和仿真,为 DDS TSS 导入 FACE IDL,对 FACE TSS 通信进行仿真,以及为 FACE 应用生成 C++ 产品级代码并对其进行部署。

基于 FACE IDL 的工作流:导入 IDL,查看和编辑接口数据字典,对算法进行建模,生成 C++ 代码,以及为 FACE 应用部署该代码。

基于 FACE IDL 的工作流:从导入到部署。

另请参阅: System Composer, Simulink, Stateflow, Embedded Coder, AUTOSAR Blockset, DDS Blockset