一、背景
耦合(Coupling)指软件系统中不同模块、组件或服务之间的相互以内容耦合、公共耦合、控制耦合、标记耦合、外部耦合、数据耦合、非直接耦合等类型的数据传递、控制流交互、资源共享等表现形式依赖程度。
解耦(Decoupling)是计算机科学、系统工程学、软件工程中现实和应用的一个框架技术,是解除或降低系统中软件-软件、硬件-软件、数据传输时序、业务流程间的依赖性,使系统架构设计更灵活、系统的各个组件能够相对独立地进行开发、维护和演化,并以可维护性、可扩展性、可替换性、可测试性、可重用性等为目的高协同、边界清晰的高质量机制。
复杂装备(设备)、智能驾驶车辆、工业控制等领域是软件-软件、硬件-软件、数据传输时序、业务流程间等是强需求应用,基于“软件定义”的基础,解耦对于这类强需求具有巨大的实际价值。
国外军用领域具有代表性的电子电气架构为源自英国GVA通用车辆架构的NGVA(NATO GENERIC VEHICLE ARCHITECTURE, AEP-4754)北约通用车辆架构及美国陆军VICTORY(C4ISR/EW的互操作性集成)架构。二者均能被归类为SOA基于服务的架构,前者架构高度围绕DDS通信中间件与以太网进行集成;后者使用Victory数据总线,一种基于服务的软总线实现车内信息的集成。在已公开的信息中,两种典型架构均在论证TSN在架构中的运用,以尝试解决未来装备在传感器、执行器数量激增时带来的实时性、确定性问题。在互操作性层面,两种架构均提供指导架构,通过确立一系列强制性标准以确保不同供应商之间的设备具备可替换性。对于美军其他模块化开放式电子电气架构,将在第二节国内外水平对比中简述。
由美国国防部推动的模块化开放系统方法(Modular Open Systems Approach,MOSA)应用已有20余年,这是一种研究层面的方法论。2019 年 1 月 7 日,美国国防部 (DoD) 发布了一份由陆军、空军和海军部长签署的备忘录,强制要求使用模块化开放系统方法 (MOSA)。该备忘录指出,“MOSA 支持标准应尽可能包含在未来武器系统修改和新开始开发计划的所有要求、规划和开发活动中。MOSA 的这一授权甚至被编纂为美国法律(《美国法典》第 10 篇 2446a.(b),第 805 节),其中规定所有主要的国防采购计划 (MDAP) 都必须使用 MOSA 开放式架构进行设计和开发。
在2025年美国海军的“Project Overmatch超越计划”中,如何在群协同层面及指控系统层面,面向分布式系统实现数据共享仍是待解决的难题。
在国内进行弱设备的解耦层级,也是百花齐放,具有代表性的有华为微服务级的解耦技术、汇川技术的松解耦技术等。
这些应用的底层架构均是以SOA服务架构来进行解耦。
图1 SDCT与NGVA、Victory对比
二、常见的解耦方式
1、模块层解耦
将系统分解为多个独立的模块,使每个模块独立开发、测试和部署,从而降低系统的复杂性。
(1)分层架构:将系统划分为表现层、业务逻辑层和数据访问层等,每一层都有其特定的责任,层与层之间通过接口进行通信。
(2)微服务架构:将复杂的系统拆分成一系列的小型、独立的服务,每个服务负责一个具体的业务功能,通过APIs进行交互。
2、接口标准与接口抽象
接口抽象是在遵循接口隔离原则(ISP),确保接口的设计尽可能简洁、明确的基础上,以依赖注入(DI)通过配置或容器传入依赖而不是硬编码实现接口实现与注入。接口抽象一般是接口标准化、硬件虚拟化、接口群组化等技术实现。
3、通信层解耦
使用各种通信机制,如消息队列(MQ)、事件总线(Event Bus)、远程过程调用(RPC)替代同步调用,服务间通过异步消息传递,避免阻塞与强依赖,实现模块间的松耦合通信,可以将长时间运行的业务逻辑与实时响应的用户界面分离。
4、数据级解耦:
利用数据访问对象(DAO)模式,分离数据访问逻辑和业务逻辑,使得业务逻辑不直接依赖于数据存储的细节。
5、函数式编程解耦:
使用纯函数,避免副作用和全局状态,使得函数调用的结果仅依赖于输入参数。
6、中间件解耦
通过使用中间件,将系统中的通用功能抽象出来,从而减少各个模块之间的依赖关系。
(1)消息中间件
通过消息中间件,系统中的各个模块可以通过发布和订阅消息来进行通信,从而实现松耦合。常见的消息中间件包括RabbitMQ、Kafka等。
(2)数据中间件
通过数据中间件,系统中的各个模块可以共享数据,从而减少数据的冗余和不一致性。常见的数据中间件包括Redis、Memcached等。
7、持续集成与交付
利用DevOps系统的持续集成与交付(CI/CD)实现系统的快速迭代和发布,从而提高系统的灵活性和可维护性。
(1)持续集成
通过持续集成,开发人员可以频繁地将代码集成到主干分支中,并通过自动化测试来验证代码的正确性,从而提高系统的稳定性和质量。
(2)持续交付
通过持续交付,开发人员可以将经过验证的代码快速发布到生产环境中,从而实现系统的快速迭代和发布。常见的持续交付工具包括Jenkins、GitLab CI等。
三、解耦方式与成本关系
从当代的解耦技术来看,没有从“根”技术来重构整个体系,造成了以“堆叠”、“更复杂技术和体系”来解决解耦的问题,为此,基于此其成本的高涨是必须的趋势:
角度 |
成本评价 |
模块层解耦 |
1、因层级通信问题,增加了数据丢包、数据确定性差 2、响应时间长且联调困难、错误责任难界定 3、交叉协调难度大 4、大大增加模块边界定义 5、主从问题无法解决 |
接口抽象解耦 |
1、增加了调试能力、对系统理解难度 2、问题定位异常复杂 |
通信层解耦 |
1、信息安全 2、数据的理解差异 3、接口更改带来的“级联修正”问题 |
数据级解耦 |
1、数据安全 2、各级对数据的理解与定义 3、增加了数据传输时的时延、因存储的适配和成本 4、大量的业务逻辑定义与理解 |
函数式编程解耦 |
1、问题出现难以解决 2、学习周期长和成本高 |
中间件解耦 |
1、适配与重新定义 2、层级间数据传输的高确定性、可用性问题 |
持续集成与交付 |
1、基于SOA服务架构的工具集合,需要一体化运营 2、处于被动的技术集成与交付时,将影响整个链条的数据真实性 3、学习成本高 |
表1 解耦方式成本评价
因此上述的解耦方式均是以局部的全解耦或是松耦合为结果,同时,并不能将解耦技术进行统一,这样造成了无论哪一种解耦方式,均是一种复杂的工作实现。
四、总线技术
我们从最早期美国陆军和美国空军对复杂装备进行全寿命周期管理的需求来看,解耦工作已经演变为一项工程技术,一项共性需求的技术。特别是美军对F35战机的技术性改造而提出的(1)全解耦;(2)数据资产;(3)总线技术;(4)全真数字仿真;(5)实装与仿真装备数据一致性等,均是依托解耦技术、总线技术而对整个功能体进行重新定义,对采办流程进行重塑,进而延伸到对系统工作方法论进行以“数据”为核心的重新定义和实施。
1、概念
总线是一种内部结构,描述计算机内部功能部件之间传送电子信号传输线路的结构形式,是一类信号线的集合,由导线组成传输线束。
软总线是一种通过软件协议和数据结构在软件层面模拟以实现各个功能体之间或系统之间的,且不依赖物理硬件连接的连接和通信机制。
软总线技术的特征表现为虚拟性,通过软件协议和数据结构虚拟为一个总线。
软总线的概念最早出现在分布式系统中,它通过虚拟化的方式将不同设备或系统连接起来,使得它们能够互相传输数据或消息。
分布式软总线是终端设备的通信基座,核心优势是跨平台、跨载荷的适应性,为多设备之间的无缝互联提供了统一的分布式通信能力,支持自发现、自组网、自连接功能,实现在各种复杂环境里,最大程度的提升空口利用率,保证多设备、多业务并发时高优先级业务的用户体验。
2、对比
特性 |
硬总线 |
软总线 |
物理性 |
存在物理线路中 |
存在软件层的一种连接和通信机制 |
实现方式 |
通过硬件设备实现 |
通过软件协议、数据结构实现 |
通信范围 |
硬件设备之间或设备内组件之间 |
微机内部进线程调度。较为宏观的软总线系统可能会涵盖通信中间件及对应的硬总线 |
作用 |
实现硬件设备间通信 |
通过为开发人员提供统一的开发接口,降低开发难度。此外,一些软总线提供QOS服务,提供进线程调度机制。 |
灵活性 |
固定且硬件依赖性强 |
高灵活性、适应性强、跨平台和载荷 |
应用领域 |
用于物理设备网络间的通信 |
分布式系统、虚拟化等领域 |
表2 硬总线和软总线对比
图2 “鸿蒙”分布式软总线架构