SSL/TLS 控制面加密

URPC 支持基于 OpenSSL 的控制面加密:

  • 通过 urpc_ssl_config_set 配置 SSL 参数(PSK 模式或证书模式)
  • 支持 TLS 1.2 / TLS 1.3
  • 可配置 cipher list 和 cipher suites
  • Server 和 Client 各自维护 SSL 上下文

数据面 AES-GCM 加密

flowchart TB N0[ctx, sge, sge_num, hdr_index, first_sge_offset] N1[ctx] N2[ctx, EVP_aes_256_gcm(] N3[EVP_CTRL_GCM_GET_TAG, 16, tag]

扩展机制(Ext Ops)

URPC 提供 ext_ops_t 扩展接口,允许用户自定义:

// dp.h: ext_ops_t
typedef struct ext_ops {
    int (*rx_req_process)(ext_call_ctx_t *, req_ctx_t **, urpc_poll_msg_t *);
    int (*tx_read_process)(ext_call_ctx_t *, urpc_poll_msg_t *);
    int (*tx_read_err_process)(ext_call_ctx_t *, urpc_poll_msg_t *);
    void (*ext_proto_fill_extra_info)(urpc_req_head_t *, queue_local_t *, queue_remote_t *);
    bool (*timeout_create_process)(urpc_call_wr_t *, req_entry_t *);
    int (*encrypt)(urpc_hdr_type_t, urpc_cipher_t *, urpc_sge_t *, uint32_t);
    int (*decrypt)(urpc_hdr_type_t, urpc_cipher_t *, urpc_sge_t *, uint32_t);
    int (*stream_send_process)(void *, uint32_t, uint32_t, uint32_t);
    int (*rx_rsp_process)(ext_call_ctx_t *, urpc_poll_msg_t *);
} ext_ops_t;

Token 策略

UMQ 实现了可选的 token 策略(UMQ_FEATURE_ENABLE_TOKEN_POLICY):

  • 启用时,Jetty 和 segment token 通过 urpc_rand_generate 生成随机值
  • 禁用时,使用 get_timestamp() 作为 token(低安全场景)
  • Token 在 bind 信息交换时传递给对端,确保只有持有正确 token 的远端能访问本端内存

Summary Table: URPC 在 UB 上的增量功能总览

层级UB 原生能力URPC/UMQ 增量功能核心价值
传输模式单一 UB 原生 (64KB)8 种传输模式(UB/UB_PLUS/IB/UCP/IPC/UBMM 等)一套 API 覆盖跨节点、同节点、同进程全场景
大块传输64KB 最大消息UB_PLUS 反向拉取扩展到 10MB存储/训练大块数据零分片传输
流控无基于 immediate 的窗口流控 + 统计查询防止接收端溢出,支持大规模部署
内存管理单次 import多内存池导入协议 + EID 拓扑管理支持多 EID、多 segment 并发
RPC 协议无REQ/ACK/RSP 状态机 + 三种参数传递函数调用语义,引用传参零拷贝
连接管理无Keepalive + 控制面协议 + Channel 抽象生产级可靠性与可运维性
安全Token(可选)SSL/TLS 控制面 + AES-GCM 数据面端到端加密,多租户安全隔离
事件模型Async event中断/轮询双模式 + Pro API 精细控制适应延迟敏感与吞吐优先两种场景
DFX无Perf 时延统计 + Stats 报文统计 + Flowctl 统计可观测、可调试、可优化
扩展性固定流程ext_ops 注册 + func_defined 自定义模块适配 DataNet、存储等异构场景

Conclusion

URPC 在 UB 总线上构建了一套完整的"从硬件原语到函数调用语义"的技术栈。通过本次深度代码分析,我们揭示了以下关键洞察:

  • 分层抽象:URMA → UMQ/URPC Framework → 公共 API,每层只关注本层职责,通过 ops 接口实现多态
  • 带内控制:利用 immediate 数据编码流控、内存导入、反向拉取等控制协议,不占用数据通道
  • 并发安全:tx_ctx 双次释放、req_entry hash+线性探测、读写锁分离等精细并发控制
  • 资源复用:JFR/JFC 通过 ref_cnt 在多个队列间共享
  • 用户可选:每一层增量功能都是可选的(feature flag),适应不同场景
  • 生产级特性:Keepalive、DFX、SSL/TLS、300K 并发 Channel

从架构视角看,URPC 的设计遵循了"分层抽象、带内控制、用户可选"的原则——既能以最小开销运行在延迟敏感的推理场景,也能以全功能模式运行在需要流控和加密的训练/存储场景。


References

  • UMDK README — umdk/README.md、umdk/README.ch.md
  • URPC Framework API — umdk/src/urpc/include/framework/urpc_framework_api.h
  • URPC Framework Types — umdk/src/urpc/include/framework/urpc_framework_types.h
  • UMQ API — umdk/src/urpc/include/umq/umq_api.h
  • UMQ Types — umdk/src/urpc/include/umq/umq_types.h
  • URPC Protocol — umdk/src/urpc/framework/protocol/protocol.h
  • URPC Datapath — umdk/src/urpc/framework/lib/datapath/dp.c(2,094 行)
  • URPC Control Plane — umdk/src/urpc/framework/lib/control/cp.c(3,014 行)
  • Channel 管理 — umdk/src/urpc/framework/core/channel/channel.c(1,471 行)
  • Queue Send/Recv — umdk/src/urpc/framework/core/queue/jetty/queue_send_recv.c(1,533 行)
  • Jetty Provider — umdk/src/urpc/framework/core/queue/jetty/provider_ops_jetty.c
  • Jetty Public Func — umdk/src/urpc/framework/core/queue/jetty/jetty_public_func.c(1,533 行)
  • UMQ UB Core — umdk/src/urpc/umq/umq_ub/core/private/umq_ub.c(2,163 行)
  • UMQ UB Impl — umdk/src/urpc/umq/umq_ub/core/umq_ub_impl.c(1,485 行)
  • UMQ UB Flow Control — umdk/src/urpc/umq/umq_ub/core/flow_control/umq_ub_flow_control.c
  • UMQ UB Imm Data — umdk/src/urpc/umq/umq_ub/core/umq_ub_imm_data.h
  • Keepalive Task — umdk/src/urpc/framework/lib/manager/keepalive_task.c(922 行)
  • Keepalive Probe — umdk/src/urpc/framework/lib/manager/keepalive_probe.c
  • Crypto — umdk/src/urpc/framework/lib/control/crypto/crypto.c
  • Control Plane IP Transport — umdk/src/urpc/framework/lib/control/ip/transport.c(1,548 行)
  • UMDK 中文文档 — umdk/doc/ch/urpc/