
1) 【一句话结论】上海证券交易所A股交易系统采用分层分布式架构,通过订单路由、撮合引擎、结算系统等核心组件的协同,结合缓存、消息队列、分布式事务等机制,在应对万级订单量和高并发低延迟场景时,通过分片、补偿事务等工程化手段,尽量保证数据一致性并保障系统稳定性。
2) 【原理/概念讲解】上交所交易系统架构分为四层:前端接入层(接收用户订单)、路由层(订单路由组件,按合约代码分发订单)、撮合层(撮合引擎,用内存数据库实现实时价格匹配)、结算层(结算系统,负责后续清算)。应对高峰时,缓存(Redis)缓存热点合约数据,减少数据库压力;消息队列(Kafka)解耦组件,提高可扩展性。数据一致性保障:订单路由与撮合引擎通过分布式事务(如两阶段提交)保证强一致性,结算系统采用最终一致性,结合补偿机制处理异常。类比:交易系统像交通枢纽,路由像交通指挥(分发订单到对应车道),撮合像红绿灯(实时匹配买卖订单),结算像后续票务处理(清算资金)。
3) 【对比与适用场景】
| 组件 | 架构模式 | 核心技术 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 订单路由 | 分布式微服务 | 负载均衡(如Nginx)、服务发现(如Nacos) | 高并发订单分发 | 需高可用,避免单点故障 |
| 撮合引擎 | 内存数据库(Redis+Lua) | 低延迟计算、事务保证 | 实时价格匹配(毫秒级) | 内存容量限制,需按合约ID或时间分片,内存溢出时用LRU淘汰或持久化 |
| 结算系统 | 分布式事务(如Seata) | 最终一致性、补偿事务 | 后续清算(分钟级) | 事务超时处理,异常时通过补偿事务恢复 |
4) 【示例】
订单提交请求示例(JSON):
POST /api/v1/orders
{
"contractCode": "600000.SH",
"direction": "BUY",
"price": 10.5,
"quantity": 1000,
"userId": "user123"
}
撮合引擎Lua脚本示例(匹配逻辑):
-- 买方订单:price >= 10.5, quantity > 0
-- 卖方订单:price <= 10.5, quantity > 0
for _, buy in ipairs(buyOrders) do
for _, sell in ipairs(sellOrders) do
if buy.price >= sell.price then
local matchQty = math.min(buy.quantity, sell.quantity)
buy.quantity = buy.quantity - matchQty
sell.quantity = sell.quantity - matchQty
insertTradeRecord(buy, sell, matchQty, sell.price)
end
end
end
5) 【面试口播版答案】面试官您好,上海证券交易所A股交易系统采用分层分布式架构,核心是订单路由、撮合引擎、结算系统协同。应对9:30-15:00万级订单量时,通过Redis缓存热点合约数据,减少数据库压力;Kafka解耦组件,提高系统扩展性。撮合引擎用Redis+Lua脚本,实现毫秒级价格匹配,满足低延迟要求。数据一致性方面,订单路由与撮合引擎通过分布式事务(如两阶段提交)保证,结算系统采用最终一致性,结合补偿机制处理异常。比如订单路由分发后,撮合引擎实时匹配,结算系统后续处理,异常时通过补偿恢复,确保系统在高并发下稳定运行。
6) 【追问清单】
7) 【常见坑/雷区】