可以说SOA完美的解决了汽车软件架构面临的各种挑战,并且为迎接汽车产业的变革打下必备的基础。
SOA车端E/E架构设计要素
SOA的开发过程相对于传统开发模式而言,仍然是以需求为输入,将需求以全面服务的模式进行细化,最终将定义的服务映射到软硬件架构中。
如上图所示,面向服务SOA架构的基本工作流程包括在底层设计过程中需要面向对象进行服务设计、服务分组以及服务映射。其中需要根据服务列表及服务接口设计服务,从而根据功能逻辑将服务映射值不同的模型,最后以服务组件到软件组件(SWC)的映射服务接口到软件接口。
SOA在自动驾驶架构设计中需要重点考虑基于服务设计的完整性和功能安全设计的完整性。以标准的ASPICE软件认证开发流程为基础蓝本,传统的开发流程以系统验证为SOP节点,后续运行维护及上市后不再进行软件更新,而基于SOA的软件开发模式需要在系统验收后持续不断的更新软件,迭代更多实用性功能,提升已有软件性能。SOP Release需要包括所有可能的Basic Service,不需要所有的Service都一次开发完成。
利用 SOA的思维架构进行自动驾驶设计过程中,需要根据SOA设计原则定义服务接口,统一开发基础共用的软硬件平台及开发环境,从而提高软件复用度。开发过程考虑继承系统层级到零部件层级设计的实现原则,例如,功能子模块需要进行封装,功能之间需要进行自我包含等。
整个SOA在其硬件设计中主要实现了从模块化、单域控制器、冗余计算平台再到中央计算平台的整体演进。其中各自体现在如下一些方面:
1)模块化分割:梳理自动驾驶各子功能模块的各自功能,形成模块化的分子架构模型;
2)域控制单元:将如上分子架构模型中的ECU合并至中央域控制器,从而减少成本、重量和功耗,利用半导体及软件技术革新优化域控能力。
3)冗余计算平台:SOA可直接访问存储单元,并行计算载体提供冗余和安全算法,并在开放的可裁剪平台上进行搭载;
4)中央计算平台:SOA通过网络访问、动态配置及无缝冗余,注入刀片式服务设计策略,实现真正的自动驾驶演进。
对于SOA的开发应用模式,在其软件设计中实现了更加灵活的软件架构,集成第三方生态合作伙伴应用,服务拓展更新更加便捷,实现插拔式软件设计。最终目标是实现如下多个交互实体的关系解耦:
I/O接口与计算解耦、计算平台与区域架构解耦、软件与硬件解耦、整车级抽象能力、软件与软件解耦、基于微服务的软件架构、配置数据与代码解耦、数据驱动I/O设备。
安全设计在SOA中的应用思考
SOA在重构软件生态时,其功能安全实现难度大幅增加。OEM开放3party开发平台,如何保证其不影响整车的功能安全,对于3party开发的服务,如何确保其不级联失效影响其它已有ASIL等级的服务,服务客户端 的ASIL等级的不确定性等问题都将是制约SOA能够有效实现的关键因素。
SOA 系统设计层面考虑应考虑进行服务分层(如下图),其中SOA的功能安全设计需要考虑到整个层面的设计过程。
SOA 系统设计层面考虑应充分考虑服务分层。结合安全因素将服务合理分层,针对不同开发主体确定不同限制策略。同时,还应该基于服务进行有效分类,基于服务的安全相关性对开发的服务和OEM服务进行分区,过程中需要考虑严格的安全审核机制。为了实现物理隔离,需要考虑将供应商开发的底层服务和OEM自己开发的顶层服务进行高性能计算分区和安全计算分区。
此外,SOA在安全机制上可以分为3层架构设计,因此其软件运行期间的动态监控是必不可少的。
整体来讲,构建面向服务的安全分析流程及框架包含如下几个关键部分:
首先是进行有效的服务过程建模(BPMN),随后是进行安全分析中的服务Hazard分析(SHA)和服务Failure分析(SFA),最后是进行SOA的错误分类。在后续开发层面主要通过安全案例和服务层一致性构建安全保障体系,实现高度自动化的模型集成环境。
SOA的软件应用局限及应对策略
SOA在智能驾驶的不断渗透,意味着汽车软件的竞争力将会成为其核心竞争力,它关乎所有关键商业指标,如TTM、生产率、成本以及创新。而软件研发过程中就意味着其复杂性带来的巨大挑战。比如如何应用有效的软件管理以及系统集成核心工具,发挥多核性能最有效方法,使得满足功能安全、信息安全要求,降解软件复杂度,提高软件重用率,使软硬件解耦。通过降解复杂度,使得软软解耦,通过零代码修改使得系统集成更加有效。通过健康监控使得软件可见可管理。
SOA挑战 | 问题解析 | 有效对策 |
软件产品管理 | 软件产品必然面临如何核算成本,如何管理开发,如何管理供应商,如何定义业务等。 | 拥抱开源、融入生态,专注产生差异化价值的软件开发,业务相关软件开发。尽量减少企业私有的软件,降低软件产品管理的不确定性和复杂度,减少软件的生命周期成本。 |
全生命周拥有成本 | 软件开发的一个重要特点是长期维护,长期更新,这为开发者带来持续改进的可能性,同时,应意识到这也是长期成本。 | |
复杂性 协作开发 | 汽车软件代码体量已经超过1亿行,考虑到车型变型就更加复杂,人工智能算法、第三方软件集成等新需求让协作开发是发展的必然。 | 通过虚拟技术和容器等技术实现软硬解耦、软软解耦,管理软件的复杂性,支持多供应商同步开发,不同项目复用软件模型组。 |
兼顾实时、安全性需求 | 尤其自动驾驶领域和网络安全。 | 将实时性、安全性要求高的软件运行在实时操作系统上。 |
软件可维(护)可测(试) | 为了验证复杂软件的可靠性,对代码有效管理,甚至必须牺牲一定的性能! | 1、基于开源软件开发的代码,尽量通过开源社区维护,企业自身维护的代码尽量少,底层通过代码维护可以交给专业软件供应商维护。 2、使用自动化测试工具。 |
动态性 | 新技术的发展、半导体资源的升级、汽车开发越来越贴近消费端,都带来软件开发需求的变动加速和动态性。 | 敏捷流程,小步快跑的方式持续集成、持续发布(CI/CD),一体化开发、运维(DevOps) |
对于SOA来讲一个典型的例子就是,不同车型配置存在巨大差异。我们可以借助于中间件平台,插拔式设计在系统开发过程中根据需求进行不同程度的拓展。主要包含如下三个方面:
已完成
数据加载中