2000年前后:交易主站、席位、中间件、交易所到底是什么关系?#
如果把1990年代中国证券IT的发展简单概括成一句话:
证券市场正在从“营业部电脑化”,变成“证券公司网络化”。
而到了2000年前后,真正复杂的问题已经变成:
一笔订单究竟从哪里进入证券公司,又经过哪些服务器、哪些交易通道、哪些席位,最后怎样进入上交所或深交所?
要理解 KCBP、KCXP、AS、AR、HARE 这一代证券软件,首先必须把四个经常被混淆的概念拆开:
交易主站、交易席位、中间件、交易所。
一、先给结论:四个东西根本不是一回事#
最简单的结构可以画成:
投资者
↓
证券营业部
↓
证券公司中央交易系统
↓
交易中间件
↓
交易网关 / 席位通道
↓
交易所这里至少存在五个不同层次:
① 投资者 / 营业部
② 证券公司核心交易系统
③ 交易中间件
④ 交易席位 / 交易通道
⑤ 交易所很多历史资料把这些概念混在一起,所以今天重新看90年代末、2000年代初的证券系统,很容易出现:
“席位就是服务器?”
或者:
“交易主站就是交易所?”
或者:
“KCBP就是交易主站?”
这些理解都不够准确。
二、先从一笔最简单的订单开始#
假设投资者想买:
600000
1000股
10.00元投资者并不会直接把这个订单发给上交所。
最粗略的链条是:
投资者
↓
营业部
↓
证券公司
↓
交易席位
↓
上交所但是这个图太简单了。
真正的IT系统可能更接近:
投资者
↓
营业部终端
↓
营业部接入系统
↓
集中交易系统
↓
交易主站
↓
中间件
↓
交易网关
↓
席位
↓
上交所成交后反过来:
上交所
↓
席位
↓
交易网关
↓
中间件
↓
交易主站
↓
集中交易系统
↓
营业部
↓
投资者这才是我们需要理解的“数据流”。
三、什么是营业部?#
先从最靠近投资者的一端开始。
1990年代早期,营业部本身就是一个相对完整的计算机系统:
客户
↓
营业部柜台
↓
营业部服务器
↓
营业部数据库营业部负责:
- 客户资料;
- 资金账户;
- 委托;
- 成交;
- 打印;
- 查询;
- 部分风险控制;
- 部分清算和结算业务。
因此:
早期营业部本身就是一个小型证券交易中心。
四、集中交易以后,营业部发生了什么变化?#
随着集中交易建设,营业部逐渐失去了一部分“计算中心”的角色。
变成:
客户
↓
营业部
↓
网络
↓
中央系统于是营业部越来越像:
证券公司的前端节点。
它主要负责:
输入
↓
传输
↓
显示而不是自己完成全部交易逻辑。
五、什么是中央交易系统?#
假设一家证券公司有:
营业部001
营业部002
营业部003
...
营业部100以前:
001 → 本地系统
002 → 本地系统
003 → 本地系统集中以后:
001 ─┐
002 ─┤
003 ─┤
... ├──→ 中央交易系统
100 ─┘中央交易系统开始统一处理:
客户
账户
资金
证券
委托
成交
风险
状态所以:
集中交易首先意味着“数据和交易处理能力集中”。
六、那么什么叫“交易主站”?#
“主站”这个词非常容易让现代程序员误解。
它不是简单意义上的:
Main Server。
在证券行业历史语境里,“主站”更多是在描述:
整个交易网络中的中心交易节点。
它通常位于证券公司中心机房,承担大量核心交易处理。
可以粗略理解为:
中央交易主站
│
┌───────────────┼───────────────┐
↓ ↓ ↓
营业部001 营业部002 营业部003同时:
中央交易主站
↓
交易通道
↓
交易所所以它处在:
营业部网络与交易所网络之间。
七、交易主站不是交易所#
这是第一条必须记住的原则:
证券公司交易主站 ≠ 上交所交易主站属于:
证券公司而交易所属于:
市场基础设施两者之间通过交易通道连接。
因此:
证券公司
↓
交易主站
↓
交易通道
↓
上交所或者:
证券公司
↓
交易主站
↓
交易通道
↓
深交所八、那么“交易席位”是什么?#
交易席位又是另一个概念。
可以先用一个非常粗略的现代类比:
席位更像证券公司获得的交易资格与交易接入身份。
它不应该简单理解为:
一台服务器也不能简单理解为:
一条网线更不能简单理解为:
一个营业部它更接近:
证券公司
↓
交易资格
↓
交易席位
↓
交易所九、为什么历史上的“席位”特别容易被误解?#
因为早期席位真的具有非常强的物理属性。
交易大厅里:
┌────┬────┬────┬────┐
│席位│席位│席位│席位│
└────┴────┴────┴────┘交易员坐在那里。
电话在旁边。
终端在旁边。
订单从营业部传过来。
交易员再把订单输入交易系统。
所以当年:
席位既是制度概念,也是物理交易位置。
十、后来席位逐渐“电子化”#
随着交易系统发展:
物理席位
↓
电子交易席位
↓
逻辑交易通道席位越来越不像一个“座位”。
它更像:
交易资格
+
身份
+
市场接入
+
交易通道因此到了集中交易时代,可以看到:
多个营业部
↓
一个中央交易系统
↓
一个或多个交易席位
↓
交易所十一、一个席位可以服务很多营业部#
这是理解集中交易最关键的一点。
例如:
营业部A ─┐
营业部B ─┤
营业部C ─┤
营业部D ─┼──→ 中央交易系统
营业部E ─┘ ↓
席位
↓
上交所因此:
营业部不是席位。
而是:
大量营业部的订单可以经过中央系统汇聚到交易席位。
这就是证券公司网络的“聚合”。
十二、于是出现了一个非常重要的 Many-to-Few 模型#
客户端这一侧:
很多营业部
+
大量投资者
+
大量委托交易所这一侧:
少量席位
+
少量标准化交易接口中间:
┌→ 席位1 → 上交所
很多营业部 → 中央系统 ─→ 席位2 → 深交所
└→ 其他通道也就是:
Many
↓
Centralized Processing
↓
Few这就是证券集中交易网络最典型的拓扑。
十三、中间件为什么出现?#
现在问题来了。
如果中央交易系统直接负责:
上交所
深交所
银行
登记
清算那么它内部会越来越复杂。
例如:
核心系统
├── 上交所接口
├── 深交所接口
├── 银行接口
├── 登记接口
└── 清算接口这样就产生大量耦合。
于是开始出现:
核心系统
↓
中间件
↓
各种外部系统十四、中间件到底在干什么?#
可以把中间件理解成:
证券公司内部语言与外部交易系统语言之间的翻译、路由和可靠传输层。
例如核心系统产生:
内部订单:
{
customer: 10001,
stock: 600000,
qty: 1000,
price: 10.00
}中间件负责把它变成:
上交所需要的交易消息如果是深圳市场:
核心系统
↓
中间件
↓
深圳交易协议如果是上海市场:
核心系统
↓
中间件
↓
上海交易协议所以:
核心业务系统不需要自己懂所有外部协议。
十五、中间件至少承担四种工作#
可以把它概括成:
① Message
② Routing
③ Protocol
④ Reliability即:
1. Message——消息#
处理:
委托
成交
撤单
确认
拒绝2. Routing——路由#
判断:
上海?
深圳?
银行?
登记?3. Protocol——协议#
负责:
内部消息
↓
外部协议4. Reliability——可靠性#
处理:
断线
重发
重复
丢失
顺序
恢复这四个部分组合起来,才是证券交易中间件真正有价值的地方。
十六、为什么“消息”是证券系统的核心?#
假设:
订单100001发送出去。
接下来可能出现:
已发送
↓
已收到
↓
已接受
↓
部分成交
↓
全部成交或者:
已发送
↓
被拒绝或者:
已报
↓
撤单
↓
撤单成功所以一笔交易并不是一个事件。
而是一整个:
状态机。
十七、一笔订单在系统里是什么?#
从业务角度:
买1000股从IT角度:
Order ID
Customer ID
Account ID
Market
Security ID
Price
Quantity
Timestamp
Session
Sequence
Status然后不断产生新的事件:
Order
↓
Ack
↓
Execution
↓
Cancel
↓
Cancel Ack因此证券交易系统实际上是:
一个高可靠金融消息处理系统。
十八、这也是为什么“交易中间件”与普通企业消息系统不同#
普通企业系统可能允许:
消息晚一点到。证券交易通常不能接受:
订单状态不知道。例如:
投资者认为:
我已经撤单。但是交易所实际上:
已经成交。那么问题就非常严重。
所以交易系统必须准确知道:
委托状态
成交状态
撤单状态十九、最危险的情况:网络断了#
假设:
订单100001已经发送。
突然:
网络断开。证券公司不知道:
交易所收到了吗?如果直接重新发送:
订单100001可能导致:
重复订单所以系统必须支持:
Sequence
+
Message ID
+
Acknowledgement
+
Recovery
+
Deduplication这些机制。
二十、所以交易中间件本质上开始承担“可靠消息总线”的角色#
可以画成:
中间件
│
┌───────────┼───────────┐
↓ ↓ ↓
委托 成交 撤单
│ │ │
└───────────┼───────────┘
↓
交易通道
↓
交易所它不只是:
Socket → Socket而是:
业务消息
↓
路由
↓
协议转换
↓
可靠传输
↓
状态维护
↓
恢复二十一、于是“交易主站”和“中间件”的关系出现了#
这是第二个特别容易混淆的地方。
不能简单写成:
交易主站 = 中间件更合理的理解是:
交易主站
└── 交易处理环境 / 中央节点
中间件
└── 其中负责消息通信、路由、协议适配等的一类基础软件所以:
主站是系统架构中的中心节点概念,而中间件是软件层概念。
两者不是同一个维度。
二十二、一个交易主站里可能包含很多组件#
例如抽象成:
┌────────────────────────────┐
│ 交易主站 │
│ │
│ ┌──────────────────────┐ │
│ │ 客户/账户处理 │ │
│ ├──────────────────────┤ │
│ │ 委托处理 │ │
│ ├──────────────────────┤ │
│ │ 风险控制 │ │
│ ├──────────────────────┤ │
│ │ 交易消息 │ │
│ ├──────────────────────┤ │
│ │ 中间件 / 通信层 │ │
│ └──────────────────────┘ │
└────────────────────────────┘因此不能看到某个产品运行在“主站”上,就认为:
这个产品本身就是整个主站。
二十三、KCBP/KCXP应该放在哪里?#
现在终于可以把前面的问题放进去。
可以用一个历史架构概念来理解:
营业部
↓
集中交易系统
↓
KCBP / KCXP 类中间层
↓
交易通道
↓
交易席位
↓
交易所它们所解决的问题,是:
集中交易以后,证券公司如何把内部交易业务可靠地连接到外部市场。
因此研究KCBP/KCXP的时候,不能只把它们看成“某个功能模块”。
它们背后反映的是整个证券行业的架构变化。
二十四、为什么金证和恒生都会做类似东西?#
因为两家公司面对的是同一个历史现实:
营业部越来越多
+
交易量越来越大
+
集中交易开始普及
+
上交所/深交所接口复杂
+
银行系统需要连接
+
登记清算需要连接所以无论金证还是恒生,都必须解决:
连接
+
消息
+
路由
+
协议
+
可靠性因此出现:
金证
KCBP / KCXP
恒生
AS / AR这样的产品体系并不奇怪。
真正值得研究的是:
为什么两家公司对相同问题给出了不同的软件边界。
二十五、这时候再看“席位”,它就非常清楚了#
整个链条:
客户
↓
营业部
↓
中央交易系统
↓
中间件
↓
席位
↓
交易所其中:
营业部#
负责:
客户入口中央交易系统#
负责:
证券业务处理中间件#
负责:
消息、路由、协议、可靠性席位#
代表:
进入交易所的交易资格 / 通道身份交易所#
负责:
市场集中交易与撮合这样五者的边界就非常清楚了。
二十六、再看一笔成交回报#
假设:
订单100001在上交所成交。
交易所产生:
Execution然后:
上交所
↓
席位
↓
交易通道
↓
中间件
↓
中央交易系统
↓
客户账户最终投资者看到:
成交1000股
价格10.00但后台实际上发生了:
交易所成交
↓
消息产生
↓
消息传输
↓
消息解析
↓
路由
↓
账户更新
↓
持仓更新
↓
营业部回报二十七、如果成交回报丢了怎么办?#
这又回到了中间件的核心价值。
例如交易所已经成交:
1000股但是:
交易所 → 证券公司的网络中断。
那么证券公司必须能够:
发现缺失
↓
重新建立会话
↓
获取缺失消息
↓
按序恢复
↓
更新状态因此:
交易系统真正害怕的不是“网络断线”,而是“断线以后不知道发生了什么”。
二十八、这也是为什么交易系统非常强调“对账”#
最终每天都要回答:
交易所说成交了多少?和:
证券公司系统认为成交了多少?是否一致。
例如:
证券公司:
成交100,000笔
交易所:
成交100,000笔正常。
如果:
证券公司:
100,000
交易所:
99,999就必须查。
所以:
交易
↓
清算
↓
对账成为整个证券系统的闭环。
二十九、这其实就是金融系统最重要的“闭环”#
普通互联网应用可能是:
Request
↓
Response证券交易则是:
Order
↓
Exchange
↓
Execution
↓
Clearing
↓
Settlement
↓
Position
↓
Reconciliation所以证券IT比普通业务系统更加严格。
三十、为什么证券公司最终必须建设双机甚至多机?#
因为:
集中交易意味着:
一个中心节点一旦中心节点失败:
所有营业部
↓
无法交易所以开始需要:
主机
↓
备机进一步:
主站A
↕
主站B再进一步:
生产中心
↓
灾备中心以及:
数据库备份
+
交易日志
+
消息日志
+
状态恢复三十一、集中交易实际上带来了“集中风险”#
这是集中交易的悖论:
集中化解决了管理问题,却放大了中心故障风险。
以前:
营业部A挂了可能只是:
A不能交易现在:
中央主站挂了可能:
100个营业部全部不能交易所以证券IT开始特别强调:
高可用
+
冗余
+
灾备
+
恢复三十二、这也是2000年代证券IT为什么越来越像“大型分布式系统”#
虽然当时还没有今天流行的:
Microservices
Kafka
Kubernetes
Cloud
API Gateway但是架构问题已经非常类似:
大量客户端
↓
中心服务
↓
消息中间件
↓
多个外部系统并且需要:
高并发
+
低延迟
+
高可靠
+
顺序保证
+
故障恢复
+
数据一致所以证券IT其实很早就进入了:
大型金融分布式系统时代。
三十三、为什么“低延迟”越来越重要?#
早期柜台交易:
分钟
甚至更长后来:
秒再后来:
毫秒当市场竞争加剧以后:
订单 → 交易所的速度越来越重要。
因此:
营业部
↓
中央主站
↓
中间件
↓
交易网关
↓
交易所每一层都不能做太多无意义的事情。
于是证券中间件逐渐从:
“能通信”演变成:
“高性能地通信”三十四、这就是“交易系统中间件”和普通企业中间件的区别#
普通企业消息系统:
可靠已经很好。
证券交易系统要求:
可靠
+
有序
+
可恢复
+
可追踪
+
低延迟
+
可对账所以证券中间件从诞生之日起,就具有非常强的行业属性。
三十五、整个2000年前后的系统可以画成这样#
投资者
│
▼
┌──────────────┐
│ 证券营业部 │
└──────┬───────┘
│
▼
┌────────────────────┐
│ 集中交易系统 │
│ │
│ 客户 / 账户 / 委托 │
│ 风险 / 持仓 / 状态 │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ 交易主站 │
│ │
│ 中央交易处理中心 │
└─────────┬──────────┘
│
▼
┌────────────────────┐
│ KCBP / KCXP 类层 │
│ │
│ 消息 / 路由 / 转换 │
│ 会话 / 恢复 / 对账 │
└─────────┬──────────┘
│
┌────────┴────────┐
▼ ▼
上海席位 深圳席位
│ │
▼ ▼
上交所 深交所注意:
这是一张概念架构图,不是对某一家证券公司某一年实际部署拓扑的断言。
不同厂商、不同证券公司、不同年份的实际系统边界可能存在差异。
三十六、把整个历史再压缩成一句话#
1986年:
柜台就是交易中心1990年前后:
交易所成为市场中心1990年代中期:
营业部开始联网1990年代后期:
证券公司建立中央交易系统2000年前后:
中央交易系统
↓
交易主站
↓
中间件
↓
席位
↓
交易所于是证券交易正式进入:
**“网络化
这样才能真正回答一个问题:
> **2000年前后,中国证券公司的“交易软件”到底是怎么跑起来的?**