一直对实时的交易系统非常感兴趣,没有机会从事这个行业,偶尔没事就自已揣测一下系统设计。
按我想一个实时交易系统,应该包括报价服务、用户服务、撮合成交服务。
报价服务:提供实时报价的订阅和报价推送。
用户服务:用于用户身价鉴权、下单。
撮合服务:用于根据报价,为买卖单撮合成交,修改订单状态,生成交易历史,发送订单状态更改消息。
画了个数据流图如下:
流程解析:
1、用户报价查看:
用户打开系统后,可以在未登陆的状态下,订阅报价服务器的商品数据,查看实时商品报价数据。
2、用户订单管理:
用户登录后,可以下买单和卖单,然后可以查看自已的订单状态,查看操作历史、成交历史,同时可以查看自已的消息,用户订单管理的数据统一通过关系存储进行读写。
3、撮合服务:
撮合服务接收用户的买卖单,并加入内存存储队列排序存储,同时将订单持久化到关系存储中;动态订阅订单商品报价(商品不多的话,可以直接全量订阅);收到每笔报价都需要到指定商品的买卖队列去比对订单是否符合成交条件,符合条件的修改关系存储中的状态,生成交易历史数据,并从内存存储队列中出队;生成订单状态变更通知,推送到用户服务的通知接口。
这应该是我能想到的,最简单的一个交易系统的设计了。