跳转至

数据流模式

本文引用的文件
- src/pipeline_runtime.v - src/relay_pipeline_runtime.v - src/stream_runtime.v - src/transformer_runtime.v - src/dispatch/exchange.v - src/dispatch/pipeline.v - src/dispatch/runtime_services.v - src/relay/channel.v - src/relay/carrier_runtime.v - src/upstream/transport/worker_pool.v - src/upstream/transport/error_classifier.v - src/admin_runtime_context.v - src/admin_runtime_graph.v - docs/PROTOCOL_PIPELINE_IMPLEMENTATION_PLAN.md

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与可扩展性
  8. 故障排查指南
  9. 结论
  10. 附录:自定义管道与转换器示例路径

简介

本文件聚焦 VHTTPD 的数据流模式,围绕以下四类运行时进行系统化说明: - Pipeline Runtime(管道运行时):分层数据处理、匹配路由、策略与转换链执行、终端适配。 - Stream Runtime(流式处理):面向实时数据的 open/next/close 生命周期与状态传递。 - Relay Pipeline Runtime(中继管道):跨进程/跨节点的数据转发,基于 WireFrame 的通道与背压缓冲。 - Transformer Runtime(转换器运行时):可插拔的格式转换与协议桥接,支持能力声明与运行期快照。

文档将给出架构图与关键流程图,解释设计原理、适用场景与性能特点,并指出实现自定义管道与转换器的参考路径。同时覆盖背压控制、错误传播与监控指标收集等高级特性。

项目结构

VHTTPD 的数据流相关代码主要分布在如下模块: - 调度与交换模型:dispatch 模块定义 Exchange、TransformAction、Capabilities 等核心类型,以及管道描述符与能力校验。 - 管道运行时:pipeline_runtime 负责 HTTP 请求匹配、缓存命中/回写、以及中继管道的入口映射。 - 中继管道:relay_pipeline_runtime 将外部帧转换为 Exchange,执行转换链与适配器输出,并通过载体发送响应。 - 流式运行时:stream_runtime 提供 Open/Next/Close 的上下文封装,对接内核分发。 - 转换器运行时:transformer_runtime 维护注册表、原生转换器实现与运行期快照。 - 中继通道与载体:relay/channel 管理通道缓冲与限流;relay/carrier_runtime 负责载体附着与发送。 - 上游传输与错误分类:upstream/transport 提供工作进程池管理与错误分类。 - 可观测性与图:admin_runtime_context 暴露队列深度、池大小等指标;admin_runtime_graph 生成运行时图。

graph TB
subgraph "调度与交换"
EX["Exchange/TransformAction/Capabilities"]
PD["PipelineDescriptor/TerminalDescriptor"]
end
subgraph "管道运行时"
PR["PipelineRuntime<br/>HTTP匹配/缓存/计划"]
RPR["RelayPipelineRuntime<br/>中继入口/适配器"]
end
subgraph "中继"
CH["ChannelRegistry<br/>缓冲/限流"]
CR["CarrierRuntime<br/>附着/发送"]
end
subgraph "流式"
SR["StreamRuntimeContext<br/>Open/Next/Close"]
end
subgraph "转换器"
TRH["TransformerRuntimeHub<br/>注册/执行/快照"]
end
EX --> PR
EX --> RPR
PR --> TRH
RPR --> TRH
RPR --> CR
CR --> CH
SR --> EX

图表来源 - src/dispatch/exchange.v:1-160 - src/dispatch/pipeline.v:1-119 - src/pipeline_runtime.v:1-224 - src/relay_pipeline_runtime.v:1-437 - src/relay/channel.v:1-164 - src/relay/carrier_runtime.v:1-76 - src/stream_runtime.v:1-48 - src/transformer_runtime.v:1-344

章节来源 - src/dispatch/exchange.v:1-160 - src/dispatch/pipeline.v:1-119 - src/pipeline_runtime.v:1-224 - src/relay_pipeline_runtime.v:1-437 - src/relay/channel.v:1-164 - src/relay/carrier_runtime.v:1-76 - src/stream_runtime.v:1-48 - src/transformer_runtime.v:1-344

核心组件

  • Exchange 与 TransformAction:统一的数据交换体与转换动作,贯穿所有运行时。
  • PipelineDescriptor:声明 ingress、transforms、policies、egress 及所需 Capabilities。
  • TransformerRuntimeHub:从 RuntimePlan 装配转换器,支持原生与 VJSX 后端,提供 run_transform_refs 顺序执行与短路。
  • RelayPipelineRuntime:将中继帧映射为 Exchange,执行转换链,调用适配器或终端,并将结果通过载体写出。
  • StreamRuntimeContext:封装 Open/Next/Close 分发回调,供上层流式逻辑使用。
  • ChannelRegistry:按 channel_id 管理缓冲队列与上限,提供 enqueue/drain/drain_returned 等接口。
  • CarrierRuntime:载体附着、连接检查与发送,返回发送结果用于事件上报。

章节来源 - src/dispatch/exchange.v:1-160 - src/dispatch/pipeline.v:1-119 - src/transformer_runtime.v:1-344 - src/relay_pipeline_runtime.v:1-437 - src/stream_runtime.v:1-48 - src/relay/channel.v:1-164 - src/relay/carrier_runtime.v:1-76

架构总览

下图展示四种数据流模式在系统中的交互关系与边界。

sequenceDiagram
participant Client as "客户端/上游"
participant Ingress as "协议入口(HTTP/MCP/WS)"
participant Pipe as "PipelineRuntime"
participant Trans as "TransformerRuntimeHub"
participant Adapter as "Egress适配器"
participant Relay as "RelayPipelineRuntime"
participant Carrier as "CarrierRuntime"
participant Chan as "ChannelRegistry"
participant Stream as "StreamRuntimeContext"
Client->>Ingress : 请求/帧/消息
Ingress->>Pipe : 构建Exchange并匹配管道
Pipe->>Trans : 执行transforms(顺序/短路)
alt 终端/适配器
Trans-->>Pipe : continue_pipeline/respond/reject/drop
Pipe->>Adapter : deliver()
Adapter-->>Client : 响应/事件
else 中继
Pipe->>Relay : 构造入站Exchange
Relay->>Trans : 执行transforms
Relay->>Adapter : deliver()
Adapter-->>Relay : DeliveryOutcome
Relay->>Carrier : send(response_frame)
Carrier->>Chan : enqueue/limit
Carrier-->>Client : 写出WireFrame
else 流式
Stream->>Stream : dispatch_open/next/close
Stream-->>Client : 分块/结束/关闭
end

图表来源 - src/pipeline_runtime.v:1-224 - src/relay_pipeline_runtime.v:1-437 - src/transformer_runtime.v:1-344 - src/relay/carrier_runtime.v:1-76 - src/relay/channel.v:1-164 - src/stream_runtime.v:1-48

详细组件分析

Pipeline Runtime(管道运行时)

  • 职责
  • 将协议请求标准化为 Exchange,匹配编译后的规则,计算目标路径与引擎。
  • 提供静态资源根、目录斜杠重定向、响应缓存命中/存储决策。
  • 为中继管道提供入口映射,按 relay_id 获取管道描述符集合。
  • 关键点
  • match_http_request 将 HTTP 值转为 Exchange 并匹配规则。
  • http_response_cache_hit/store 根据规则 TTL、方法、请求绕过原因与交付结果决定是否缓存。
  • http_dispatch_plan 决定最终 target、executor 与 pipeline_id。
  • 适用场景
  • 传统 HTTP 请求的分层处理、路由重写、缓存命中、终端/适配器选择。
  • 性能特点
  • 内存中匹配与缓存,避免重复解析;命中时直接返回,降低延迟。
flowchart TD
Start(["进入PipelineRuntime"]) --> BuildEx["构建Exchange并匹配规则"]
BuildEx --> Matched{"是否匹配?"}
Matched -- "否" --> NoMatch["返回空计划/默认行为"]
Matched -- "是" --> CacheCheck["检查响应缓存TTL与绕过条件"]
CacheCheck --> Hit{"缓存命中?"}
Hit -- "是" --> ReturnCache["返回缓存结果"]
Hit -- "否" --> Dispatch["生成DispatchPlan并继续后续处理"]
Dispatch --> End(["结束"])
ReturnCache --> End
NoMatch --> End

图表来源 - src/pipeline_runtime.v:91-143 - src/pipeline_runtime.v:174-223

章节来源 - src/pipeline_runtime.v:1-224

Stream Runtime(流式处理)

  • 职责
  • 封装 emit、dispatch_open、dispatch_next、dispatch_close 回调,向上游暴露统一的流式上下文。
  • 将调用委托至内核分发函数,保持协议无关的流式语义。
  • 关键点
  • StreamRuntimeContext 仅持有函数指针,便于在不同上下文中注入具体实现。
  • build_stream_runtime_context 将 App 的方法绑定到上下文。
  • 适用场景
  • SSE/长轮询/自定义流式协议的生命周期管理。
  • 性能特点
  • 轻量上下文对象,零拷贝传递状态 map,适合高频 next 调用。
classDiagram
class StreamRuntimeContext {
+emit(kind, fields)
+dispatch_open(method,path,body,remote_addr,req_id,trace_id,query,headers) !Response
+dispatch_next(method,path,remote_addr,req_id,trace_id,query,headers,state) !Response
+dispatch_close(req_id,trace_id,state,reason) !Response
}

图表来源 - src/stream_runtime.v:1-48

章节来源 - src/stream_runtime.v:1-48

Relay Pipeline Runtime(中继管道)

  • 职责
  • 将来自载体的 WireFrame 转换为 Exchange,按 relay_id 查找管道描述符并批量派发。
  • 执行 transforms,若中止则按 action 生成响应;否则调用 egress 适配器或终端。
  • 将 DeliveryOutcome 映射为响应帧,通过载体写出,并记录发送结果与事件。
  • 关键点
  • ingress_exchanges 为每个管道描述符创建入站 Exchange。
  • dispatch_relay_ingress_frame 聚合多个管道的结果,逐一发送并上报事件。
  • relay_pipeline_outcome_from_delivery 将 response/accepted/failure 映射为 action/status/body/headers。
  • relay_channel 缓冲与限流:enqueue 失败即报错,drain/drain_returned 支持选择性回收。
  • 适用场景
  • 跨进程/跨节点的协议桥接与事件转发,如 MCP/Feishu 桥接、内部服务间消息路由。
  • 性能特点
  • 内存中 Exchange 传递,避免序列化;通道缓冲限制防止 OOM。
sequenceDiagram
participant Carrier as "载体"
participant Relay as "RelayPipelineRuntime"
participant Hub as "TransformerRuntimeHub"
participant Adapter as "Egress适配器"
participant Chan as "ChannelRegistry"
Carrier->>Relay : receive(WireFrame)
Relay->>Relay : ingress_exchanges(relay_id, carrier_id, frame)
loop 对每个管道
Relay->>Hub : run_transform_refs(transforms, services, exchange)
alt transform 中止
Relay-->>Carrier : 生成action响应
else 继续
Relay->>Adapter : deliver(services, exchange)
Adapter-->>Relay : DeliveryOutcome
Relay->>Carrier : send(response_frame)
Carrier->>Chan : enqueue/limit
end
end

图表来源 - src/relay_pipeline_runtime.v:97-168 - src/relay_pipeline_runtime.v:170-193 - src/relay_pipeline_runtime.v:332-361 - src/relay/channel.v:101-141

章节来源 - src/relay_pipeline_runtime.v:1-437 - src/relay/channel.v:1-164

Transformer Runtime(转换器运行时)

  • 职责
  • 从 RuntimePlan 装配转换器,维护 native/vjsx 注册表,提供 has/available/entry/transform/run_transform_refs/snapshot。
  • 原生转换器实现如 feishu.event.summary、protocol.bridge,读取 payload/metadata 并写入 metadata 或返回 forward。
  • 关键点
  • run_transform_refs 顺序执行,遇到非 continue 立即短路返回。
  • snapshot 暴露 total/available/native_count/vjsx_count 与条目能力字段。
  • capabilities 与 pipeline 能力校验确保输入/输出兼容。
  • 适用场景
  • 协议桥接、事件摘要提取、元数据增强、格式转换。
  • 性能特点
  • 原生转换器无额外进程开销;VJSX 复用现有引擎/lane 队列。
classDiagram
class TransformerRuntimeHub {
+from_plan(plan)
+has(id) bool
+available(id) bool
+entry(id) ?Entry
+transform(id, services, exchange) !Action
+run_transform_refs(refs, services, exchange) !Result
+snapshot() Snapshot
}
class NativeTransformer {
+id() string
+capabilities() Capabilities
+warmup(services) !
+transform(services, exchange) !Action
+close() void
}
TransformerRuntimeHub --> NativeTransformer : "注册/执行"

图表来源 - src/transformer_runtime.v:67-139 - src/transformer_runtime.v:213-250

章节来源 - src/transformer_runtime.v:1-344 - src/dispatch/exchange.v:106-150 - src/dispatch/pipeline.v:44-90

依赖关系分析

  • 低耦合的交换模型:Exchange/TransformAction/Capabilities 作为纯数据结构,被各运行时共享,避免引入协议细节。
  • 管道描述符与能力校验:pipeline_capabilities_valid 与 missing_capabilities 保证 ingress/transform/egress 的能力契约。
  • 中继与载体:relay_pipeline_runtime 依赖 carrier_runtime 与 channel_registry 完成背压与写出。
  • 流式上下文:stream_runtime 仅依赖 transport.StreamDispatchResponse 等协议无关结构。
  • 可观测性:transformer_runtime.snapshot 与 admin_runtime_context 暴露队列深度、池大小等指标,便于监控。
graph LR
EX["Exchange/TransformAction"] --> PR["PipelineRuntime"]
EX --> RPR["RelayPipelineRuntime"]
EX --> SR["StreamRuntimeContext"]
PD["PipelineDescriptor/Capabilities"] --> PR
PD --> RPR
TRH["TransformerRuntimeHub"] --> PR
TRH --> RPR
CR["CarrierRuntime"] --> RPR
CH["ChannelRegistry"] --> CR

图表来源 - src/dispatch/exchange.v:1-160 - src/dispatch/pipeline.v:1-119 - src/pipeline_runtime.v:1-224 - src/relay_pipeline_runtime.v:1-437 - src/relay/carrier_runtime.v:1-76 - src/relay/channel.v:1-164 - src/stream_runtime.v:1-48 - src/transformer_runtime.v:1-344

章节来源 - src/dispatch/exchange.v:1-160 - src/dispatch/pipeline.v:1-119 - src/pipeline_runtime.v:1-224 - src/relay_pipeline_runtime.v:1-437 - src/relay/carrier_runtime.v:1-76 - src/relay/channel.v:1-164 - src/stream_runtime.v:1-48 - src/transformer_runtime.v:1-344

性能与可扩展性

  • 背压控制
  • 中继通道:ChannelRegistry.enqueue 在 buffered.len >= buffer_limit 时报错,防止无限增长;drain/drain_returned 定期消费缓冲。
  • 载体发送:carrier_runtime.send_to_carrier 先检查 ready 与 connected,再发送,返回 ok/queued/error 以便上层统计。
  • 上游工作进程:error_classifier 将“队列满/超时”分类为 503/504 并带 error_class,便于快速定位瓶颈。
  • 错误传播
  • 中继管道:transform 异常或未知 adapter/egress 会返回 failure outcome,包含 status、error、error_class。
  • 管道能力不匹配:pipeline_capability_issues 报告缺失能力,启动期即可发现配置问题。
  • 监控指标
  • 管理员上下文暴露 worker_queue_depth、worker_pool_size、worker_backend_mode、worker_queue_capacity、worker_queue_timeout_ms、ws_hub_dispatch_mode 等。
  • 转换器快照暴露 registered transforms、backend kind、availability、capabilities。
  • 运行时图 admin_runtime_graph 可视化 listener/pipeline/adapter/engine/transform 的关系。

章节来源 - src/relay/channel.v:101-141 - src/relay/carrier_runtime.v:57-76 - src/upstream/transport/error_classifier.v:1-18 - src/admin_runtime_context.v:78-104 - src/transformer_runtime.v:167-211 - src/admin_runtime_graph.v:67-120

故障排查指南

章节来源 - src/relay_pipeline_runtime.v:97-117 - src/transformer_runtime.v:162-165 - src/relay/channel.v:108-113 - src/upstream/transport/error_classifier.v:1-18 - src/upstream/transport/worker_pool.v:204-218 - src/dispatch/pipeline.v:92-112

结论

VHTTPD 的数据流以 Exchange 为核心,通过 Pipeline/Relay/Stream/Transformer 四类运行时协同,实现了高内聚、低耦合、可扩展的处理链路。中继管道提供跨进程转发与背压保障,流式运行时简化了实时数据生命周期管理,转换器运行时提供了灵活的协议桥接与格式转换能力。配合能力校验、错误分类与丰富的运行时快照,系统在生产环境中具备良好的可观测性与稳定性。

附录:自定义管道与转换器示例路径

章节来源 - src/transformer_runtime.v:120-135 - src/transformer_runtime.v:230-250 - src/pipeline_runtime.v:58-75 - src/relay_pipeline_runtime.v:97-134 - src/stream_runtime.v:30-47 - src/dispatch/pipeline.v:97-112 - src/config/v2_plan_compiler_test.v:880-912