0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将旧应用迁移到 SOA 面临的挑战

jf_EksNQtU6 来源:车端 2023-12-18 10:26 次阅读

软件定义汽车 (SDV) 的特点是 AI、自主、连接和电气化。最近,汽车行业已开始采用“基于服务”的方法来设计 SDV 的现代应用。这种称为面向服务的架构 (SOA) 的方法为开发软件应用提供了一种新范式,其特点是高重用性、易于更新以及与硬件的松散耦合。SOA 的构建原则是一个应用由一组服务组成,这些服务可以被动态地发现、发布、订阅和在运行时重新配置。SOA 的概念已被广泛纳入行业标准,包括 AUTomotive Open System ARchitecture (AUTOSAR)。

在 SOA 框架中,服务具有自包含、模块化、松散耦合等特征,这使得创建本质上非一体式的复杂分布式应用成为可能。基于 SOA 的应用可以使用自上而下或自下而上的方法来开发。在标准 SOA 软件堆栈中,应用软件由服务、平台服务和中间件组成。它们都运行在高性能硬件或虚拟机上。

将旧应用迁移到 SOA 面临的挑战

由于旧应用的若干特性,将其迁移到 SOA 可能颇具挑战性。这些特性包括:

一体式设计:旧应用通常采用一体式设计(图 1),组件的耦合和互连均很紧密。这使得很难将其分解成若干单独的服务,因为功能是相互交错的,而不是模块化的。

d6ced2ec-9bfa-11ee-8b88-92fbcf53809c.jpg

图 1. 组件紧密耦合的一体式设计

执行顺序:旧应用的组件通常有预定义的执行顺序。这种顺序执行方式使得应用难以转换为可动态发现和在运行时重新配置的独立服务。

基于信号和基于时间的通信:旧应用通常依赖组件之间基于信号或基于时间的通信。在 SOA 中,通信通常基于服务接口和交换消息。将旧应用的通信机制调整到面向服务的方法需要仔细考虑各个事项,甚至可能需要重新设计通信协议。

克服这些挑战通常需要全面分析旧应用的架构,并仔细确定组件之间的服务边界和依存关系。这可能需要将应用重构为更加模块化和松散耦合的若干单元,进而将这些单元封装为 SOA 框架中的各个服务。

将旧应用组合转换为服务是一项复杂的任务。例如,以前设计的一体式应用组合(如高速公路车道跟踪应用)可以变换为单个服务,也可以分解为多个服务,如相机服务、视觉服务、雷达和车道导航服务。

系统专业知识和基于模型的设计有助于把一体式应用设计分解为若干服务函数,从而将各个逻辑组件进行封装和抽象分离。它可以助力信号到服务接口的迁移并确定正确的执行顺序。在本文中,我们将介绍一个基于模型的设计工作流。此工作流可对新服务进行建模,亦可将您的传统应用组合转换为基于软件定义汽车的 AUTOSAR Adaptive 概念的服务。

将传统应用软件组合分解成服务

将传统应用软件组合分解成 SOA 应用的服务涉及将一体式架构分解成更小、更模块化的组件(图 2)。这对 SDV 来说意味着更大的灵活性、可扩展性和自适应性。

d6e7a984-9bfa-11ee-8b88-92fbcf53809c.jpg

图 2. 将传统应用软件组合分解成服务的步骤

将传统应用软件组合分解为 SOA 应用的服务涉及四个步骤。

识别和分析服务:识别组成 SOA 的服务、组件、功能、执行顺序和依存关系。对于工程师来说,这是最困难的部分。完成之后,他们必须分析服务,以将传统的一体式应用分解成更小的组件(图 3)。

d6f1d490-9bfa-11ee-8b88-92fbcf53809c.jpg

图 3. 将软件组件分解为服务

定义服务和接口:在识别服务后,必须定义它们之间的接口。这涉及指定用于服务间通信的协议和数据格式,以及定义指定服务间交互的条款和条件的服务合约。

定义服务合约:此步骤指定服务之间交互的条款和条件。AUTOSAR 架构版本 22-11 中引入了这些概念。该架构指定服务的版本控制,支持在不破坏现有客户端兼容性的情况下发布新版本的服务。

实现和部署服务:实现服务并将其部署为独立应用,具有自己的工件,包括接口描述。

使用基于模型的设计迁移到服务

基于模型的设计已用于开发非 AUTOSAR 框架和 AUTOSAR Classic 框架的应用。它还可用于为 AUTOSAR Adaptive 和通用 SOA 框架开发基于 SOA 的应用。对于 SDV 应用,业界通常利用通用 SOA 或基于 AUTOSAR Adaptive 平台的 SOA。基于模型的设计的优势在于可以提供统一的开发平台,有效地处理所有类型平台(包括 SOA、AUTOSAR Classic 和 AUTOSAR Adaptive)的整个开发过程,能够确保全面的一致性和效率。

使用基于模型的设计将一体式应用组件分解为服务涉及以下步骤:

识别和分析服务:了解各种组件、其功能、执行顺序以及它们之间的依存关系。一个一体式应用的所有组件均部署为一个可执行文件进行部署(图 4)。然而,当分解成服务时,每个单独的服务均独立部署。

d7066d9c-9bfa-11ee-8b88-92fbcf53809c.jpg

图 4. 所有 Simulink 模型作为一个可执行文件进行部署

例如,图 4 中有一个在 Simulink 中开发的高速公路车道跟随应用,它作为一个一体式应用组合进行部署。使用 Simulink 将这样的一体式组件分解成服务(图 5)需要依据单一职责原则和依赖倒置原则。根据这些原则,高速公路车道跟随模型可分解为多项服务,如雷达、视觉和车道。这些服务具有良好定义的职责和松散耦合的依存关系,支持隔离对服务的更改,并且最小化更改对其他服务的影响。

d714bb04-9bfa-11ee-8b88-92fbcf53809c.jpg

图 5. 使用基于模型的设计将一体式旧应用分解为服务

一体式应用分解成若干基于 SOA 的服务,并用客户端-服务器端口将它们连接起来

定义服务和接口:使用接口定义的服务是服务边界的一部分。服务边界同样定义了服务与其他服务交互的通信通道。服务边界还封装功能,以实现重用、可维护性、版本控制、可见性、编排和其他好处。使用 System Composer,您可以配置相关服务组件的端口以实现数据一致性,并通过原型来表示这些服务之间的交互方式。这提供了服务之间依存关系和交互的可视化表示(图 6)。

d72b5bca-9bfa-11ee-8b88-92fbcf53809c.jpg

图 6. 在 Simulink 中配置服务组件的服务接口和端口

定义服务合约:我们建议为服务建立清晰的边界,定义其输入、输出和行为。这让服务可以独立地开发、测试和部署,而不需要与架构的其他部分紧密耦合。通过定义服务合约,您可以了解服务的功能和限制,并且可以更轻松地与它们集成。此外,服务合约可以在不破坏与现有客户端的兼容性的情况下发布新版本的服务。

实现和部署:使用基于模型的设计中的客户端-服务器接口,您可以创建 SOA 软件架构模型。图 8 展示了在 Simulink 中作为服务实现的 LaneGuidanceApp、DetectionApp、雷达和视觉算法

d743e500-9bfa-11ee-8b88-92fbcf53809c.jpg

图 8. Simulink 中 SOA 服务的算法实现

此外,您可以使用 Embedded Coder 为通用 SOA 应用生成 C++ 代码。

为 AUTOSAR Adaptive 应用配置服务

您可以使用 Simulink 建模结构为 AUTOSAR Adaptive 无缝配置这些服务。如图 9 所示,我们使用 System Composer 中直观的 AUTOSAR 编辑器,成功地将所有服务作为 AUTOSAR Adaptive 服务进行了集成。随后,我们为每个端口和接口建立了必要的映射,确保它们与对应的 AUTOSAR Adaptive 属性保持一致。

d760672a-9bfa-11ee-8b88-92fbcf53809c.jpg

图 9. 设计、开发 AUTOSAR Adaptive 应用的服务并为其生成 C++ 代码

以雷达服务为例,它链接到一个 Simulink 模型。该模型在根级使用 Simulink Function 模块来创建Adaptive methods (3:50)服务接口。此处,AUTOSAR 服务接口的方法定义了一个软件组件(建模为提供接口的服务器)和另一个软件组件(建模为需要接口的客户端)之间的交互。

在 Simulink 中,客户端-服务器通信可以用同步或异步调用行为进行建模。同步客户端模型导致客户端执行阻塞,也就是说客户端会向服务器发送请求并等待响应。异步客户端模型不会导致执行阻塞,也就是说客户端会发送请求、在发送请求后继续当前执行并在收到服务器响应后进行处理。

雷达服务是一个使用客户端-服务器通信的服务器。在图 9 中,代码映射 UI 显示了 Simulink Function 模块和函数元素端口的映射 - radarCtrl.Adjust 和 radarCtrl.Calibrate 及其各自的 Adaptive 端口。

此外,您还可以在 Methods 服务接口的 AUTOSAR 字典中查看和编辑 AUTOSAR 属性(图 10)。

d76d8e96-9bfa-11ee-8b88-92fbcf53809c.jpg

图 10. 用于查看/编辑属性的 AUTOSAR 字典

LaneGuidanceApp 服务作为客户端运行,并通过异步调用利用客户端-服务器通信(图 11)。此示例中的客户端使用异步通信,并受益于非阻塞执行,能够在向服务器发送请求后继续执行。在 Simulink 模型中,它使用带有 Message Triggered Subsystem 模块的 Function-Call Subsystem 模块来异步执行函数调用。代码映射 UI 显示 Simulink 函数调用方与对应 AUTOSAR Adaptive 端口。

d779ec9a-9bfa-11ee-8b88-92fbcf53809c.jpg

图 11. 映射到 LaneGuidanceApp 服务的 AUTOSAR 属性的 Simulink 模型

同样,所有其他 SOA 服务都是根据 Simulink 中的 AUTOSAR Adaptive 概念进行配置的。

经过验证和仿真后,每个 AUTOSAR Adaptive 服务都可以作为独立应用程序进行部署,并具有自己的工件,包括 C++ 代码和 AUTOSAR 接口描述,其中包含机器、执行和 ServiceInstanceManifest 文件。最后,使用 Embedded Coder 生成 AUTOSAR Adaptive C++ 代码以及对应的软件描述和清单文件,以便进一步集成到工作流中(图 12)。

d7891d46-9bfa-11ee-8b88-92fbcf53809c.jpg

图 12. AUTOSAR Adaptive 应用程序的 C++ 代码接口文件生成

结论和将来的工作

基于模型的设计为系统开发提供了一种结构化方法,支持创建表示应用架构、组件和交互的模型。在本文中,我们通过高速公路车道跟随参考示例说明了如何使用基于模型的设计将传统一体式应用分解为服务,然后将它们配置为 AUTOSAR Adaptive 应用程序。这些模块化服务可作为一个开端,使工程师能够创建、仿真和生成 C++ 代码以及清单文件,以便进一步集成到工作流中。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8127

    浏览量

    82557
  • AUTOSAR
    +关注

    关注

    9

    文章

    330

    浏览量

    21138
  • SOA
    SOA
    +关注

    关注

    1

    文章

    271

    浏览量

    27227
  • 客户端
    +关注

    关注

    1

    文章

    282

    浏览量

    16348
  • 软件定义
    +关注

    关注

    0

    文章

    76

    浏览量

    13601

原文标题:传统应用如何迁移到SOA框架

文章出处:【微信号:谈思实验室,微信公众号:谈思实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CCSv3.3 迁移到 CCSv4的方法

    条件下,虽然 C2000 示例不使用DSP/BIOS,但由于 .PJT 文件中包含一个对“DspBiosBuilder”的空引用,迁移向导选择默认的 DSP/BIOS工具版本。单击“Next(下一步
    发表于 09-03 16:08

    怎么从C30迁移到XC16?

    大家好,我正在从C30迁移到XC16,我对结构和联合有些困惑,因为我的代码在XC16中不再工作……在这种情况下,我在监视窗口中得到以下值:Minni.v[0]=0x22Minni.v[1
    发表于 04-01 07:01

    如何Spartan 6迁移到Artix-7?

    我们有一个为XC6SLX25开发的设计,我们希望转移到Artix-7以节省电力。我们可以通过将设计迁移到Artix-7来实际期望节省电力吗?
    发表于 05-01 12:44

    如何EDK planAhead项目迁移到vivado

    大家好,我正在EDK planAhead项目迁移到vivado。在迁移我的一个pcoreblock时,我收到了该错误,并且迁移根本没有发生。“错误:[filemgmt 20-730]
    发表于 05-05 16:59

    如何CCSv3.3迁移到CCSv4?

    如何CCSv3.3迁移到CCSv4
    发表于 02-25 07:15

    如何CubeMX项目从一系列MCU迁移到新系列的MCU?

    如何 CubeMX 项目从一系列 MCU 迁移到新系列的 MCU?
    发表于 01-16 07:02

    codeaurora迁移到不同平台后,yocto build (imx-5.15.71-2.2.0.xml) 失败了怎么解决?

    codeaurora 迁移到不同平台后,yocto build (imx-5.15.71-2.2.0.xml) 失败
    发表于 04-21 06:58

    codeaurora迁移到github后yocto构建失败了怎么解决?

    codeaurora 迁移到 github 后 yocto 构建失败
    发表于 04-21 08:12

    如何Mifare Classic系统迁移到Mifare Plus或Mifare Desfire?

    Desfire EVx。 我们无法一次更改所有基础架构,因为它确实很大(超过 2000 个读者)。我们希望周边阅读器迁移到安全技术,并在过渡期间阅读器留在室内。 我听说过具有双
    发表于 05-17 07:42

    如何使用Neon intrinsic的矢量处理代码迁移到氦intrinsic

    本指南旨在帮助任何将使用霓虹灯内部函数的现有矢量处理代码迁移到氦内部函数的人。我们研究不同复杂度的霓虹灯代码示例,并研究如何将该霓虹灯代码迁移到氦。通过研究这些示例,您将了解一些通用的迁移
    发表于 08-02 07:39

    如何项目从Arm Compiler 5迁移到Arm Compiler 6

    按照本教程中的步骤,现有的Arm Compiler 5裸机项目迁移到Arm Compiler 6裸机项目。完成迁移后,就可以重新构建您的可执行并在DS-5提供的固定虚拟平台(FVP)模型上运行。
    发表于 08-02 14:42

    从电源架构迁移到ARM的应用说明

    本文档的目的是强调那些参与软件应用程序从Power架构迁移到ARM平台的人员感兴趣的领域。 本文并不试图一种体系结构提升到另一种体系结构之上,只是为了清楚地解释现有软件应用程序从
    发表于 08-22 06:09

    如何从M2M迁移到IIoT

    随着工业自动化需求的增加,工业协议和M2M机器通信逐渐迁移到IIoT工业物联网。
    发表于 09-16 15:56 969次阅读

    云计算中迁移到和建设私有云

    对于互联网公司而言,迁移到云是一个明智的决定。它减少了总的成本支出,同时最大限度地提高了工作效率和生产率,本文将指出迁移到云或者建设私有云优缺点以及边界在哪里?
    的头像 发表于 04-02 09:16 2204次阅读

    企业将业务迁移到云平台时要面临哪五个安全挑战

    的综合云计算平台。 云计算有规模大、虚拟化、可靠性高、通用性强、高可扩展性和廉价等优点。 那么企业将业务迁移到云平台时要面临哪五个安全挑战呢? 1.思维方式的转变 2.没有提前确定安全的优先等级 3.缺乏教育 4.认为已被持续集
    的头像 发表于 01-30 17:03 1102次阅读