Files
softbus_OPC/docs/软件总体架构.md
flower_linux 85bfb5d8ec self control
2026-06-24 16:25:02 +08:00

60 KiB
Raw Permalink Blame History

SoftBus OPC 软件总体架构

本文档描述 SoftBus OPC 软总线系统的术语定义、软件背景、总体范围、架构概览及 Daemon 核心模块设计。
工程路径:softbus_OPC/。相关补充文档见 docs/README.md


第 0 章 术语、缩写与软件背景

0.1 术语与缩写词

本章汇总全文涉及的专业术语与缩写,按类别编排。英文名称与代码标识保持一致。

0.1.1 系统与进程

术语 / 缩写 英文 / 标识 说明
SoftBus OPC 本软总线工业数据总线 Phase 1 原型工程名
软总线 Soft Bus 抽象异构现场总线,提供统一数据语义与传输编排的中间件
Daemon softbus_daemon 中心守护进程上行接入、协议解析、OPC UA 暴露、命令分发、在线监测
Edge softbus_edge 边缘代理进程,部署于现场侧,负责物理设备采集与写回
CoreService Daemon 唯一编排入口,管理各子系统生命周期与主循环
EdgeRuntime Edge 运行时核心类,集成采集、上行、下行与配置热加载
Phase 1 / 2 / 3 / 4 能力交付阶段:采集透传 → 订阅/管理 → 融合 → 恢复
南向 Southbound 面向现场设备与传感器的数据接入方向
北向 Northbound 面向 OPC UA、MES/SCADA 等上层应用的数据开放方向

0.1.2 域模型与配置

术语 / 缩写 英文 / 标识 说明
物理域 Physical Domain 通道、设备、寄存器、COB-ID 等贴近硬件的配置与数据标识;由 edge 加载
逻辑域 Logical Domain OPC UA 地址空间、逻辑点、对象模型五层路径;由 daemon 加载
双域 Dual Domain 物理配置与逻辑模型分离,经 Binding 映射关联
物理通道 Physical Channel physical_channels.json 中定义的串口/TCP/CAN 接口实例
物理设备 Physical Device 挂载于通道上的从站或 CANopen 节点等设备实例
物理点 Physical Point 最小采集单元,标识为 physicalPointId(运行时带 edgeId 前缀)
逻辑点 Logical Point 北向语义测点,标识为 logicalPointId,对应 OPC UA Variable
Binding / 绑定 BindingRegistry 物理点 ID、逻辑点 ID 与 edgeId 的映射关系
全局绑定 bindings_global.json daemon 侧绑定表,决定上行映射与下行路由
本地绑定 bindings_local.json edge 侧可选绑定,用于下行写命令备用解析
逻辑点表 logical_points.json daemon 逻辑点与 OPC UA 节点语义定义
对象模型 ObjectModelTree 五层树形结构Site / System / Asset / Device / Point
ObjectRef 五层寻址路径字符串,如 DemoSite/DemoSystem/DemoAsset/EdgeDevice_01/MotorTemperature
edgeId 边缘实例唯一标识,用于 uplink 注册与 daemon 路由
deviceId 逻辑设备名,用于主题格式化与 ACK 身份
sourceId RawPacket 中的数据源标识,通常为 {edgeId}/{physicalPointId}
topic_rule topic_rule.json Bus 主题模板data / command / ack / event / heartbeat

0.1.3 数据模型与消息

术语 / 缩写 英文 / 标识 说明
RawPacket 边缘上行边界类型traceId、timestampNs、runtimeDeviceId、sourceId、protocolTag、payload
DOMMessage Document Object Model Message 协议插件解析后的统一语义消息
SoftbusDataPoint Bus 上发布的标准化测点deviceId、pointId、value、unit、objectRef、sourceTimestampNs
ExecuteCommand 下行控制命令objectRef、command、params、requestId、traceId
SoftbusAck edge 执行写命令后的应答success、error、executedValue 等
WireMessage TCP 传输层消息封装,类型含 RawPacket、ExecuteCommand、heartbeat 等
traceId 贯穿上行/下行链路的追踪标识,便于日志关联
protocolTag RawPacket 中的协议标签,如 modbuscanopen
payload RawPacket 中的原始协议字节载荷
quality / 质量码 Good / Uncertain / Bad 数据可信度标识Phase 2 规划映射至 OPC StatusCode
deadband / 死区 edge 变化过滤阈值,工程值变化小于死区时不重复上报
reportOnChange 仅变化时上报,配合 ChangeFilter 减少上行流量
scale / 缩放系数 原始寄存器值与工程值之间的换算系数
unbound 主题 edge/unbound/raw/... 未在 bindings_global 中绑定的物理点 RawPacket 发布主题

0.1.4 传输与通信

术语 / 缩写 英文 / 标识 说明
UplinkWire edge 与 Daemon 之间的 TCP JSON 行传输协议
Uplink / 上行 edge → daemon 方向的数据与控制应答
下行 Downlink daemon → edge 方向的 ExecuteCommand 写回
TcpUplinkClient edge 侧 TCP 上行客户端(含独立 ioThread
TcpUplinkServer daemon 侧 TCP 上行监听服务,默认端口 9000
TransportBusBridge TCP 线消息与 Bus 主题之间的双向桥接
UplinkClient edge 对 TcpUplinkClient 的封装
Bus softbus_bus daemon 进程内 Pub/Sub 消息总线
Pub/Sub Publish / Subscribe 发布/订阅模式,按主题模式过滤消息
心跳 Heartbeat edge 周期性发送的在线保活消息
heartbeatPeriodMs edge 心跳发送周期,默认 1000 ms
JSONL JSON Lines 每行一条 JSON 的日志/时序落盘格式
TLS / mTLS 传输层安全Phase 2+ 规划)

0.1.5 协议与现场总线

术语 / 缩写 英文 / 标识 说明
Modbus RTU 串口 Modbus经 libmodbus 或 RTU-over-TCP 接入
Modbus TCP 以太网 Modbus 主从协议
RTU-over-TCP tcp_rtu / rtu_tcp 在 TCP 连接上传输 Modbus RTU 帧(含 CRC
CAN 2.0A/B 控制器局域网标准帧格式
CANopen 基于 CAN 的工业协议,含 NMT、PDO、SDO
SocketCAN Linux 内核 CAN 套接字接口(如 emuccan0
PDO Process Data Object CANopen 过程数据对象,周期性广播
SDO Service Data Object CANopen 服务数据对象,点对点读写对象字典
COB-ID CAN Object Identifier CAN 帧标识符PDO 订阅匹配键
NMT Network Management CANopen 网络管理,如远程启动节点
EDS Electronic Data Sheet CANopen 设备对象字典描述文件
RS-232 / RS-485 串行通信物理层标准
OPC UA Open Platform Communications Unified Architecture 北向工业互操作标准,默认端口 4840
open62541 开源 OPC UA 协议栈,本项目北向实现基础
Framer / 分帧器 IProtocolFramer 插件 Stage 1从字节流提取完整协议帧
Parser / 解析器 IProtocolParser 插件 Stage 2将完整帧解析为 DOMMessage
Plugin ABI 插件 C ABIcreate_framer / create_parser
protocol_modbus.so Modbus 协议动态库插件
protocol_canopen.so CANopen 协议动态库插件

0.1.6 Edge 采集子系统

术语 / 缩写 英文 / 标识 说明
Ingress IIngressPort 边缘采集入口抽象ModbusIngress、CanIngress、EthIngress
Egress 边缘写出路径ModbusEgress、CanEgress、EthEgress
CompositeIngress 组合多个协议 Ingress 的统一 poll 入口
IngressWorker 独立采集线程,循环 poll 并将结果推入 PacketQueue
PacketQueue 线程安全 RawPacket 队列,主线程 drain 后上行发送
ChannelManager 物理通道管理器族Modbus / CAN / Eth
ioMutex 每物理通道独立互斥锁,保护采集线程与下行写并发
ModbusPollScheduler Modbus 批量读计划器,合并相邻寄存器
PollPlanner 按 pollIntervalMs 调度到期测点
ChangeFilter 工程值变化与死区过滤
PdoMapper CANopen PDO 帧与物理点映射
SdoClient CANopen SDO 写客户端
NmtManager CANopen 远程节点启动管理
CommandExecutor edge 下行命令执行器,按 protocol 分发至 Egress
ConfigWatcher 配置文件变更监视,支持热加载
PhysicalRegistry edge 物理通道与设备注册表
Mock 模式 --mock 无硬件时模拟 Modbus 帧上行

0.1.7 Daemon 处理与北向

术语 / 缩写 英文 / 标识 说明
Pipeline / PipelineEngine RawPacket → 分帧 → 解析 → 绑定 → Bus/OPC UA 的处理管道
PluginLoader 动态加载协议插件.so
PointRegistry 逻辑点表与 ObjectModelTree 加载索引
BindingRegistry 全局/本地绑定加载与 physical ↔ logical 解析
CommandService 下行命令提交、路由、ACK 等待与状态机
CommandDispatcher Phase 1 遗留命令转发组件(已由 CommandService 扩展)
HeartbeatMonitor 订阅 heartbeat 主题,超时判定 edge offline
StorageService 订阅 Bus 主题,时序/命令/事件 JSONL 落盘
ProfileLoader 加载 daemon_profile.json 运行配置
UaServerEngine OPC UA 服务端引擎
UaAddressSpaceBuilder 由 ObjectModelTree 动态构建 OPC UA 节点树
UaModelBinder DOMMessage / SoftbusDataPoint → OPC UA Variable 写值
UaMethodBinder OPC UA ExecuteCommand Method 入口绑定
UaEventBridge Bus 事件 → OPC UA 事件桥接Phase 1 stub
Variable OPC UA 变量节点,暴露测点当前值
Method OPC UA 方法节点,用于 ExecuteCommand 下行
MonitoredItem OPC UA 订阅监控项Phase 2 规划完整实现)
Subscription OPC UA 客户端数据变更订阅机制

0.1.8 数据服务Phase 24 规划)

术语 / 缩写 英文 / 标识 说明
数据管理 Data Management 元数据、质量码、生命周期、存储策略、访问控制、血缘
数据订阅 Data Subscription 按主题/逻辑点/对象路径过滤推送Bus 订阅 + OPC UA Subscription
数据融合 Data Fusion 多源时序对齐、关联计算、合成测点发布
数据恢复 Data Recovery 断线补传、历史回放、缺测插值、冗余源切换
数据服务层 Data Service Layer 叠加于采集解析层之上的 Bus 中心化能力层
MetadataRegistry 元数据注册表(代码 stub待接入 CoreService
CatalogService 数据资产编目与检索(规划)
RetentionPolicy 时序/事件数据保留与归档策略(规划)
SubscriptionManager 统一订阅注册、QoS、背压管理规划
UaSubscriptionBridge Bus DataPoint 驱动 OPC UA MonitoredItem规划
SubGateway 北向 MQTT/HTTP 订阅网关(规划)
FusionEngine 融合规则执行与合成测点发布(规划)
FusionRuleRegistry 融合规则配置:输入点、表达式、对齐窗口(规划)
TimeAligner softbus_core::TimeAligner 多通道时序对齐器,支持 Nearest/Linear 策略(已实现,待接入)
AlignedSample 对齐后的多通道样本集合,含 anchorTimestampNs
anchor / 锚点时刻 融合对齐的时间基准点
SyntheticPoint / 合成测点 由多输入计算得到的衍生 logicalPoint
RecoveryService daemon 侧缺口检测、回放、冗余切换(规划)
RecoveryBuffer edge 断线期间 RawPacket 环形/持久缓冲(规划)
Gap / 数据缺口 GapReport 通信中断导致的时间区间 [t0, t1]
replayBatch uplink 补传批量 RawPacket 的扩展消息类型(规划)
QoS Quality of Service 订阅侧采样率、可靠性、延迟上限等服务质量策略
血缘 Data Lineage physicalPoint → binding → logicalPoint → fusedPoint 溯源链
ACL Access Control List 读/写/订阅权限控制(规划)

0.1.9 缩写词速查

缩写 全称
AI / AO Analog Input / Analog Output模拟量输入/输出signalType 字段)
ABI Application Binary Interface
CAN Controller Area Network
DOM Document Object Model
IPC Inter-Process Communication如 D-BusPhase 2 规划)
JSON JavaScript Object Notation
MES / SCADA 制造执行系统 / 数据采集与监控系统
NMT Network ManagementCANopen
OPC Open Platform Communications
PDO / SDO Process / Service Data ObjectCANopen
QoS Quality of Service
RTU Remote Terminal UnitModbus 串口从站通信模式)
SLA Service Level Agreement
TCP Transmission Control Protocol
TLS Transport Layer Security
UA Unified ArchitectureOPC UA

0.2 软总线需求

针对系统运行过程中,设备数目灵活增加、供求关系复杂多变,同一内涵的数据在不同设备之间的数据结构、映射关系、传输协议等外在表现有较大差异,导致数据管理与通信困难。与此同时在数据传输过程中,现有传感系统仅起到数据交换的作用,并未发挥其在数据传递过程中信息管理的作用。

为实现多源异构信息设备的互联互通,亟需开发一种软总线架构,用以实现大量异构网络之间的灵活通信。该软总线能够基于设备运行数据构建整体**系统传感软件子系统,并动态分析设备间的潜在关联,促进设备感知信息互补与数据恢复,最终支撑稳定、可靠、高效和低时延的通信传感网络形成。

SoftBus OPC 是本需求在工业自动化场景下的 Phase 1 原型实现:以南向多协议采集、中间层统一语义建模、北向 OPC UA 暴露为核心路径,验证“物理域—逻辑域”双域分离与可扩展插件化解析架构。

能力定位说明: 当前工程已完成“数据采集与透传”主链路(现场 → edge → daemon → OPC UA / JSONL 落盘),尚未形成完整的数据管理、数据恢复、数据订阅与数据融合子系统。第 0.2 节背景中提出的“信息管理、关联分析、互补与恢复”等目标,将在 Phase 24 基于现有 Bus 与语义模型逐层叠加(详见第 4 章)。

表 0-3 能力演进对照(背景需求 → 软件能力)

背景需求 Phase 1 现状 目标能力
异构设备互联互通 edge 多协议采集 + 插件解析 已具备基础
数据传递过程中的信息管理 Binding + 逻辑点表 + 主题路由 数据管理(第 4.6 节)
设备感知信息互补 单点上报,无跨源合成 数据融合(第 4.4 节)
数据恢复 仅 JSONL 追加写,无回放/补洞 数据恢复(第 4.5 节)
稳定低时延通信网络 多线程采集 + 心跳监测 订阅 QoS + 冗余(第 4.3 节)

表 0-4 目前已有的协议与接口

数据接口类型 数据采集方式 物理接口类型 本系统支持情况
电流模拟量数据 模拟传输 板卡端子块 经 Modbus/OPC 间接接入Phase 1
电压模拟量数据 模拟传输 板卡端子块 经 Modbus/OPC 间接接入Phase 1
串口数据 RS-232 / RS-485 DB / 端子块 已支持libmodbus RTU
以太网数据 TCP/IP 传输 RJ45 已支持Modbus TCP、RTU-over-TCP
CAN 数据 CAN 2.0A/B 传输 CAN-H / CAN-L 已支持SocketCAN、CANopen PDO/SDO

第 1 章 软件总体范围

本文档旨在促进多源异构设备的信息互联交换,适用于工业自动化及其他需要统一数据语义与北向开放接口的领域。

1.1 文档范围

范围项 说明
软件形态 守护进程 softbus_daemon、边缘代理 softbus_edge、协议插件动态库
通信南向 Modbus RTU/TCP、CANopen、裸以太网骨架
通信北向 OPC UAopen62541端口默认 4840
边缘—中心链路 TCP JSON 行协议UplinkWire端口默认 9000
配置与模型 物理层配置、逻辑点表、全局/本地绑定、对象模型五层寻址
Phase 1 已交付 数据采集、协议解析、OPC UA 读写、命令下行、JSONL 时序落盘、Bus 主题发布
Phase 24 规划 数据管理、数据订阅、数据融合、数据恢复(见第 4 章)
不在 Phase 1 范围 D-Bus 主流程接入、多 edge 负载均衡、TLS 生产部署、时序数据库集群

1.2 交付物

build/bin/softbus_daemon       # 守护进程
build/bin/softbus_edge         # 边缘代理
build/lib/protocol_modbus.so   # Modbus 协议插件
build/lib/protocol_canopen.so  # CANopen 协议插件
config/                        # 运行时配置
docs/                          # 架构与模块文档

第 2 章 总体概述

2.1 设计目标

SoftBus OPC 的总体目标分两个阶段理解:

Phase 1当前采集与透传 — 将工业现场总线数据接入软总线,经统一对象模型暴露为 OPC UA 地址空间,并完成基础落盘。

Phase 24演进数据服务 — 在采集层之上构建数据管理、订阅、融合与恢复能力,使软总线从“数据管道”升级为“数据服务中枢”,回应第 0.2 节背景中对信息管理、互补与恢复的要求。

Phase 1 已实现:

  1. 南向统一接入:边缘代理按物理配置轮询/订阅多协议设备,产出标准化 RawPacket
  2. 中间层协议中立Daemon 通过插件分帧/解析,不侵入核心数据模型。
  3. 北向标准开放OPC UA 客户端读写 Variable、调用 Method 下发控制命令。
  4. 双域解耦:物理配置在 edge逻辑模型与绑定在 daemon支持独立演进与热加载。

Phase 24 待建设(详见第 4 章):

  1. 数据管理:统一元数据、质量码、保留策略与访问视图。
  2. 数据订阅:多消费者按主题/QoS 订阅,不仅限于 OPC UA 轮询读。
  3. 数据融合:多 edge、多协议测点在时间轴上对齐并合成衍生量。
  4. 数据恢复:通信中断后的补传、历史回填与冗余切换。

2.2 系统分层架构

L3  可执行层
    softbus_daemon ─────────────────────────────┐
    softbus_edge                                │
                                                │
L2  服务/协议层                                  │
    softbus_opcua · softbus_transport           │
    softbus_pipeline · softbus_command          │
    softbus_monitor · softbus_storage           │
    softbus_registry · softbus_bus              │
    plugins/protocol_modbus · protocol_canopen  │
    [L2+ 规划] 数据订阅/融合/恢复/管理子系统     │
                                                │
L1  契约层                                       │
    softbus_api (ExecuteCommand)                │
                                                │
L0  内核层                                       │
    softbus_core ◄──────────────────────────────┘
         (模型、日志、插件 ABI、配置、身份标识

表 2-1 模块职责速查

模块 路径 职责
softbus_core src/softbus_core 数据模型、Plugin ABI、日志、配置、PlatformSignal
softbus_api src/softbus_api ExecuteCommand 等跨模块控制面契约
softbus_transport src/softbus_transport TcpUplinkClient/Server、UplinkWire 编解码
softbus_registry src/softbus_registry 逻辑点表、BindingRegistry、PointRegistry
softbus_pipeline src/softbus_pipeline RawPacket 解析管道与 Bus 订阅
softbus_opcua src/softbus_opcua OPC UA 服务端、地址空间、Method、事件桥
softbus_command src/softbus_command 下行命令提交、状态机、ACK 等待
softbus_monitor src/softbus_monitor 心跳超时监测、edge 在线/离线事件
softbus_storage src/softbus_storage 时序数据落盘JSONL
softbus_bus src/softbus_bus 进程内 Pub/Sub 消息总线
softbus_edge src/softbus_edge 物理采集、上行、下行写回
softbus_daemon src/softbus_daemon 编排中心CoreService
plugins src/plugins Modbus / CANopen 协议动态库

2.3 运行时拓扑

  OPC UA Client                    现场设备
  opc.tcp://:4840                  Modbus / CAN / Eth
       │                                ▲
       ▼                                │ 驱动 I/O
┌──────────────────────────────────────────────────────────┐
│                    softbus_daemon                         │
│  ┌─────────────┐   ┌──────────────┐   ┌───────────────┐  │
│  │ UaServer    │◄──│ UaModelBinder│◄──│ PipelineEngine│  │
│  │ Engine      │   └──────────────┘   └───────▲───────┘  │
│  └──────┬──────┘                              │          │
│         │ ExecuteCommand                      │ RawPacket│
│  ┌──────▼──────┐   ┌──────────────┐   ┌───────┴───────┐  │
│  │CommandService│  │  Bus (Pub/Sub)│◄──│TransportBridge│  │
│  └──────┬──────┘   └──────────────┘   └───────▲───────┘  │
│         │                          ┌─────────┴────────┐  │
│  ┌──────▼──────────────────────────│ TcpUplinkServer  │  │
│  │ HeartbeatMonitor · StorageService│    :9000        │  │
│  └──────────────────────────────────┴────────┬────────┘  │
└───────────────────────────────────────────────┼──────────┘
                                                │ TCP JSON
┌───────────────────────────────────────────────▼──────────┐
│                    softbus_edge                           │
│  ┌─────────────────┐         ┌─────────────────────────┐ │
│  │ IngressWorker   │ poll    │ CompositeIngress        │ │
│  │ (采集线程)       │────────►│ Modbus / CAN / Eth      │ │
│  └────────┬────────┘         └─────────────────────────┘ │
│           │ push                                            │
│  ┌────────▼────────┐   drain   ┌─────────────────────────┐ │
│  │ PacketQueue     │──────────►│ 主线程:心跳 + uplink   │ │
│  └─────────────────┘           │ CommandExecutor 写回    │ │
│                                 └─────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘

2.4 双域配置模型

系统采用 物理域edge逻辑域daemon 分离:

配置域 典型文件 加载方 用途
物理域 config/edge/physical_channels.json edge 串口、TCP、CAN 接口参数
物理域 config/edge/physical_devices.json edge 从站、寄存器、物理点、CANopen 节点
物理域 config/edge/bindings_local.json edge 下行写命令本地备用解析(可选)
逻辑域 config/daemon/logical_points.json daemon OPC UA 逻辑点与对象模型
逻辑域 config/daemon/bindings_global.json daemon 物理点 ↔ 逻辑点 ↔ edgeId 绑定
运行配置 config/daemon/daemon_profile.json daemon OPC UA 端口、uplink 端口、插件名
运行配置 config/edge/edge.json edge edgeId、daemon 地址、心跳周期

edge 上行时不做 binding 初筛:所有已配置物理点均采集上报;是否映射到 OPC UA 节点由 daemon 的 bindings_global.json 决定。未绑定点进入 edge/unbound/raw/... 主题,不进入 Pipeline 解析。

2.5 对象模型五层结构

对象寻址路径格式:Site/System/Asset/Device/Point

DemoSite
└── DemoSystem
    └── DemoAsset
        └── EdgeDevice_01
            ├── MotorTemperature   ← OPC UA Variable
            ├── MotorSpeed
            └── ValveOpening       ← 可写,支持 Method 下行

逻辑点表由 PointRegistry 加载,驱动 UaAddressSpaceBuilder 动态构建 OPC UA 地址空间。

2.6 数据流概览

2.6.1 上行(设备 → OPC UA

现场硬件
  → ChannelManagerModbus/CAN/Ethper-channel 互斥)
  → *Ingress::poll()IngressWorker 采集线程)
  → PacketQueue
  → 主线程 drain → UplinkClient::sendRawPacket()
  → TCP :9000 → TransportBusBridge → Bus
  → PipelineEngine::process()
       → protocol_*.so Framer → Parser → DOMMessage
       → BindingRegistry 查逻辑点
       → UaModelBinder → OPC UA Variable 写值
       → StorageService 落盘 timeseries.jsonl

2.6.2 下行OPC UA → 设备)

OPC UA Client 调用 ExecuteCommand Method
  → UaMethodBinder
  → CommandService::submit()
       → BindingRegistry 解析 logicalPointId → physicalPointId + edgeId
       → TcpUplinkServer::sendCommand()
  → edge TcpUplinkClientio 线程回调)
  → CommandExecutor::execute()
       → ModbusEgress / CanEgress / EthEgress
       → ChannelManager 写寄存器 / SDO / 裸帧
  → SoftbusAck 回传 daemon

2.6.3 心跳与在线监测

  • edge 主线程按 heartbeatPeriodMs(默认 1000 ms向 daemon 发送心跳。
  • daemon HeartbeatMonitor 订阅 Bus 心跳主题,超时(默认 5 s发布 edge offline 事件。
  • 采集与 Modbus 重连已移至 IngressWorker 独立线程,主线程不再被阻塞,避免心跳饿死导致误判断线。

2.7 Edge 多线程架构(已实现)

线程 职责
主线程 ConfigWatcher、心跳、tickUplink、drain 队列发包
IngressWorker ingress_->poll() → PacketQueue.push()
Uplink ioThread 异步读 TCP、触发 CommandExecutor 下行写

并发保护:ModbusChannelManagerCanChannelManagerEthChannelManager 均为每个物理通道维护独立 ioMutex,采集线程与 uplink io 线程上的写操作互斥访问同一总线/套接字。

2.8 全局约束原则

  1. 传输中立softbus_core 模型字段不得编码 OPC UA、HTTP 等特定语义。
  2. 单向依赖:上层可依赖下层,下层不得反向引用 daemon/edge/opcua。
  3. 插件 ABI 稳定C ABI 导出 create_framer / create_parser,保证插件可独立升级。
  4. traceId 贯穿RawPacket → DOMMessage → OPC UA → 日志,全程可追踪。
  5. 热加载edge 监视 physical 配置daemon 监视 logical_points 与 bindings_globalSIGHUP / ConfigWatcher

第 3 章 Daemon 软件

3.1 Daemon 概览

Daemon 软件(softbus_daemon)作为软总线软件的核心运行进程,实现以下功能:

  • 监听边缘代理 TCP 上行,接收 RawPacket、心跳、注册信息;
  • 加载协议插件,将原始帧解析为统一语义消息;
  • 维护逻辑点表与全局绑定,驱动 OPC UA 地址空间;
  • 接收北向 OPC UA Method 调用,经 CommandService 路由至对应 edge
  • 监测 edge 心跳,发布在线/离线事件;
  • 可选时序数据持久化。

Daemon 直接访问串口、CAN 或 Modbus 硬件;所有物理 I/O 由 edge 完成。


3.2 架构设计

3.2.1 组件关系

CoreService 是唯一编排入口,按序装配各子系统:

CoreService编排中心
  ├── ProfileLoader              ← daemon_profile.json
  ├── PointRegistry              ← logical_points.json / topic_rule.json
  ├── BindingRegistry            ← bindings_global.json
  ├── PluginLoader (modbus)      ← protocol_modbus.so
  ├── Bus::instance()            ← 进程内消息总线
  ├── CommandService             ← 下行命令状态机
  ├── StorageService             ← 时序落盘
  ├── HeartbeatMonitor           ← edge 心跳超时
  ├── UaServerEngine             ← OPC UA 服务端 :4840
  ├── UaAddressSpaceBuilder      ← 由 ObjectModelTree 构建节点
  ├── UaModelBinder              ← DOMMessage → Variable 写值
  ├── UaMethodBinder             ← ExecuteCommand Method 入口
  ├── UaEventBridge              ← 事件桥接Phase 1 stub
  ├── PipelineEngine             ← RawPacket 解析管道
  ├── TransportBusBridge         ← TCP ↔ Bus 桥接
  ├── TcpUplinkServer            ← 上行监听 :9000
  └── ConfigWatcher              ← 配置热加载

3.2.2 线程模型

线程 / 上下文 职责
主线程run 循环) uaEngine_->iterate()、heartbeatMonitor_.tick()、ConfigWatcher
ioThread_ asio io_context处理 TcpUplinkServer 异步 I/O
OPC UA 内部线程 open62541 服务端事件(由 iterate 驱动)

主循环伪代码:

while (!shouldStop()) {
    configWatcher_.poll();
    if (reloadRequested()) reloadConfig();
    uaEngine_->iterate();
    heartbeatMonitor_.tick();
    sleep(10ms);
}

3.3 功能设计

3.3.1 上行接入

功能项 实现组件 说明
TCP 监听 TcpUplinkServer 默认 127.0.0.1:9000支持多 edge 连接
线协议解码 UplinkWire JSON 行rawPacket / executeCommand / heartbeat
Bus 发布 TransportBusBridge 按 topic 规则发布至 Bus
协议解析 PipelineEngine + 插件 Framer → Parser → DOMMessage
绑定映射 BindingRegistry physicalPointId → logicalPointId
OPC 写值 UaModelBinder 更新 Variable 节点
时序存储 StorageService 写入 data/logs/timeseries.jsonl

3.3.2 下行控制

功能项 实现组件 说明
Method 入口 UaMethodBinder OPC UA ExecuteCommand 方法
命令校验 CommandService objectRef 校验、路由解析、状态机
edge 路由 BindingRegistry logicalPointId → edgeId + physicalPointId
TCP 发送 TcpUplinkServer 编码 ExecuteCommand 线消息
ACK 等待 CommandService 等待 edge SoftbusAck返回 JSON 结果

3.3.3 运维与监测

功能项 实现组件 说明
心跳监测 HeartbeatMonitor 超时判定 edge offline
配置热加载 ConfigWatcher + SIGHUP 重载 logical_points、bindings_global
插件热路径 resolvePluginPath() 多目录搜索 libprotocol_*.so
自测模式 --self-test 启动 3 s 后自动下发写命令

3.4 方案设计

3.4.1 启动序列

CoreService::start(profilePath, logicalPointsPath, bindingsGlobalPath) 按序执行:

步骤 操作 失败行为
1 ProfileLoader 加载 daemon_profile.json 返回 false
2 PointRegistry 加载 logical_points.json 返回 false
3 BindingRegistry 加载 bindings_global.json 返回 false
4 PluginLoader 加载 protocol_modbus.so 返回 false
5 初始化 Bus、CommandService、Storage、Monitor
6 UaServerEngine 启动 OPC UA 返回 false
7 UaAddressSpaceBuilder 构建地址空间 返回 false
8 PipelineEngine 挂载 Bus 订阅
9 TcpUplinkServer 启动 + ioThread
10 UaMethodBinder 绑定 CommandService

3.4.2 Pipeline 三阶段处理

process(RawPacket)
  Stage 1 分帧   plugin_->framer()->extract(payload)
  Stage 2 解析   plugin_->parser()->parseFrame(frame, sourceId) → DOMMessage
  Stage 3 绑定   bindings 查表 → UaModelBinder::bind(DOMMessage)
                 StorageService 记录时序
  • 分帧失败:使用原始 payload 继续解析;
  • 解析失败:记录 warnTrace 日志,丢弃消息;
  • 无绑定:发布至 unbound 主题,不进入 OPC 绑定。

3.4.3 插件路径解析

resolvePluginPath(pluginName, profilePath) 搜索顺序:

  1. {profileDir}/lib/
  2. {cwd}/config/lib/
  3. {exeDir}/{exeDir}/../lib/
  4. build/lib/lib/

3.4.4 CLI 参数

参数 默认值 说明
--config config/daemon/daemon_profile.json 运行配置
--logical-points config/daemon/logical_points.json 逻辑点表
--bindings-global config/daemon/bindings_global.json 全局绑定
--point-table 兼容旧参数
--self-test 关闭 自动写值测试

3.5 模块设计

3.5.1 CoreService 核心服务模块

路径: src/softbus_daemon/include/softbus_daemon/core/CoreService.h
职责: Daemon 唯一编排入口,负责子系统生命周期管理、配置加载、主循环驱动。

1类接口
方法 说明
start(profilePath, logicalPointsPath, bindingsGlobalPath) 按序启动全部子系统
stop() 停止 uplink、io、OPC UA
run(selfTest) 阻塞主循环直至收到退出信号
2核心成员
成员 类型 职责
registry_ PointRegistry 逻辑点表与 ObjectModelTree
bindingRegistry_ BindingRegistry 物理—逻辑绑定与下行路由
modbusPlugin_ PluginLoader Modbus 协议插件句柄
pipeline_ PipelineEngine 上行解析管道
commandService_ CommandService 下行命令服务
uaEngine_ UaServerEngine OPC UA 服务端
uaBinder_ UaModelBinder 语义消息 → Variable
uaMethodBinder_ UaMethodBinder Method → CommandService
uplink_ TcpUplinkServer 边缘 TCP 接入
transportBridge_ TransportBusBridge TCP 与 Bus 双向桥接
heartbeatMonitor_ HeartbeatMonitor edge 在线状态
storageService_ StorageService 时序持久化
configWatcher_ ConfigWatcher 配置文件变更监视
3关键回调绑定
// 上行TransportBusBridge 将 RawPacket 发布至 Bus
// PipelineEngine 订阅 edge/raw/# 并 process()

// 下行OPC UA Method → CommandService
uaMethodBinder_->bindExecuteCommand([this](const ExecuteCommand& cmd) {
    return commandResultJson(commandService_->submit(cmd, true));
});
4配置热加载
  • SIGHUPConfigWatcher 触发 reloadConfig()
  • 重载 logical_points.jsonbindings_global.json
  • 通过 PointRegistry::diff() 记录新增逻辑点数量;
  • Phase 1 热加载重建 OPC UA 地址空间(增量构建为 Phase 2 规划)。
5依赖关系
CoreService
  → softbus_core, softbus_api, softbus_transport
  → softbus_pipeline, softbus_command, softbus_monitor
  → softbus_storage, softbus_registry, softbus_bus
  → softbus_opcua, asio
  → protocol_modbus构建依赖

3.5.2 其他 Daemon 关联模块(概要)

模块 路径 与 CoreService 关系
PipelineEngine src/softbus_pipeline CoreService 创建并 attachBus
CommandService src/softbus_command CoreService 创建MethodBinder 调用
HeartbeatMonitor src/softbus_monitor CoreService 创建,主循环 tick
StorageService src/softbus_storage CoreService 创建attachBus 落盘
TransportBusBridge src/softbus_transport CoreService 创建,连接 uplink 与 Bus
PointRegistry src/softbus_registry CoreService 加载逻辑配置
BindingRegistry src/softbus_registry CoreService 加载全局绑定
UaServerEngine src/softbus_opcua CoreService 启动北向服务

第 4 章 数据服务层演进(采集之上的能力扩展)

本章定位: 说明当前架构仅覆盖“采集—解析—暴露—落盘”主链路;数据管理、数据恢复、数据订阅、数据融合将在同一 Bus 与语义模型之上分层建设,而非替换现有 edge/daemon 分工。

4.1 当前能力边界Phase 1

已具备

能力 实现位置 说明
多协议采集 softbus_edge Modbus / CANopen / EthIngressWorker 多线程
协议解析 PipelineEngine + plugins RawPacket → DOMMessage
物理—逻辑映射 BindingRegistry physicalPointId → logicalPointId
北向读 UaModelBinder DOMMessage → OPC UA Variable最新值
北向写/命令 CommandService OPC UA Method → edge 写回
进程内发布 Bus data/{deviceId}/{pointId} Pipeline 解析后发布 SoftbusDataPoint
基础落盘 StorageService 订阅 data/# 写入 timeseries.jsonl
在线监测 HeartbeatMonitor edge 心跳超时 → offline 事件
变化过滤 edge ChangeFilter deadband / reportOnChange减少上行流量

尚未具备

能力 差距说明
数据管理 无统一元数据注册表、无质量码策略、无保留/归档策略、无访问 ACL
数据订阅 Bus 仅进程内OPC UA Subscription 未完整实现;无外部 MQTT/HTTP 订阅网关
数据融合 TimeAligner 已实现但未接入 Pipeline无合成测点/关联规则引擎
数据恢复 无 edge 断线缓存与补传;无历史回放 API无冗余源自动切换

4.2 目标总体架构(采集 + 数据服务)

在 Phase 1 的“采集管道”之上,增加 数据服务层Data Service Layer,与采集层通过 Bus 解耦:

┌─────────────────────────────────────────────────────────────────────────┐
│                         北向消费层 (Northbound)                          │
│   OPC UA Client · 订阅网关(MQTT/HTTP) · 可视化 · 第三方 MES/SCADA        │
└───────────────────────────────┬─────────────────────────────────────────┘
                                │ 订阅 / 查询 / 回放
┌───────────────────────────────▼─────────────────────────────────────────┐
│                      数据服务层 (Phase 24待建设)                      │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐       │
│  │ 数据管理     │ │ 数据订阅     │ │ 数据融合     │ │ 数据恢复     │       │
│  │ MetadataReg │ │ SubManager  │ │ FusionEngine│ │ RecoverySvc │       │
│  │ Catalog/ACL │ │ QoS/Filter  │ │ TimeAligner │ │ Buffer/Replay│       │
│  └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘       │
│         └────────────────┴──────────────┴──────────────┘               │
│                              softbus_bus                                │
│         data/# · fused/# · event/# · recovery/# · metadata/#            │
└───────────────────────────────┬─────────────────────────────────────────┘
                                │ 已发布 SoftbusDataPoint / DOMMessage
┌───────────────────────────────▼─────────────────────────────────────────┐
│                      采集与解析层 (Phase 1已实现)                       │
│  edge 采集 → uplink → PipelineEngine → Binding → UaModelBinder          │
│  StorageService (JSONL  append)                                         │
└───────────────────────────────┬─────────────────────────────────────────┘
                                │
                         现场设备 / 传感器

设计原则:

  1. 采集不变edge 仍只负责物理 I/O 与 RawPacket 上行,不承载融合/恢复逻辑。
  2. Bus 为中心:所有数据服务模块仅订阅/发布 Bus 主题,不反向依赖 OPC UA 或 TCP 细节。
  3. 逻辑点为一等公民:融合结果、恢复补洞、订阅过滤均以 logicalPointId / objectRef 标识。
  4. 可渐进交付:四个子能力可独立 Phase 交付,通过 Bus 主题约定保持兼容。

4.3 数据订阅Data Subscription

4.3.1 目标

让上层应用按主题、逻辑点、对象路径或表达式接收数据推送,而不是仅通过 OPC UA 客户端轮询 Variable 最新值。

4.3.2 分层设计

层级 组件(规划) 职责
进程内订阅 Bus已有 subscribe("data/DemoAsset/#") 过滤
订阅管理 SubscriptionManager 注册订阅者、QoS、采样/聚合策略、背压
OPC UA 订阅 UaSubscriptionBridge 将 Bus DataPoint 驱动 OPC UA MonitoredItem
北向网关 SubGateway (MQTT等) 对外发布 data/{deviceId}/{pointId} 映射主题

4.3.3 主题约定(已有基础)

config/daemon/topic_rule.json 已定义:

{
  "data": "data/{deviceId}/{pointId}",
  "command": "control/cmd/{deviceId}/{pointId}/set",
  "ack": "control/ack/{deviceId}/{pointId}",
  "event": "event/{deviceId}/{eventType}",
  "heartbeat": "system/heartbeat/{deviceId}"
}

Phase 2 扩展主题(规划):

主题模式 载荷类型 用途
fused/{logicalPointId} SoftbusDataPoint 融合后的合成测点
recovery/{edgeId}/gap GapReport 通信中断区间上报
metadata/point/{id} PointMetadata 元数据变更通知

4.3.4 QoS 维度(规划)

  • 采样率:订阅侧 maxRateHz高于采集率时由 SubscriptionManager 降采样。
  • 可靠性AtMostOnce / AtLeastOnce关键测点走持久化队列。
  • 延迟上限:融合/订阅链路 SLA 监控,超时打 quality=Uncertain。

4.4 数据融合Data Fusion

4.4.1 目标

实现第 0.2 节所述“动态分析设备间潜在关联,促进设备感知信息互补”:将来自不同 edge、不同协议、不同采样周期的测点对齐到统一时间轴计算合成量或关联事件。

4.4.2 典型场景

场景 输入 输出
多源对齐 温度(Modbus) + 转速(CANopen) 同一 anchor 时刻的对齐样本
冗余互补 双 Modbus 读同一物理量 择优或加权平均
衍生计算 电流 + 电压 功率(合成 logicalPoint
事件关联 阀位 + 流量 开阀-流量响应事件

4.4.3 组件设计(规划)

Bus data/# ──► FusionEngine
                  ├── TimeAligner已有 softbus_core待接入
                  ├── FusionRuleRegistry规则配置表达式 / 关联表)
                  ├── SyntheticPointPublisher
                  └── publish → fused/# + StorageService

已有基础: softbus_core::TimeAligner 支持按时间窗口(默认 50 ms多通道 Nearest/Linear 对齐,当前 未接入 Pipeline 主路径。

配置示例(规划):

{
  "fusionRules": [
    {
      "outputLogicalPointId": "EdgeDevice_01/ShaftPower",
      "inputs": ["EdgeDevice_01/MotorCurrent", "EdgeDevice_01/MotorVoltage"],
      "expression": "current * voltage",
      "alignWindowMs": 100
    }
  ]
}

4.5 数据恢复Data Recovery

4.5.1 目标

在 edge 断连、网络闪断或单源故障时,保证上层看到的数据可解释、可补全、可切换,避免“静默丢数”。

4.5.2 恢复策略

策略 触发条件 行为(规划)
edge 本地缓存 uplink 不可达 edge 环形缓冲 RawPacket恢复后按序补传
daemon 缺口检测 心跳超时 / 时间戳跳变 标记 [t0,t1] 为 Gap发布 recovery 事件
历史回放 运维 / 算法重算 RecoveryService 从时序库按时间范围重放至 Bus
冗余源切换 主 physicalPoint 失效 Binding 中声明 backupRecoverySvc 切换数据源
插值补洞 短缺口 & quality=Bad FusionEngine 或 RecoverySvc 线性/前值填充(可配置)

4.5.3 与 HeartbeatMonitor 的衔接

当前 HeartbeatMonitor 在超时后发布 offline 事件RecoveryService 应订阅该事件,联动:

  1. 将受影响 logicalPoint 的 quality 置为 Bad/Uncertain
  2. 若存在冗余 binding自动切换至 backup physicalPoint
  3. edge 重连后触发 gap fill 补传协议uplink 扩展消息类型 replayBatch)。

4.5.4 edge 侧扩展(规划)

uplink 断连期间:
  PacketQueue已有→ 持久化 RingBuffer新增 RecoveryBuffer
uplink 恢复:
  sendReplayBatch(RawPacket[]) → daemon RecoveryService 去重合并

4.6 数据管理Data Management

4.6.1 目标

使软总线在传递数据的同时承担信息管理职责:谁产生、何时有效、质量如何、保留多久、谁能访问。

4.6.2 管理维度

维度 内容(规划) Phase 1 现状
元数据 点描述、单位、量程、采样周期、数据源 edgeId logical_points 部分有
质量码 Good / Uncertain / Bad带来源与时间戳 未映射至 OPC Status
生命周期 热数据 / 温数据 / 归档策略 仅 JSONL 无限追加
目录与检索 按 Site/System/Asset 浏览、按 tag 搜索 ObjectModelTree 静态
访问控制 读/写/订阅权限(与 OPC UA Role 或外部 IAM 对接) 未实现
血缘 physicalPoint → binding → logicalPoint → fusedPoint 仅 binding 静态配置

4.6.3 组件设计(规划)

MetadataRegistrydaemon 已有 stub未接入 CoreService
  ├── 与 PointRegistry / BindingRegistry 联合索引
  ├── 发布 metadata/# 变更事件
  └── 为 SubscriptionManager / FusionEngine 提供查询 API

CatalogService
  ├── 数据资产编目(设备、测点、主题、保留策略)
  └── StorageService 升级:按策略轮转 / 压缩 / 导出 Parquet

RetentionPolicy
  └── 配置timeseries 保留 30 天event 保留 90 天fused 保留 7 天

4.6.4 StorageService 演进

当前 StorageService 订阅 data/#control/ack/#event/# 追加 JSONL。

演进方向:

  • 分表/分文件:按 deviceId 或日期切分;
  • 索引:时间范围查询接口,供 RecoveryService 回放;
  • 与 MetadataRegistry 联动:落盘记录含 quality、sourceEdgeId、bindingId。

4.7 四能力协作关系

flowchart LR
    subgraph collect [采集层 Phase1]
        Edge[softbus_edge]
        Pipeline[PipelineEngine]
    end

    subgraph bus [Bus]
        DataTopic[data/#]
        FusedTopic[fused/#]
        RecoveryTopic[recovery/#]
    end

    subgraph mgmt [数据管理]
        Meta[MetadataRegistry]
        Catalog[CatalogService]
        Storage[StorageService]
    end

    subgraph sub [数据订阅]
        SubMgr[SubscriptionManager]
        OpcSub[UaSubscriptionBridge]
        Gateway[SubGateway]
    end

    subgraph fusion [数据融合]
        Align[TimeAligner]
        Fusion[FusionEngine]
    end

    subgraph recovery [数据恢复]
        RecSvc[RecoveryService]
        EdgeBuf[edge RecoveryBuffer]
    end

    Edge --> Pipeline
    Pipeline --> DataTopic
    DataTopic --> Storage
    DataTopic --> Align
    Align --> Fusion
    Fusion --> FusedTopic
    DataTopic --> SubMgr
    FusedTopic --> SubMgr
    SubMgr --> OpcSub
    SubMgr --> Gateway
    Meta --> Catalog
    Meta --> SubMgr
    RecSvc --> RecoveryTopic
    EdgeBuf --> RecSvc
    RecSvc --> DataTopic
    HeartbeatMonitor --> RecSvc

典型链路示例:

  1. 正常订阅: 采集 → Pipeline → data/# → SubscriptionManager → OPC UA / MQTT 推送。
  2. 融合订阅: 多路 data/# → TimeAligner → FusionEngine → fused/# → 订阅者。
  3. 断线恢复: Heartbeat 超时 → RecoveryService 标记 Gap → edge 补传 → 合并入 Storage → quality 恢复 Good。
  4. 管理审计: MetadataRegistry 记录血缘 → Catalog 展示 → RetentionPolicy 归档历史。

4.8 分阶段交付路线

阶段 主题 交付内容 依赖现有模块
Phase 1 数据采集 edge 多线程采集、Pipeline、OPC UA、JSONL 落盘、Bus 发布 当前
Phase 2 数据订阅 + 管理 SubscriptionManager、OPC UA Subscription、MetadataRegistry 接入、Storage 分片与索引 Bus、PointRegistry、StorageService
Phase 3 数据融合 TimeAligner 接入、FusionRule 配置、合成测点发布至 fused/# Pipeline publishDataPoint
Phase 4 数据恢复 edge RecoveryBuffer、gap 协议、冗余 binding 切换、历史回放 API HeartbeatMonitor、Transport

4.9 与 CoreService 的集成方式(规划)

四个子能力均作为 CoreService 的可选子模块 挂载,不改变 edge 进程边界:

// 规划CoreService::start() 扩展
metadataRegistry_->load(...);
subscriptionManager_->attachBus(&bus);
fusionEngine_->attachBus(&bus);      // 订阅 data/#,发布 fused/#
recoveryService_->attachBus(&bus);   // 订阅 event/#、heartbeat
// StorageService 升级为 IDataStore 接口,供 Recovery 查询

模块间仅通过 Bus 主题与 Registry 查询 API 通信,避免 CoreService 直接调用 Fusion/Recovery 内部细节,保持与 Phase 1 插件化风格一致。


附录 A Edge 软件概要

Edge 详细设计见 softbus_edge.md

项目 说明
进程 softbus_edge
核心类 EdgeRuntime、IngressWorker、PacketQueue、CommandExecutor
采集 CompositeIngressModbusIngress + CanIngress + EthIngress
调度 ModbusPollScheduler、PollPlanner、ChangeFilter
CANopen NmtManager、PdoMapper、SdoClient
上行 UplinkClient → TcpUplinkClient独立 ioThread
并发 采集线程 + 主线程 + uplink io 线程per-channel ioMutex

附录 B 文档索引

文档 内容
ARCHITECTURE.md 英文分层架构与构建目标
softbus_daemon.md Daemon 模块细节
softbus_edge.md Edge 物理层与多线程
数据流转.md 上下行字段映射
UPLINK_WIRE_PROTOCOL.md 线协议格式
command_flow.md 下行命令时序
plugins.md 协议插件 ABI

附录 C 演进路线汇总

C.1 Phase 1当前— 数据采集与透传

  • edge 多协议采集Modbus / CANopen / Eth+ IngressWorker 多线程;
  • Pipeline 解析 + Binding + OPC UA 暴露;
  • Bus 发布 data/# + StorageService JSONL 落盘;
  • CommandService 下行写回 + HeartbeatMonitor 在线监测。

C.2 Phase 2 — 数据订阅与数据管理

  • SubscriptionManager + OPC UA MonitoredItem/Subscription 完整实现;
  • MetadataRegistry 接入 CoreService质量码映射至 OPC StatusCode
  • StorageService 分片、时间范围查询、保留策略;
  • 可选北向 SubGatewayMQTT/HTTP

C.3 Phase 3 — 数据融合

  • TimeAligner 接入 FusionEngine
  • fusionRules 配置化(表达式 / 关联规则);
  • 合成测点发布至 fused/# 并进入 OPC UA 地址空间;
  • CANopen 插件多路由并行解析。

C.4 Phase 4 — 数据恢复

  • edge RecoveryBuffer + uplink 补传协议;
  • RecoveryServiceGap 检测、冗余 binding 切换、历史回放;
  • 与 Fusion/Subscription 联动 quality 状态机;
  • 多 edge 负载与故障转移策略。

C.5 其他基础设施

  • D-Bus IPC 接入 CoreService
  • OPC UA 地址空间增量热重建;
  • TLS/mTLS 生产部署;
  • CommandExecutor 专用 egress 线程。

文档版本Phase 1 代码库 + 数据服务层演进规划(第 4 章)。术语定义见第 0.1 节。