4. 多域通信架构

在 DDS 工程实践中,单个域往往只能满足小规模、单一业务或单一安全等级的通信需求。当系统扩展到车载、舰载、工业控制或联合仿真场景时,不同业务、不同安全等级、不同生命周期的数据流必须被组织到多个逻辑域中。多域通信架构的核心,就是围绕域参与者(DomainParticipant)、域ID(Domain ID)和域隔离机制,在保证隔离性的同时,按需建立可控的跨域通道。

一、核心原理:域参与者与域ID

DDS 将通信空间划分为若干独立的域(Domain),每个域由一个整数域ID标识。域ID 是全局唯一的逻辑分区编号,同一域ID 内的 DomainParticipant 才能通过 DDS 发现机制互相感知并交换数据。DomainParticipant 是应用接入 DDS 的入口对象,它承载了该应用在某个域中的身份、QoS 策略、类型注册和发现配置。

可以把域ID 理解为“通信频道号”,DomainParticipant 则是“接入该频道的终端”。不同域ID 的参与者默认互不可见,即使运行在同一台主机、同一网卡上,也不会交换任何用户数据。这种设计天然提供了逻辑隔离,使不同业务域可以独立演进、独立调参、独立排障。

关键结论:域ID 决定“能不能发现”,QoS 与分区(Partition)决定“发现后能不能收”,而跨域桥接决定“要不要打通”。

二、域隔离机制:从逻辑隔离到物理隔离

域隔离并非只有“域ID 不同”这一层。工程上通常叠加多种隔离手段,形成纵深防御:

  • 域ID 隔离:最基础的逻辑隔离,不同域ID 的参与者不参与彼此的发现过程。
  • 分区(Partition)隔离:同一域内通过分区名进一步划分发布/订阅范围,实现域内子网隔离。
  • QoS 隔离:通过可靠性、持久性、历史深度、截止时间等策略,使不同业务流互不干扰。
  • 传输隔离:绑定不同网卡、VLAN、组播地址或传输插件,实现物理链路级隔离。
  • 安全隔离:启用 DDS Security,通过身份认证、访问控制、加密插件限制跨域访问。

下图展示了多域通信架构中域参与者、域ID、隔离边界与跨域桥接之间的整体关系。

多域通信架构:域参与者 · 域ID · 隔离边界 · 跨域桥接 域 ID = 0(控制域) DomainParticipant A1 DomainParticipant A2 QoS:Reliable / KeepLast 域 ID = 1(感知域) DomainParticipant B1 DomainParticipant B2 QoS:BestEffort / 高频 域 ID = 2(仿真域) DomainParticipant C1 DomainParticipant C2 QoS:TransientLocal 隔离边界 隔离边界 跨域桥接 / 网关 类型映射 · QoS 转换 · 安全策略 · 限流 多域拓扑设计原则 ① 按业务/安全等级划分域ID,避免“一域到底”;② 域内用 Partition 细分,减少无关发现; ③ 跨域只经桥接,禁止参与者直接跨域;④ 桥接处做类型与 QoS 显式映射;⑤ 为桥接链路预留带宽与故障隔离。

三、跨域通信需求与桥接方式

多域架构并不意味着“永远不通信”。当控制域需要感知域的目标信息、仿真域需要向控制域注入测试数据时,就必须建立跨域通道。常见的跨域需求包括:

  • 数据汇聚:多个业务域的数据汇总到监控域,用于统一态势展示。
  • 指令下发:控制域向执行域下发任务指令,要求可靠、有序。
  • 仿真注入:仿真域向真实系统域注入激励,要求时间可控、可回放。
  • 安全边界:低安全域向高安全域单向传输,必须经过访问控制与审计。

跨域实现通常有三种方式:域桥接(Domain Bridge)、网关转发(Gateway)和共享主题代理(Topic Proxy)。桥接方式需要在类型系统、QoS 语义、时间戳和安全性上做显式映射,否则会出现“数据通了但语义错了”的问题。

# 典型多域配置片段(概念示意)
domain_id = 0          # 控制域
participant_name = "ctrl_node"
partition = ["ctrl.telemetry"]

# 跨域桥接映射
bridge:
  from_domain: 1
  to_domain: 0
  topic_map:
    - src: "Sensor/Obstacle"
      dst: "Ctrl/Obstacle"
      qos: { reliability: RELIABLE, durability: TRANSIENT_LOCAL }
  rate_limit: 200 msg/s
  security: { access_control: true, encrypt: true }

四、多域拓扑设计原则与对比

多域拓扑不是“域越多越好”,而是要在隔离性、实时性、可维护性和资源开销之间取得平衡。下表给出常见拓扑形态的对比。

拓扑形态 域数量 隔离强度 跨域开销 适用场景
单域扁平 1 弱 无 原型验证、小规模节点
多域并行 3~5 中 低 业务分区明确、少量汇聚
星型桥接 5~10 强 中 监控中心统一汇聚
分层多域 10+ 很强 高 安全等级分明、大规模系统
设计建议:先按“业务边界 + 安全等级 + 实时性要求”三个维度划分域,再决定桥接点。桥接点越少,系统越稳定;桥接点越多,灵活性越高但排障越复杂。

五、常见误区与复盘

误区一:域ID 随便填。不同团队各自使用 0、1、2,导致本应隔离的业务意外互通。应在项目初期建立域ID 分配表,并纳入配置管理。

误区二:用域ID 代替分区。把所有子业务都拆成独立域,导致参与者数量膨胀、发现流量激增。域内细分应优先使用 Partition。

误区三:桥接不做 QoS 映射。感知域 BestEffort 数据直接桥接到控制域 Reliable 主题,造成桥接端缓存堆积或丢包。桥接必须显式声明可靠性、持久性和历史深度。

误区四:忽略安全边界。跨域桥接若未启用访问控制,低安全域可间接影响高安全域。应在桥接点实施单向传输、白名单和审计日志。

排障提示:当出现“同主机不同域收不到数据”时,先确认域ID 是否一致;当出现“跨域数据延迟大”时,优先检查桥接限流、QoS 映射和序列化开销,而不是盲目增加域数量。

综上,多域通信架构的本质是“隔离优先、按需桥接”。域参与者提供接入身份,域ID 提供逻辑分区,隔离机制提供纵深防御,跨域桥接提供受控通道。只有把域划分、QoS 映射、安全策略和拓扑原则统一设计,才能让 DDS 在复杂系统中既保持解耦,又实现可靠的数据分发。