技术博客

柜台系统总览:交易柜台 vs 集中交易——主柜台与极速柜台的分工

第 25 / 141 篇 · 2025-12-29 · secfin · 柜台系统系统架构低延迟

券商内部的口语里,"柜台"泛指整套交易系统——"这单走了哪个柜台"问的是下单通道,"柜台系统升级"说的是那套大而全的核心。同一个词指两个粒度的东西,不是口误,而是行业历史:集中交易改造(2000 年代券商把分散在营业部的交易集中到总部一套系统)造出了"集中交易系统"这个词,后来量化私募兴起,低延迟通道从里面分化出来,"极速柜台"这个词又叠了上去。这篇把这两个层次拆开讲。

主柜台:一个系统装下整个券商

集中交易之前,每个营业部有自己独立的小系统,客户换营业部等于换券商,总部看不到全局风险。集中交易改造的核心决策是客户、账户、资金、证券全部上收总部,一套系统服务全部分支机构和全部渠道(现场、电话、网上交易)。

这套主柜台今天看是个典型的"单体巨石":客户管理、账户体系、委托接入、订单管理、事前风控、清算结算、核算、查询报表,全部在一个技术栈里。它的架构选择由业务性质决定:

  • 账务强一致:委托、成交、资金、持仓四张核心表必须时刻对得上,所以交易路径上大量逻辑用数据库事务 + 存储过程实现——这也是后面基础设施篇要讨论的"券商为什么偏爱 Oracle/存储过程"的根源;
  • 功能全集:合规要求的功能(适当性、双录、留痕)和业务需要的功能(融资融券、期权、基金代销)都得有,功能堆叠三十年,没人敢做大重构;
  • 日终吞吐优先:批量清算跑几个小时的架构,和毫秒级交易路径的架构,在一套系统里互相妥协。

主柜台(集中交易系统)分层与极速柜台的分工边界接入层:协议网关 / 网上交易 / 手机 App / 电话委托订单管理层:委托校验 / 事前风控 / 订单状态机账务核心:资金 / 持仓 / 复式记账(数据库事务)清算结算 / 核算 / 报表(日终批量)极速柜台只做:协议接入 + 风控 + 报盘内存交易核心订单簿 / 资金持仓快照全内存异步同步 → 主柜台成交回报 / 余额快照对齐边界:极速柜台不碰清算、不管账户业务两条通路并存:普通客户走主柜台全链路;量化客户走极速柜台低延迟通路一致性代价:极速柜台的内存余额是快照,权威数据仍以主柜台账务为准

极速柜台:砍功能换延迟

2010 年后量化私募规模化,委托从"人点鼠标"变成"程序发单",延迟从秒级卷到微秒级。主柜台的架构做不到:数据库事务一次要毫秒级,功能全集意味着代码路径长、依赖多。于是出现极速柜台——它不是把主柜台优化快一点,而是把主柜台砍掉只剩交易通道:

  • 状态全内存:资金、持仓、订单全部加载进内存,账务不走数据库事务,靠日志持久化(细节在"内存撮合 vs 数据库撮合"篇展开);
  • 功能砍到底:开户、销户、改资料、清算、报表一概不做,只保留"接委托 → 风控 → 报交易所 → 收回报 → 记内存账";
  • 报盘直连:到交易所的链路专门优化(低延迟网卡、内核旁路,见低延迟手段篇)。

功能砍掉的前提是主柜台还在。极速柜台是寄生的:客户资料、权限、日终清算、监管报表全部仍由主柜台负责。极速柜台每天开市前从主柜台同步资金和持仓快照,盘中用自己的内存副本做风控校验,收市后把成交回报和余额变动同步回主柜台,由主柜台完成日终清算。两个系统各记一份账,权威以主柜台为准,极速柜台的内存账是缓存不是账本——这个关系必须时刻清楚,否则对账时谁都说不清哪个数是真的。

并存架构的一致性难题

双柜台并存带来三个工程问题。

快照时点的取舍。 开市前同步的余额快照,和开市后主柜台上发生的银证转账、其它渠道的委托,天然存在裂缝。客户在 App 上转钱进来,极速柜台不知道;极速柜台风控按旧快照校验,可能错误拒绝。解法通常是转账类业务限制:走极速柜台的账户,资金划转走专用通道实时同步,或干脆规定快速通道客户的钱必须通过指定入口进出。

成交回报的回传时序。 极速柜台成交后异步推给主柜台,中间有时间差。如果客户同时在两个通道都有委托,主柜台侧的可用余额计算会短暂失真。设计上把"极速通道的冻结/扣款"也做成事件流实时推给主柜台,两边用同一套事件驱动的余额模型,而不是各自读改写。这和前面讲过的"同一账户串行"是同一个问题在系统间的版本。

故障切换的边界。 极速柜台崩了,量化客户的委托停了——但客户资金状态停在内存里。切换回主柜台前必须把内存账对平:已报未回的委托状态、冻结的余额,要么落库要么作废,绝不能让两个柜台同时对同一账户记账。实务上的切换 SOP 是"先冻结账户交易 → 对平 → 放行",宁可停几分钟,不要账乱。

给开发者的视角

面对一套券商交易系统时,先问三个问题就能定位任何功能的归属:这个操作碰不碰账务(碰就是主柜台的地盘)、延迟预算是多少(毫秒级预算走交易链路,秒级预算走异步任务)、监管要不要留痕(要留痕的不会出现在极速柜台里)。极速柜台的存在本身是个架构宣言:一致性、功能全集、低延迟,三者最多同时拿两个。主柜台选了前两个,极速柜台选了后两个加"寄生在主柜台上的一致性"——这不是妥协失败,是把两套约束拆到两个系统里,各自最优。