
1) 【一句话结论】上交所交易系统采用分层分布式架构,通过多线程并发处理订单匹配、缓存优化、消息队列解耦及负载均衡,并设计双写策略保障数据一致性,有效应对交易高峰期的并发请求,确保系统性能与数据一致性。
2) 【原理/概念讲解】上交所交易系统核心架构分为四层:应用层(请求解析与校验)、通信层(网络传输)、核心引擎层(订单匹配、清算,多线程处理)、数据层(数据库存储,如MySQL)。为应对高峰期,关键技术包括:
3) 【对比与适用场景】对比缓存(Redis)与数据库(MySQL)在高峰期的处理:
| 对比项 | 缓存(Redis) | 数据库(MySQL) |
|---|---|---|
| 定义 | 内存数据库,存储高频访问数据 | 关系型数据库,持久化存储 |
| 特性 | 低延迟、高并发、内存存储 | 高可靠性、事务支持、持久化 |
| 使用场景 | 高频查询(如订单状态、账户余额) | 交易数据持久化、修改、复杂事务 |
| 注意点 | 容量有限,需设置过期策略;需应对缓存雪崩(如热点数据预加载) | 并发写操作需锁,可能成为瓶颈;需优化索引提升查询效率 |
| 高并发应对 | 预加载热点数据、分布式缓存分片、布隆过滤器防穿透 | 分库分表、读写分离、锁优化(如乐观锁) |
4) 【示例】(伪代码):客户端提交买入订单:
// 客户端请求
POST /trade/order
{
"stockCode": "600000",
"quantity": 100,
"price": 10.5,
"orderType": "限价"
}
// 应用层处理(异步写入队列)
1. 解析请求,校验参数(价格、数量有效性)
2. 将订单写入Kafka队列(主题:order-in)
3. 返回成功响应(不等待匹配结果)
// 核心引擎消费队列(多线程处理)
while (true) {
order = kafka.poll() // 从队列获取订单
if (order != null) {
// 订单匹配(多线程处理,优先队列维护买卖盘)
matchResult = matchOrder(order) // 撮合算法匹配成交对手
// 双写:先写数据库,再更新缓存
try {
updateDB("orders", order, matchResult) // MySQL写入订单
updateCache("order_123", matchResult) // Redis更新缓存
} catch (Exception e) {
// 重试机制(如指数退避)
retryUpdate(order, matchResult)
}
// 通知交易结果(推送消息)
notifyResult(order, matchResult)
}
}
(注:缓存更新失败时,通过消息队列重试,确保数据最终一致)
5) 【面试口播版答案】
“上交所交易系统核心架构是分层分布式设计,分为应用层、通信层、核心引擎层和数据层。为应对交易高峰期的并发,系统通过多线程并发处理订单匹配,利用Redis缓存高频数据减少数据库压力,借助Kafka消息队列解耦系统并实现流量削峰,同时通过负载均衡分发请求到多个核心引擎实例。具体来说,订单请求先进入消息队列,核心引擎按需消费并处理,采用‘先写数据库再更新缓存’的双写策略保障数据一致性,高峰期还通过热点数据预加载和消费者扩容应对缓存雪崩与队列积压,确保系统在高并发下保持低延迟和高吞吐量。”(约90秒)
6) 【追问清单】
7) 【常见坑/雷区】