核心观点:
- 交易系统消息中间件不存在"一个产品打天下"——必须按延迟层级分层选型:热路径用Aeron/共享内存(亚微秒级),跨机器用Aeron Transport+内核旁路(微秒级),持久化用Chronicle Queue,审计分发用Kafka(毫秒级)
- 国内厂商华锐技术AMI以60纳秒延迟、3500万msg/s吞吐填补国产空白,可直接对标Aeron/Solace/TIBCO FTL
- 港交所采用UDP组播+双线冗余+快照增量恢复的行情分发架构,自研Binary协议用字段位图编码实现极致紧凑,是交易所级消息中间件的标杆实践
- 从0到1构建需攻克七大核心设计点:通信模型、持久化、高可用、顺序保证、流控背压、序列化、网络协议
1. 市场全景:交易系统消息中间件分层格局
金融交易系统对消息中间件的需求呈现明显的分层特征——不同业务环节对延迟、吞吐、可靠性的要求差异巨大,不存在单一产品能覆盖所有场景。行业实践是按延迟层级构建混合架构:
三层延迟架构模型
| 层级 | 延迟范围 | 核心诉求 | 代表产品 | 金融场景 |
|---|---|---|---|---|
| 超低延迟层 | 纳秒 ~ 亚微秒 | 极致延迟确定性、零GC | AMI、UMS-SMX、TIBCO FTL-IPC、Chronicle Queue | HFT做市、交易引擎内、审计日志 |
| 低延迟网络层 | 微秒级 | 跨机器可靠传输、组播 | Aeron、Solace Appliance、TIBCO FTL-网络 | 交易所网关、行情分发、OMS |
| 高可靠业务层 | 毫秒级 | 持久化、回溯、高吞吐 | Kafka、RocketMQ/SOFAMQ、RabbitMQ | 结算、风控、支付、中后台 |
典型一级银行/交易所生产架构
│
├─ UDP组播(行情) ──→ [行情接入层: DPDK/EF_VI]
│ │
└─ TCP(订单) ─────→ [订单网关: Aeron Unicast]
│
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ 内部消息总线 │ │ 持久化层 │
│ Aeron IPC / 共享内存 │ │ Chronicle Queue │
│ (亚微秒级) │ │ (内存映射文件) │
│ │ └─────────────────────┘
│ ┌────────┐ ┌──────┐ │
│ │策略引擎 │ │风控 │ │
│ │Disruptor│ │Disruptor│
│ └────────┘ └──────┘ │
└──────────┬───────────┘
│ 异步分发
▼
┌─────────────────────┐
│ Kafka (毫秒级) │
│ 审计/合规/数据分析 │
└─────────────────────┘
高可用: Aeron Cluster (Raft三节点, P99=143μs)
国内信创替代版:华锐AMI正在替换Aeron/Solace/TIBCO FTL的位置,RocketMQ/SOFAMQ替换Kafka的位置。
金融交易场景六大特殊要求
| 要求 | 说明 | 典型方案 |
|---|---|---|
| 可靠组播 | 行情一写多读,数千订阅者无Broker瓶颈 | UMS(LBT-RM)、Aeron(UDP Multicast)、AMI |
| 消息不丢 | 交易指令、资金转账零丢失,RPO=0 | ACK全链路+同步复制(Solace双节点刷盘)、acks=all(Kafka) |
| 顺序保证 | 同一symbol买卖顺序必须严格有序 | Kafka分区有序、RocketMQ shardingKey、Aeron Sequencer |
| 消息回溯 | 监管要求完整防篡改交易记录,支持重放 | Kafka seek、Chronicle Queue回放、Aeron Archive |
| 延迟确定性 | 关注P99/P99.9尾部延迟,而非平均值 | 无锁设计、无GC、busy-spin等待、CPU绑核 |
| 异地多活 | 跨城同时提供服务,故障自动切换 | SOFAMQ LDC架构、Aeron Cluster、华锐多活集群 |
2. 国际主流厂商深度对比
2.1 Aeron — 金融低延迟消息传输事实标准
由LMAX Disruptor作者Martin Thompson设计,采用无Broker架构,基于UDP单播/组播,Media Driver独立线程处理所有网络I/O,应用层NAK丢包重传。
核心性能数据(AWS基准测试)
| 配置 | 10万msg/s P50 | 10万msg/s P99 | 100万msg/s P50 | 100万msg/s P99 |
|---|---|---|---|---|
| 开源版Java driver | 21 μs | 32 μs | 30 μs | 57 μs |
| Premium内核旁路 | 24 μs | 29 μs | 30 μs | 39 μs |
| Premium内核旁路+加密 | 25 μs | 30 μs | 31 μs | 40 μs |
| Aeron Cluster (Premium) | 76 μs | 98 μs | 106 μs | 143 μs |
八大设计原则(按优先级排序)
| # | 原则 | 核心要点 |
|---|---|---|
| 1 | 稳态无GC | GC暂停即使最佳情况也接近1ms,远超LAN RTT |
| 2 | Smart Batching | 突发流量分摊算法成本,优化网络包填充 |
| 3 | 无锁算法 | 锁引入safepoint和OS调度抖动(可达数十ms) |
| 4 | 非阻塞IO | 线程阻塞在IO上的唤醒成本可能超过快速网络RTT |
| 5 | 主路径无异常 | 异常情况应承担异常成本,不拖累主路径 |
| 6 | 单写者原则 | 每个状态由单一写者拥有,消除排队效应 |
| 7 | 优先非共享状态 | 即使单写者也需原子操作和内存屏障,最好数据私有 |
| 8 | 避免数据拷贝 | 拷贝占用时间并驱逐cache中有用数据 |
金融应用案例
| 机构 | 场景 | 成果 |
|---|---|---|
| EDX Markets | 容错低延迟交易所 | RTT 73μs,7个月构建,零计划外停机 |
| Coinbase | 云原生加密交易所 | 可预测低延迟高吞吐,7×24运行 |
| Man Group | 低延迟外汇交易 | 延迟从毫秒级降至亚毫秒级 |
| DriveWealth | 高性能交易平台 | 日处理200万+订单 |
| SIX Interbank | 瑞士即时支付系统 | 日处理3500万笔支付,7×24×365 |
| HSBC | 外汇电子交易 | 命令总线+事件总线+排序器架构 |
来源: aeron.io / AWS基准测试2025 / aeron.io/case-studies
2.2 Chronicle Queue — 无Broker堆外存储极速消息库
基于内存映射文件(mmap)的持久化消息队列,数据直接写入off-heap,完全绕过GC。即使拥有100TB数据,堆上开销也微不足道。
性能数据
| 场景 | 99%ile延迟 | 99.9%ile延迟 | 备注 |
|---|---|---|---|
| 同进程IPC | 0.78 μs | 1.2 μs | 10M msg/min |
| 同机JVM间 | <1 μs | — | 使用/dev/shm |
| 跨机复制(企业版) | 20 μs | 901 μs | TCP/UDP实时复制 |
| 可接受延迟 | 吞吐量 |
|---|---|
| < 20 μs (99.9%) | 2000万 msg/s |
| < 30 μs (99.3%) | 700万 msg/s |
| < 1 ms (99.9%) | 5000万 msg/s |
核心设计要点
- Append-only日志:顺序写入,无索引更新、无B树重平衡,比随机写快10-100x
- 两级索引:Index2Index → 二级索引 → 线性扫描,O(1)定位
- RollCycle滚动:按天/小时/分钟滚动文件,DAILY支持每日40亿条目
- 崩溃安全:即使应用崩溃,OS仍会运行数秒完成刷盘
- 企业版复制:跨机延迟<10μs,Chronicle Wire Enterprise增量压缩10倍+
来源: github.com/OpenHFT/Chronicle-Queue / Chronicle Software官网 / 80%+全球前100银行使用
2.3 Solace PubSub+ — 企业级事件代理
全球前10大投资银行中6家使用,前6大外汇交易银行中3家使用。三种部署形态:软件版、云版、专用硬件设备(Appliance)。
硬件设备3560性能
| 场景 | 吞吐量 |
|---|---|
| 非持久Direct点对点(100B) | 1130万 msg/s |
| 非持久Direct扇出(100B, 10路) | 2370万 msg/s |
| 持久消息点对点(1KB) | 64万 msg/s |
| 持久消息扇出(1KB, 10路) | 280万 msg/s |
| 网络加速带宽(NAB) | ~80 Gbps |
HA机制(完全failsafe)
- HA三元组(三节点集群)架构
- 持久消息:发布者收到ACK前,消息必须同步存储到两个broker节点
- 消息必须刷新到磁盘(flushed to disk),非仅文件系统缓存
- "至少一次"投递语义
来源: solace.com/products/performance / solace.com/solutions/industries/financial-services
2.4 TIBCO FTL — 纳秒级IPC消息平台
TIBCO旗舰低延迟消息产品,20+年金融服务经验。同时支持Broker和P2P架构。
| 指标 | 数值 |
|---|---|
| IPC延迟 | 纳秒级 |
| 网络延迟 | 个位数微秒 |
| FTL 7.0(2025.12)特性 | 云就绪(K8s)、动态Schema、内置容错、mTLS+OAuth、多语言API |
| 灾备 | 低延迟异步DR复制 |
2.5 Informatica Ultra Messaging (UMS/29West) — 无Broker先驱
金融超低延迟消息传输先驱,无Broker/无守护进程P2P设计,消除单点故障。
| 特性 | 说明 |
|---|---|
| 可靠组播(LBT-RM) | 可扩展到数千订阅者,无Broker瓶颈 |
| 共享内存传输(SMX) | X86多核服务器上实现亚100纳秒延迟 |
| 高级版(UMP/UMQ) | 持久化保证投递 + 无Broker负载均衡(ULB) |
| 应用案例 | Quod Financial微服务OMS/EMS交易平台 |
2.6 Kafka / Confluent — 高吞吐持久化事件流
金融中后台主力,持久化append-only日志,分区Topic水平扩展。Kafka 4.x(2026年)KRaft模式成为默认,完全移除ZooKeeper。
| 指标 | 数值 |
|---|---|
| P50延迟 | 2-10 ms |
| P99延迟 | 10-50 ms |
| P99.9延迟 | 100-500 ms |
| 单节点吞吐 | ~100万 msg/s |
| HA机制 | RF=3 + 跨3AZ + acks=all + min.insync.replicas |
| 消息回溯 | 支持seek到任意offset |
| Exactly-once | 事务生产者+幂等写入 |
金融场景:结算匹配、风险仓位聚合、合规审计、数据湖管道、跨数据中心Geo-Replication
2.7 RocketMQ / SOFAMQ — 金融级高可靠
蚂蚁金服千亿级日消息量验证,SOFAMQ为蚂蚁金融级进化版本。
| 特性 | SOFAMQ指标 |
|---|---|
| 日消息流转量 | 千亿级 |
| 峰值TPS | 千万级 |
| 事务消息 | 两阶段提交+状态回查 |
| 高可用 | 异地多活LDC架构,MQ-router跨城路由 |
| 顺序保证 | shardingKey机制 |
金融案例:光大银行资金交易平台(前中后台解耦、交易通知广播)、PalmPay
来源: 蚂蚁金服GIIC分享 / 光大银行实践 / aliyun.com/product/rocketmq
3. 国内厂商与信创替代
3.1 华锐技术 AMI / AMQ — 国产低时延标杆
中国证券行业分布式低时延IT解决方案排名第一(IDC 2022),填补国内低时延消息中间件空白。自主研发,从零研究全球论文和算法,6年研发积累,80+项发明专利。
| 产品 | 全称 | 关键指标 |
|---|---|---|
| AMI | Archforce Message Interconnection | 时延低至60纳秒,吞吐>3500万 msg/s,RPO=0 |
| AMQ | Archforce Message Queue | 对标IBM MQ、RocketMQ、Kafka,全面升级 |
| ATP | Archforce Trading Platform | 50万笔/秒下核心交易延迟<2微秒,多活集群+异地容灾 |
| AMD | Archforce Market Data | 微秒级转码,可靠组播,双活高可用 |
- 技术特点:同时支持X86、ARM架构,完成国产基础软硬件适配优化,超过20个版本迭代
- 替代目标:IBM MQ、Solace PubSub+、TIBCO FTL
- 应用领域:证券核心交易、资管、银行核心系统下移/上云/信创
- 客户:数十家头部金融机构,100%安全运行记录
来源: archforce.cn / 财联社专访 / 北京日报报道
3.2 恒生电子 — 金融IT龙头
| 平台 | 定位 | 消息中间件方案 |
|---|---|---|
| 极光平台 | 面向交易处理场景,竞争极致性能 | 覆盖交易/策略/风控/清算全流程 |
| JRES中间件 | 通用技术组件服务化 | 集成RabbitMQ、Kafka(非自研低延迟中间件) |
| 信创适配 | openEuler等国产基础软件 | 基于Spring Cloud Alibaba生态 |
定位判断:恒生重点在业务层中间件而非基础层超低延迟传输,消息队列采用开源集成。
3.3 金证股份 — 交易结算系统老兵
| 产品 | 说明 |
|---|---|
| KCBP | 核心业务平台/交易中间件,管理数据库连接和事务 |
| KCXP | 通讯中间件,提供请求应答队列、报盘队列、银证队列 |
| KGBP | "金钥匙"交易中间件,面向极低延迟高并发场景 |
| FS2.5 | 新一代核心交易系统,应对10万亿交易行情 |
2025年高可用专利:守护进程实时监控替换异常模块 + 共享内存消息队列 + 异步日志落盘 + 快速故障恢复
4. 从0到1构建高可用低延迟中间件
构建一个模块间高可用低延迟消息中间件,需要系统性地解决以下七大核心设计问题。以下是经过验证的设计方法论:
设计点1:通信模型选择
| 模型 | 特点 | 适用场景 | 代表实现 |
|---|---|---|---|
| Pub-Sub | 一条消息多个消费者消费 | 市场数据分发、事件通知 | Kafka Topics、Aeron Multicast |
| Point-to-Point | 一条消息只被一个消费者消费 | 任务分发、订单处理 | ActiveMQ Queue、Aeron Unicast |
| Request-Reply | 同步/异步请求-响应 | RPC、风控查询 | Aeron IPC、Chronicle Queue |
交易系统建议:行情分发用Pub-Sub+UDP组播,订单路由用P2P(确保一个订单只被一个撮合引擎处理),风控查询用Request-Reply,进程内用Disruptor/共享内存。
设计点2:持久化策略
| 策略 | 机制 | 延迟代价 | 适用场景 |
|---|---|---|---|
| 纯内存 | 无持久化 | 最低 | 行情转发(可丢可重传) |
| 内存映射文件 | mmap + OS页缓存 | 亚微秒级 | Chronicle Queue模式 |
| 顺序写日志 | append-only + fsync | 毫秒级 | Kafka模式 |
| 批量刷盘 | 定时/定量fsync | 中 | 平衡延迟与持久性 |
分层策略:热路径用内存映射文件(亚微秒+崩溃恢复),冷路径用顺序写日志+批量刷盘,关键写入用MappedFile.sync()确保持久性。
设计点3:高可用方案
| 方案 | 机制 | 故障切换时间 | 适用场景 |
|---|---|---|---|
| 主备(Active-Standby) | 主故障备接管 | 秒级 | 传统消息队列 |
| 多副本(ISR) | 数据复制到多节点 | 毫秒级 | Kafka ISR |
| Raft共识 | 多数派共识+领导选举 | 亚秒级 | Aeron Cluster |
| 状态机复制 | 确定性状态机+日志复制 | 微秒级 | Aeron Cluster |
金融交易首选:Aeron Cluster模式——基于Raft共识的状态机复制,三节点集群,多数派持久化后返回确认,100万msg/s下P99仅143μs。
设计点4:顺序保证
| 级别 | 机制 | 性能影响 |
|---|---|---|
| 全局严格有序 | 单分区/单线程 | 吞吐受限 |
| 分区有序 | 同key路由到同分区 | 可并行 |
| 因果有序 | 向量时钟/逻辑时钟 | 中等开销 |
| 无序 | 最大并行 | 最高吞吐 |
交易系统建议:同一symbol订单按symbol路由保证分区有序,同一交易所行情通过UDP组播天然有序,同一账户风控事件有序。
设计点5:流控与背压
| 策略 | 机制 | 特点 |
|---|---|---|
| 无背压 | 生产者不被减慢 | 适用于市场数据(不能减慢上游) |
| 有界缓冲+阻塞 | 缓冲满则阻塞 | 通用场景 |
| 信用机制 | 消费者授予信用额度 | 精确控制 |
| 令牌桶 | 令牌控制发送速率 | 速率限制 |
Chronicle Queue哲学:生产者中心化设计,尽一切可能不对生产者施加反压——适用于市场数据、合规系统等不能减慢上游的场景。
设计点6:序列化方案
| 方案 | 延迟 | 紧凑性 | 跨语言 | 适用场景 |
|---|---|---|---|---|
| SBE | 极低(零拷贝) | 高 | 是 | 金融交易首选 |
| Protobuf | 中 | 高 | 是 | 通用RPC |
| FlatBuffers | 低 | 中 | 是 | 游戏/IoT |
| JSON | 高 | 低 | 是 | 人类可读 |
| Chronicle Wire | 低 | 中-高 | 是 | Chronicle生态 |
SBE核心优势:零拷贝编解码(直接操作内存偏移量),固定偏移量O(1)访问,字段位置编译时确定。Aeron集成SBE实现最佳编解码性能。
设计点7:网络协议选择
| 协议 | 延迟 | 可靠性 | 适用场景 |
|---|---|---|---|
| TCP | 高(ACK+重传+拥塞控制) | 可靠 | 订单传输 |
| UDP单播 | 低 | 不可靠 | 应用层保证可靠性(Aeron) |
| UDP组播 | 低 | 不可靠 | 市场数据分发(一对多) |
| 共享内存/IPC | 最低(亚微秒) | 可靠 | 同机进程间通信 |
| RDMA/RoCE | 极低 | 可靠 | 跨机器极低延迟 |
Aeron协议哲学:使用可靠UDP——获得TCP级可靠性,无TCP延迟开销(TCP的问题:头部阻塞、慢启动、拥塞控制、ACK确认延迟)。在UDP之上实现自己的可靠性层:重传、序号、流控。
从0到1实施路线图
├── 确定延迟目标 (HFT? 交易网关? 中后台?)
├── 确定HA要求 (RPO=0? 异地多活?)
└── 确定协议 (组播? TCP? 共享内存?)
Phase 2: 核心引擎开发 (3-6月)
├── 无锁环形缓冲 (Disruptor模式)
├── 共享内存IPC层 (mmap + SPSC队列)
├── 网络传输层 (可靠UDP / TCP)
└── SBE序列化层
Phase 3: 可靠性与HA (3-4月)
├── Raft共识模块 (状态机复制)
├── 消息持久化 (mmap日志)
├── 故障检测与自动切换
└── 消息回放 (Archive)
Phase 4: 性能调优 (2-3月)
├── CPU绑核 + NUMA亲和
├── 内核旁路 (DPDK/EF_VI)
├── GC消除 (off-heap)
└── P99尾部延迟优化
Phase 5: 生产化 (2-3月)
├── 监控告警 (延迟分位数实时监控)
├── 流控与过载保护
├── 灰度发布与热升级
└── 故障演练与混沌测试
5. 底层关键技术解析
5.1 LMAX Disruptor — 无锁环形缓冲
由LMAX交易所开发的高性能线程间消息传递库,仅6000+行代码,单线程处理600万+订单/秒。Disruptor不是消息中间件,而是替代BlockingQueue的线程间传递库,但它是Aeron等高性能中间件的内部核心组件。
五大设计支柱
| # | 设计要点 | 说明 |
|---|---|---|
| 1 | 环形数组预分配 | Event对象预先分配,消除GC压力 |
| 2 | Cache Locality友好 | 连续内存访问,支持CPU pre-fetch |
| 3 | 无锁设计 | 单生产者完全无锁;多生产者仅原子操作 |
| 4 | 消除False Sharing | 缓存行填充确保关键变量独占cache line |
| 5 | 多种等待策略 | BusySpin(高频) / Yield / Blocking(通用) |
缓存行填充消除False Sharing
class Sequence {
// 前56 bytes padding (7个long)
protected byte p10, p11, p12, p13, p14, p15, p16, p17;
protected long value; // <-- 独占cache line核心
// 后56 bytes padding (7个long)
protected byte p90, p91, p92, p93, p94, p95, p96, p97;
}
// 总计: 56 + 8 + 56 = 120 bytes
// 确保value不与相邻变量共享cacheline与传统队列对比
| 维度 | ArrayBlockingQueue | Disruptor |
|---|---|---|
| 同步机制 | 锁(ReentrantLock) | 无锁/原子操作 |
| Context Switch | 频繁,锁竞争导致 | 无(busy spin模式) |
| False Sharing | head/tail/size共享cacheline | Sequence填充消除 |
| 内存屏障 | CAS=full fence | release/acquire fence(更轻量) |
| 内存分配 | 运行时分配 | 预分配,无GC |
5.2 共享内存IPC — 亚微秒级进程间通信
| IPC机制 | 典型延迟 | 特点 |
|---|---|---|
| 共享内存(mmap/shm) | 亚微秒级 | 最快,零拷贝 |
| Unix Domain Socket | 1-10 μs | 需内核参与 |
| TCP/IP(本机) | 5-20 μs | 经过完整协议栈 |
| 管道(Pipe) | 1-5 μs | 单向通信 |
生产级SPSC环形缓冲(C++骨架)
template<typename T, size_t N>
class SpscRing {
static_assert((N & (N - 1)) == 0, "N must be power of 2");
alignas(64) std::atomic<size_t> head_{0}; // producer writes
alignas(64) std::atomic<size_t> tail_{0}; // consumer writes
alignas(64) T buf_[N];
public:
bool try_push(const T& x) {
size_t h = head_.load(std::memory_order_relaxed);
size_t t = tail_.load(std::memory_order_acquire);
if (h - t >= N) return false;
buf_[h & (N - 1)] = x;
head_.store(h + 1, std::memory_order_release);
return true;
}
bool try_pop(T& out) {
size_t t = tail_.load(std::memory_order_relaxed);
size_t h = head_.load(std::memory_order_acquire);
if (t == h) return false;
out = buf_[t & (N - 1)];
tail_.store(t + 1, std::memory_order_release);
return true;
}
};
// 关键: head_/tail_各占一个cache line防false sharing
// 容量2的幂,取模用位与(h&(N-1))避免除法
// 仅靠acquire/release内存序同步,无CAS操作
5.3 内核旁路(Kernel Bypass)— 突破网络延迟极限
标准Linux内核在处理超过100万包/秒时力不从心。传统TCP/IP在10Gbps网络下往返延迟约50μs,内核旁路可降至5μs以下。
主要技术对比
| 技术 | 原理 | 延迟降低 | CPU占用 | 集成复杂度 |
|---|---|---|---|---|
| DPDK | 轮询模式驱动(PMD),用户空间处理 | 高 | 高(100%轮询) | 高 |
| RDMA | 硬件卸载,直接读写远程内存 | 超高 | 低 | 高 |
| Solarflare OpenOnload | 拦截BSD socket调用,用户空间协议栈 | 中等 | 中等 | 最低 |
| EF_VI | NIC的RX/TX描述符环暴露给用户态 | 非常高 | 低 | 中-高 |
| AF_XDP | Linux 4.18+内核旁路,eBPF可编程 | 中等 | 中等 | 中等 |
Tick-to-Trade全链路延迟预算
| 环节 | FPGA(顶级) | EF_VI(高端软件) | DPDK(普通软件) | 内核栈(Linux) |
|---|---|---|---|---|
| NIC RX到用户态 | 100-200 ns | 500-800 ns | 1-2 μs | 5-20 μs |
| 行情解码+本地簿 | 50-150 ns | 800-1500 ns | 1.5-3 μs | 5-10 μs |
| 信号+风控 | 50-100 ns | 500-1500 ns | 1-3 μs | 不适用 |
| 订单序列化+TX | 100-200 ns | 500-800 ns | 1-2 μs | 5-20 μs |
| 端到端tick-to-trade | 300-700 ns | 3-6 μs | 6-12 μs | 30+ μs |
NUMA与系统调优清单
| 配置项 | 作用 |
|---|---|
isolcpus=2-15 | 目标核从默认调度域排除 |
nohz_full=2-15 | 该核不接受时钟中断(tickless) |
rcu_nocbs=2-15 | RCU回调推到其他核 |
| IRQ affinity | 所有硬件中断绑到非热路径核 |
| 关闭turbo/C-states | CPU频率固定 |
| 关闭HT | HT共享L1/L2污染缓存 |
SCHED_FIFO priority 99 | 实时调度 |
mlockall | 防止换页 |
| 1GB大页 | 减少TLB miss |
ethtool -K eth0 gro off lro off tso off gso off | 禁用所有网络卸载 |
5.4 延迟来源与影响分解
| 延迟来源 | 影响 | 缓解方案 |
|---|---|---|
| 页错误(Page faults) | 10-100 μs | 预触页面,mlockall |
| TLB未命中 | 0.5-2 μs | 2MB/1GB大页 |
| GC暂停 | 1-100 ms | 数据保留在堆外(off-heap) |
| 上下文切换 | 1-10 μs | 线程亲和性,忙等(busy wait) |
| 磁盘I/O | 10-100 μs | NVMe + 合理roll cycle |
| 锁竞争 | 不可预测尖峰 | 无锁设计,单写者原则 |
6. 港交所消息中间件深度实践
6.1 系统演进历程
| 系统 | 上线时间 | 技术特征 | 状态 |
|---|---|---|---|
| AMS/1 | 1986年 | 基于王安电脑,响应速度以秒计 | 退役 |
| AMS/2 | 1993年 | 客户端-服务器架构,延迟降至毫秒级 | 退役 |
| AMS/3 | 2000年 | 分布式处理架构,2012年引入内存数据库速度提升10倍 | 退役 |
| OTP-C | 2018年2月 | 基于开放系统技术,支持14,000+证券 | 运行中 |
| ODP | 预计2028年 | 模块化架构,支持近24小时衍生品交易 | 开发中 |
6.2 OCG-C网关 — FIX + Binary双协议
OCG-C(Orion Central Gateway – Cash Market)是交易所参与者将买卖盘管理系统连接至OTP-C的中央接入点,同时支持FIX和自研Binary协议(均基于TCP)。
Binary协议核心创新 —— 字段位图(Presence Map)
- 在每个消息开头编码2-8字节的字段位图
- 每个bit对应一个字段是否存在(1=存在,0=不存在)
- 解码器先读字段位图得知消息结构,再按序读取字段值
- 对比FAST协议:8字段消息中,1字节位图省去8个占位符(净省7字节)
- 对比键值对编码:省去8个字段ID(假设每个2字节,净省15字节)
| 协议对比 | FIX(字符串) | FAST | OCG Binary |
|---|---|---|---|
| 编码方式 | ASCII字符串 | 二进制+分隔符 | 二进制+字段位图 |
| 字段标识 | 键值对(Tag=Value) | 单字节分隔符+位置 | 比特位图(Presence Map) |
| 空字段处理 | 不编码 | 仅1字节占位符 | 0代价(位图bit=0) |
| 编码密度 | 低 | 中 | 最高 |
| 传输层 | TCP | — | TCP |
流量控制(Throttle)
- 最低需购买2条/秒流量配额
- 可额外购买每席位最多2000条/秒
- 通过流量控制实现系统承载量与收入的动态平衡
"不可能三角"的妥协
| 维度 | 港交所选择 | 说明 |
|---|---|---|
| 高可靠性 | 不妥协 | TCP传输+序列号+应答确认 |
| 低时延 | 优先保证 | 二进制编码+字段位图优化 |
| 高吞吐 | 有限妥协 | 通过Throttle流量控制转嫁成本 |
6.3 OMD行情系统 — UDP组播架构(核心亮点)
港交所使用multicast组播技术分发行情,这是OMD系统的核心设计。2012年上线。
| 特性 | 详情 |
|---|---|
| 传输协议 | UDP组播(Multicast) + TCP辅助重传 |
| 峰值消息分发 | ~25万笔/秒 |
| 峰值带宽 | ~80 Mbps |
| 公平性保障 | 路由器硬件层面同时发送给所有参与者 |
| 网络要求 | 局域网/城域网专线(1Gbps接口) |
| 双线丢包率 | ~0(1年实测) |
四层架构设计
(1) 频道划分
- 不同业务信息划分到不同UDP组播频道
- 频道间业务独立、无依赖关系,单频道中断不影响其他
- 示例:深度行情频道、交易时段更新频道、基础合约信息频道
(2) 双线传输冗余
- 双物理线路同时传输同一数据
- 客户端从任一线路收到正确序列号即视为成功
- 并发发送,不引入额外时延
- 实测:1年运行中重传恢复丢包次数为0
- 示例:Channel 10 和 Channel 510 为一对镜像通道
(3) 三层服务架构
| 服务 | 传输协议 | 功能 | 限制 |
|---|---|---|---|
| 实时服务 | UDP组播 | 挂单、成交、指数、市场状态等实时数据 | — |
| 重传服务(RTS) | TCP请求-应答 | 丢包时请求指定序列号区间的历史报文 | 每频道缓存50,000条;单次≤10,000条;每日≤1,000次 |
| 刷新服务 | UDP组播 | 定期发送完整市场状态快照 | 每十几秒一次完整快照 |
(4) 快照+增量恢复机制
- 快照频道每隔十几秒播放一次完整快照
- 快照包含增量频道的序列号,标明构建起点
- 客户端首次上线流程:缓存增量 → 等待快照 → 以快照为起点+缓存中大于该序列号的增量构建最新状态
- 优势:服务端无需缓存所有增量消息,客户端只需处理十几秒增量即可同步
[OMD行情源]
│
├─── 实时服务 (UDP组播 Channel 10) ──→ [参与者A]
│ ──→ [参与者B]
│ ──→ [参与者C]
│ ──→ [参与者N...]
│
├─── 实时服务 (UDP组播 Channel 510) ──→ [镜像冗余线]
│
├─── 重传服务 (TCP请求-应答) ──→ [丢包时按需请求]
│
└─── 刷新服务 (UDP组播快照) ──→ [每十几秒完整快照]
公平性: 路由器硬件层面同时发送给所有参与者
可靠性: 双线冗余 + TCP重传 + 快照恢复
6.4 Orion平台全景与SDNet/2网络
| 组件 | 全称 | 功能 | 上线 |
|---|---|---|---|
| OTP-C | Orion Trading Platform - Cash | 证券交易撮合引擎 | 2018.2 |
| OCG-C | Orion Central Gateway - Cash | 证券交易接入网关 | 2021.9 |
| OMD-C | Orion Market Data - Cash | 证券行情分发 | 2012 |
| OMD-D | Orion Market Data - Derivatives | 衍生品行情分发 | — |
| ODP | Orion Derivatives Platform | 衍生品交易平台(新一代) | 预计2028 |
| SDNet/2 | Securities and Derivatives Network | 网络基础设施 | — |
| MMDH | Mainland Market Data Hub | 内地市场数据枢纽(上海) | — |
SDNet/2网络基础设施
- 性质:综合光纤以太网(Optical Ethernet)网络基础设施
- 支持系统:证券交易、衍生品交易、清算交收、OTC清算、行情分发
- IGMP版本:IGMPv2(组播管理)
- 接口速度:1Gbps(避免突发性丢包)
- 机房托管:支持HKEX Host Data Centre (HDC) co-location
6.5 港交所关键技术性能指标
| 指标 | 数值 |
|---|---|
| OMD行情峰值消息分发 | 25万笔/秒 |
| OMD峰值带宽 | ~80 Mbps |
| OMD重传缓存 | 50,000条/频道 |
| OMD双线传输丢包率 | ~0(1年实测) |
| OCG-C最大流量配额 | 2,000条/秒/席位 |
| OTP-C证券数量 | >14,000只 |
| 聚合挂单深度 | 买卖10档 |
| SDNet/2接口速度 | 1 Gbps |
| 日报文数(典型交易日) | ~1,650万条 |
| 日数据量 | ~1.5 GB |
| 订单撮合延迟(99.99%, 恒生技术) | <50微秒 |
| 订单处理延迟 | <120微秒 |
| 数据总线分发 | 50万条/秒,延迟<500微秒 |
| 跨数据中心时间同步(PTP) | 误差<1微秒 |
7. 港交所 vs 沪深交易所架构对比
| 维度 | 港交所(HKEX) | 上交所(SSE) | 深交所(SZSE) |
|---|---|---|---|
| 核心交易系统 | OTP-C (Orion) | 竞价撮合平台(MTP) | 第五代交易系统 |
| 交易接入网关 | OCG-C | TDG | TGW |
| 交易协议 | FIX + 自研Binary | STEP + Binary | STEP + Binary |
| 交易传输层 | TCP | TCP | TCP |
| 行情传输层 | UDP组播 + TCP重传 | UDP组播(高速行情网)/TCP/卫星 | TCP点对点 |
| 直接接入(DMA) | 允许 | 不允许 | 不允许 |
| 网络基础设施 | SDNet/2(光纤以太网) | 交易链路+高速地面行情网+卫星 | — |
| 机房托管 | 支持(HDC co-location) | — | — |
| STEP协议 | 不使用 | 使用 | 使用 |
关键差异分析
| 差异维度 | 港交所 | 沪深交易所 | 根本原因 |
|---|---|---|---|
| 行情传输 | UDP组播 | TCP点对点(深交所) | 港交所面向DMA直接接入追求极致性能;内地通过券商柜台中转,注重接入便利性 |
| 客户端开发难度 | 极高 | 较低 | UDP组播需处理丢包/重传/排序/去重;TCP由协议栈保证可靠性 |
| 行情公平性 | 路由器硬件层面保证 | 取决于券商 | 组播同时到达所有节点;TCP有软件调度偏差 |
| 历史行情恢复 | 快照+增量(轻量) | 全量回放 | OMD专注实时行情;内地同时关注实时+历史 |
8. 选型决策矩阵与总结
8.1 全厂商性能横向对比
| 产品 | P50延迟 | P99延迟 | 最大吞吐 | HA机制 | RPO |
|---|---|---|---|---|---|
| Chronicle Queue(同进程) | 0.5-2 μs | 3-5 μs | 500万+ msg/s | TCP/UDP实时复制 | 0 |
| AMI(华锐) | 60 ns | — | 3500万+ msg/s | 多活集群+异地容灾 | 0 |
| UMS/29West(SMX) | <100 ns | — | — | 持久化保证投递+ULB | 0 |
| TIBCO FTL(IPC) | 纳秒级 | — | — | FT自动恢复+异步DR | ~0 |
| Aeron(物理硬件) | 18-30 μs | 39-57 μs | >100万 msg/s | Aeron Cluster(Raft) | 0 |
| Solace(硬件设备) | 微秒级 | — | 2370万 msg/s | HA三元组双节点同步 | 0 |
| Kafka | 2-10 ms | 10-50 ms | ~100万 msg/s | RF=3+acks=all | 0 |
| SOFAMQ | 毫秒级 | — | 千万级TPS | 异地多活LDC | 0 |
8.2 场景选型建议
| 场景 | 首选 | 备选 |
|---|---|---|
| 高频交易/HFT | Chronicle Queue / 华锐AMI | Aeron + Chronicle Queue |
| 交易所网关连接 | Aeron | UMS / TIBCO FTL |
| 行情数据分发 | Solace Appliance | Aeron Multicast / 华锐AMI |
| OMS/交易平台 | Solace | Aeron + Kafka |
| 结算/风控/合规 | Kafka | RocketMQ / SOFAMQ |
| 支付/资金流转 | SOFAMQ | Kafka |
| 信创/国产替代 | 华锐AMI/AMQ | RocketMQ |
| 审计日志/合规回溯 | Chronicle Queue | Kafka |
8.3 延迟选型速查
| 延迟需求 | 推荐技术栈 | 典型场景 |
|---|---|---|
| 纳秒级(<1μs) | FPGA + CTPIO | 顶级HFT tick-to-trade |
| 亚微秒级(1-10μs) | Aeron IPC + SBE + 共享内存 | 同机交易组件通信 |
| 低微秒级(10-100μs) | Aeron Transport + DPDK/EF_VI | 跨机器交易消息 |
| 高微秒级(100μs-1ms) | Chronicle Queue + TCP | 持久化消息 |
| 毫秒级(1-10ms) | Kafka / RocketMQ | 事件流、审计分发 |
8.4 核心结论
- 分层架构是唯一正确答案——交易系统消息中间件不存在"一个产品打天下"。热路径用Aeron/共享内存(亚微秒级),跨机器用Aeron Transport+内核旁路(微秒级),持久化用Chronicle Queue(微秒级+磁盘),审计分发用Kafka(毫秒级)。
- 国内信创首选华锐AMI——60纳秒延迟、3500万msg/s吞吐、RPO=0,80+项发明专利,数十家头部金融机构验证,直接对标Aeron/Solace/TIBCO FTL,且同时支持X86/ARM。
- 港交所的组播架构值得深度学习——UDP组播+双线冗余+三层服务(实时/重传/刷新)+快照增量恢复,1年实测零丢包。这是交易所级行情分发的标杆设计,特别适合FICC领域借鉴。
- 从0到1构建需攻克七大设计点——通信模型、持久化、高可用、顺序保证、流控背压、序列化(SBE)、网络协议(可靠UDP)。核心原则:无锁、无GC、零拷贝、单写者、Smart Batching。
- 高可用首选Raft状态机复制——Aeron Cluster在100万msg/s下P99仅143μs,兼顾低延迟与RPO=0,是金融交易场景的最优解。
9. 参考来源
Aeron / Chronicle / Disruptor
- Aeron设计原则: github.com/aeron-io/aeron/wiki/Design-Principles
- Aeron GitHub: github.com/aeron-io/aeron
- Aeron AWS基准测试: aws.amazon.com/blogs/industries/aeron-on-aws-2025-performance-benchmark-results
- Aeron案例研究: aeron.io/case-studies
- Aeron vs Kafka: sanj.dev/post/aeron-vs-kafka-messaging-comparison
- 低延迟基准对比: cloudlogic.dev/2026/06/11/aeron-vs-kafka-vs-chronicle-queue-low-latency-messaging-benchmarked-for-capital-markets
- Chronicle Queue GitHub: github.com/OpenHFT/Chronicle-Queue
- Chronicle Queue生产实践: sanj.dev/post/chronicle-queue-production-deep-dive
- Chronicle Software: chronicle.software
- LMAX Disruptor: lmax-exchange.github.io/disruptor
- Disruptor深度解析: neoremind.com/2026/02/lmax-disruptor_tech_deep_dive
内核旁路与HFT架构
- Linux延迟优化: tradervps.com/blog/linux-latency-cuts-hft-kernel-bypass-techniques
- HFT架构全解: quant67.com/post/quant/26-hft-architecture/26-hft-architecture.html
- Databento Kernel Bypass: databento.com/microstructure/kernel-bypass
- CloudWeGo shmipc: github.com/cloudwego/shmipc-spec
企业级消息中间件
- Solace性能: solace.com/products/performance
- Solace金融服务: solace.com/solutions/industries/financial-services
- TIBCO FTL: tibco.com/blog/2025/12/15/tibco-ftl-real-time-high-performance-data-distribution
- Ultra Messaging: ultramessaging.github.io/um_description.html
- Quod Financial案例: quodfinancial.com/ultra-messaging
- 蚂蚁金服SOFAMQ: zhuanlan.zhihu.com/p/38964669
- 光大银行RocketMQ: modb.pro/db/633992
港交所
- 系统设施概览: hkex.com.hk/Services/Trading/Securities/Infrastructure/Overview
- OCG-C技术文档: hkex.com.hk/Services/Trading/Securities/Infrastructure/OCGC
- OMD-C Binary Interface Spec: hkex.com.hk/-/media/HKEX-Market/Services/Market-Data-Services/Infrastructure/HKEX-Orion-Market-Data-Platform-Securities-Market-OMD-C/HKEX_OMDC_Binary_Interface_Specifications_v1,-d-,45.pdf
- SDNet/2: hkex.com.hk/Services/Connectivity/SDNet_2
- ODP新闻稿: hkexgroup.com/Media-Centre/News-Release/HKEX-Group/2024/240418news
- 港交所OMD行情协议赏析: zhuanlan.zhihu.com/p/230967455
- 港交所OCG交易协议赏析(上): zhuanlan.zhihu.com/p/245667307
- 港交所OCG交易协议赏析(下): zhuanlan.zhihu.com/p/260451778
- 港交所交易系统进化史: zhuanlan.zhihu.com/p/32364750490
国内厂商
- 华锐技术官网: archforce.cn
- 华锐财联社专访: cls.cn/detail/1370607
- 恒生电子: hundsun.com/light
- 金证股份: szkingdom.com
- 金证高可用专利: sohu.com/a/949424594_122362510
内地交易所参考
- 上交所交易技术: sse.com.cn/services/tradingtech/data
- 深交所STEP接口规范: szse.cn/marketServices/technicalservice/interface
说明: 本报告基于公开可获取的信息整理,具体技术细节以各厂商官方文档为准。性能数据来源于各厂商基准测试,实际生产环境表现可能因配置不同而异。


