
1) 【一句话结论】
设计支持万级订单处理与毫秒级响应的证券交易撮合系统,核心通过分布式无锁架构、强一致性保障(结合最终一致性补偿)及动态容错机制,确保性能与数据一致性。
2) 【原理/概念讲解】
以老师讲解方式,解释各模块核心逻辑:
3) 【对比与适用场景】
| 策略/模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 订单路由:一致性哈希(虚拟节点) | 根据股票代码哈希值映射节点(每个真实节点100个虚拟节点) | 负载均衡,避免热点 | 热门股票高并发 | 动态扩容需冷热数据迁移 |
| 订单路由:轮询 | 按顺序分配订单到节点 | 简单,负载均衡 | 订单量均匀 | 节点负载不均,热点集中 |
| 撮合引擎:无锁跳表 | 单线程内CAS操作维护有序结构(内存对象池优化) | 高并发,无锁竞争 | 内存敏感场景 | 需优化内存分配,避免碎片 |
| 撮合引擎:读写锁 | 多线程通过读写锁控制访问 | 并发控制明确 | CPU密集型 | 锁粒度影响性能,避免死锁 |
| 数据一致性:强一致性(分布式事务) | 事务原子性,全局一致 | 交易立即完成 | 金额敏感交易 | 系统延迟高,成本高 |
| 数据一致性:最终一致性(补偿) | 先内存,后持久化,补偿机制 | 延迟恢复 | 高并发场景 | 需补偿机制避免不一致 |
4) 【示例】
public class ConsistentHashRouter {
private HashRing<String, String> ring;
private static final int VIRTUAL_NODES = 100;
public ConsistentHashRouter(List<String> nodes) {
List<String> virtualNodes = new ArrayList<>();
for (String node : nodes) {
for (int i = 0; i < VIRTUAL_NODES; i++) {
virtualNodes.add(node + "-" + i);
}
}
ring = new HashRing<>(virtualNodes);
}
public String route(Order order) {
return ring.get(order.getStockCode());
}
public void addNode(String newNode) {
for (int i = 0; i < VIRTUAL_NODES; i++) {
ring.addNode(newNode + "-" + i);
}
pauseNewOrders();
migrateOldOrders();
}
}
public class SkipListOrderBook {
private final Map<String, SkipList<Order>> orderBooks;
private final ObjectPool<Order> orderPool; // 对象池避免内存碎片
public SkipListOrderBook() {
orderBooks = new ConcurrentHashMap<>();
orderPool = new ObjectPool<>(() -> new Order(), 10000);
}
public void addOrder(Order order) {
String stockCode = order.getStockCode();
SkipList<Order> book = orderBooks.computeIfAbsent(stockCode, k -> new SkipList<>());
Order orderObj = orderPool.borrowObject(); // 从对象池获取
orderObj.copy(order); // 拷贝数据,避免共享引用
book.add(orderObj); // 无锁插入
orderPool.returnObject(orderObj); // 用后归还
}
}
5) 【面试口播版答案】
“面试官您好,我设计的证券交易撮合系统核心是分布式无锁架构,订单路由采用一致性哈希(虚拟节点)实现负载均衡,动态扩容时通过冷热数据迁移保障服务连续性;撮合引擎基于无锁跳表(内存对象池优化),高效匹配时间优先、价格优先的订单;结果通过消息队列异步分发,确保不阻塞核心逻辑。数据一致性通过持久化+幂等重试(订单ID唯一索引)+补偿机制保障,系统稳定性则通过限流、熔断、监控(Prometheus+Grafana)实现高可用,整体能支撑万级TPS和毫秒级响应。”
6) 【追问清单】
7) 【常见坑/雷区】