# DPDK Market Data Feed Handler 基于 DPDK 用户态 TCP/WebSocket 协议栈的**生产级行情接入网关**。 ## 产品定位 金融行业最典型的低延迟场景:从交易所或行情提供商接收实时 WebSocket 行情数据,以微秒级延迟解析并转发给下游交易系统。 ## 功能 - 零拷贝 DPDK 数据路径(跨核 < 1μs) - 多品种行情订阅(股票代码、期货合约) - **延迟直方图统计**:min / avg / P50 / P95 / P99 / max(微秒级) - **消息速率跟踪**:每品种 msg/s - 定时统计输出(可配间隔) - SIGINT/SIGTERM 优雅退出 - 断线检测与统计 ## 编译 ```bash cd .. && make app # 产物: build/market_feed ``` ## 运行 ### 1. 启动行情服务端(任选一种) ```bash # Python 零依赖服务端 python3 demo/market_data_server.py 8080 100 # C 高性能 echo 服务端(兼容测试) ./test/ws_echo_server 8080 ``` ### 2. 启动 DPDK 行情网关 ```bash ./build/market_feed -l 0-1 -n 2 \ -d /drivers/librte_mempool_ring.so \ -d /drivers/librte_net_ixgbe.so \ -- -a -p 8080 -l \ -s '{"action":"subscribe","symbols":["AAPL","GOOGL","MSFT","TSLA"]}' \ -t 5 ``` ### 参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `-a` | 行情服务器 IP | 192.168.1.100 | | `-p` | 行情服务器端口 | 8080 | | `-w` | WebSocket 路径 | /ws | | `-s` | 订阅消息 (JSON) | 必填 | | `-l` | DPDK 本地 IP | 192.168.0.115 | | `-t` | 统计输出间隔 (秒) | 5 | | `-k` | Ping 间隔 (秒), 0=关闭 | 30 | ## 输出示例 ``` ┌──────────────────────────────────────────────────────────────┐ │ Market Data Feed Stats │ ├────────┬──────────┬────────┬────────┬────────┬────────┬──────┤ │ Symbol │ Msgs │ Rate │ Min │ Avg │ P50 │ P99 │ │ │ │ msg/s │ (us) │ (us) │ (us) │ (us) │ ├────────┼──────────┼────────┼────────┼────────┼────────┼──────┤ │ AAPL │ 498 │ 99 │ 598 │ 821 │ 780 │ 1245 │ │ GOOGL │ 497 │ 99 │ 587 │ 815 │ 772 │ 1230 │ │ MSFT │ 498 │ 99 │ 601 │ 832 │ 790 │ 1260 │ │ TSLA │ 498 │ 99 │ 592 │ 818 │ 775 │ 1238 │ └────────┴──────────┴────────┴────────┴────────┴────────┴──────┘ ``` > 延迟 = 服务端 `timestamp` → DPDK 客户端 `rte_get_timer_cycles` 的端到端时间。 > 包含:服务端序列化 + 内核 TCP 发送 + 网络传输 + DPDK 协议栈处理 + WS 帧解码。 ## 架构 ``` ┌─────────────┐ ┌──────────────────────────────────────┐ │ Market Data │ │ DPDK Market Feed Handler │ │ Server │ │ │ │ │ WS │ ┌──────┐ ring ┌──────────────┐ │ │ AAPL ──────┼─────┼─► RX ──────► pkt_process │ │ │ GOOGL ─────┼──┐ │ │(lcore0) │ (lcore1) │ │ │ MSFT ──────┼──┤ │ └──────┘ │ TCP/WS │ │ │ TSLA ──────┼──┤ │ │ state machine│ │ │ │ │ │ ┌──────────┐ │ │ │ │ │ │ │ │Latency │ │ sndbuf/ │ │ │ │ │ │ │Histogram │ │ rcvbuf │ │ │ │ │ │ │P50/P99 │ └──────┬───────┘ │ │ │ │ │ └──────────┘ │ │ │ │ │ │ ┌──────────┐ ┌─────▼──────┐ │ │ │ │ │ │Stats │ │ TX (lcore0)│ │ │ │ │ │ │Display │ └────────────┘ │ │ │ │ │ └──────────┘ │ └─────────────┘ │ └──────────────────────────────────────┘ └─── 4 symbols × 10 msg/s = 40 msg/s ──────► ``` ## 核心指标说明 | 指标 | 含义 | 典型值 | |------|------|--------| | Min | 最小延迟 | 取决于网络 RTT,通常 ~500us | | Avg | 平均延迟 | 随消息量稳定 | | P50 | 中位数延迟 | 50% 的消息在此延迟内 | | P99 | 99 分位延迟 | 排除 1% 抖动后的最差延迟 | | Msg/s | 每秒消息数 | 吞吐指标 | ## 商业化路径 1. **第一阶段**(当前):单品种订阅 + 延迟统计 → MVP 演示 2. **第二阶段**(1-2 周):Prometheus /metrics HTTP 端点、JSON 配置文件 3. **第三阶段**(1 月):多核 RSS、TLS 支持、日志系统 4. **第四阶段**(3 月):HA 双活、热升级、管理 API