Systems And Data
14 系统架构与数据流(BA 视角)
这是你 IT 背景最能发挥价值的章节。用你对技术的理解,设计出既满足业务需求、又技术可行的系统。
一、OTC 衍生品系统全景图
核心系统架构
graph TB
subgraph "前端(Front Office)"
CRM[CRM 客户管理]
PT[报价工作台]
OMS[交易管理系统/OMS]
RD[风险仪表盘]
end
subgraph "中台(Middle Office)"
ENG[定价引擎]
RISK[风险引擎]
VM[估值系统]
COLL[抵押品管理]
end
subgraph "后台(Back Office)"
SETT[结算系统]
ACCT[会计/财务系统]
REG[监管报送]
DOC[文档管理]
end
subgraph "外部系统"
MT[市场数据/Wind/BBG]
CSD[中证登/上清所]
BANK[托管行]
REGAPI[监管接口]
AML[反洗钱系统]
end
CRM --> OMS
PT --> OMS
OMS --> ENG
OMS --> RISK
OMS --> SETT
OMS --> DOC
RISK --> VM
VM --> COLL
VM --> ACCT
SETT --> CSD
SETT --> BANK
REG --> REGAPI
CRM --> AML
MT --> ENG
MT --> RISK
MT --> VM
二、核心系统功能列表
交易管理系统(OMS)
| 功能 | 说明 | 优先级 |
|---|---|---|
| 交易录入 | 支持键盘快捷键的快速录入 | 最高 |
| 交易修改 | 改单、撤销 | 最高 |
| 交易查询 | 按产品、客户、交易员查询 | 高 |
| 交易审批 | 大额/异常交易审批流 | 高 |
| 批量处理 | 批量录入、批量修改 | 中 |
| 审计日志 | 所有操作记录 | 高 |
定价引擎
| 功能 | 说明 |
|---|---|
| 模型管理 | 支持 B-S、蒙特卡洛、二叉树等模型 |
| 曲线管理 | 折现曲线、远期曲线维护 |
| 波动率管理 | 波动率曲面维护与更新 |
| 批量计算 | 全量持仓定时估值 |
| API 接口 | 供其他系统调用的定价服务 |
风险引擎
| 功能 | 说明 |
|---|---|
| Greeks 计算 | Delta/Gamma/Vega/Theta/Rho |
| VaR 计算 | 参数法/历史模拟 |
| PFE 计算 | 潜在未来敞口 |
| 压力测试 | 历史情景/假设情景 |
| 限额监控 | 实时/日终限额检查 |
抵押品管理系统
| 功能 | 说明 |
|---|---|
| 保证金计算 | IM/VM 计算 |
| Margin Call | 自动通知、跟踪 |
| 抵押品管理 | 出入库、替换、折扣率 |
| 对账 | 持仓/估值对账 |
| 争议管理 | 争议记录、处理 |
产品方案自动生成(Term Sheet & 路演材料)
解决什么问题:Sales 做产品方案时,以前靠手工拼 PPT/Word——慢、容易错、格式不统一、合规风险高。系统自动生成后:快、一致、审计可查。
核心流程:
产品参数配置(定价系统 / 配置界面)
↓
模板引擎(Term Sheet / Pitch Book)
↓
数据填充(产品参数 + 市场数据 + 图表)
↓
合规预审(内容检查 → 自动放行或人工审批)
↓
版本存档(每次生成存历史版本)
↓
输出(PDF / Word / PPT / HTML)
Term Sheet(条款说明书):
- 一页纸,描述交易核心条款
- 数据来源:定价引擎(参数、票息、封顶/保本线)+ 产品配置
- 必须包含:产品名称、期限、挂钩标的、名义本金、收益结构、风险揭示
- 图表:自动生成 Payoff Diagram(收益结构图)
路演材料(Pitch Book):
- 多页 PPT,面向客户的完整方案
- 包含:市场观点、产品方案、案例回测(Backtest)、风险分析、条款 Summary
- 数据来源:研究团队输入 + 历史回测引擎 + 市场数据
系统功能需求:
| 功能 | 说明 |
|---|---|
| 模板管理 | 预置 Term Sheet(A4一页)/Pitch Book(多页PPT)模板,支持版本管理 |
| 参数填充 | 从定价系统或配置界面读取产品参数,自动填入模板 |
| 图表生成 | Payoff Diagram、回测走势图、风险热力图自动绘制 |
| 批量生成 | 同一产品对多个客户一键生成 |
| 合规检查 | 内容关键词检查(如”保本”是否合规)、统一风险揭示语句 |
| 审批流 | 生成后→合规/产品审批→审批通过才可发送客户 |
| 版本管理 | 每次生成的版本号 + 差异对比 |
| 输出格式 | PDF(默认)/ Word(可编辑)/ PPT(路演)/ HTML(邮件) |
| 签名集成 | 支持电子签章(客户签署回传) |
上下游系统:
上游 下游
定价引擎(参数) → Term Sheet/Pitch Book
市场数据(行情/图表) → 图表生成
客户信息(CRM) → 抬头信息、风险评级
合规系统 → 内容合规检查
→ PDF → 邮件发送客户
→ Word → Sales 修改后定稿
→ 版本 → 文档管理系统归档
PM/BA 关注点:
- 模板谁维护?(产品部?市场部?)
- 数据源准确性:定价参数跟交易系统一致吗?
- 合规检查规则:哪些词不能用?哪些必须写?
- 输出速度:生成一页 Term Sheet 需要几秒?
三、数据流设计
核心数据流
市场数据(Wind/BBG)
↓ 实时价格/曲线/波动率
定价引擎 ←——→ 交易系统(持仓、参数)
↓ MtM/Greeks
风险引擎 ←——→ 抵押品系统
↓ 风险报告/限额
↓
报表系统(监管/内部/客户)
关键数据实体
| 实体 | 属性 | 来源 |
|---|---|---|
| 交易 | ID、产品类型、标的、名义本金、期限、价格 | 交易录入 |
| 持仓 | 交易 ID、当前数量、成本、MtM | 交易系统 |
| 客户 | ID、名称、评级、额度、适当性 | CRM |
| 市场数据 | 价格、波动率、曲线 | Wind/BBG |
| 风险指标 | Greeks、VaR、PFE | 风险引擎 |
| 抵押品 | 类型、金额、折扣率、归属 | 抵押品系统 |
四、关键系统设计考量
| 考量 | 说明 |
|---|---|
| 实时 vs 批处理 | 交易录入需实时,日终估值可批量 |
| 数据一致性 | 跨系统数据需对账机制 |
| 高可用 | 交易时段系统不可宕机 |
| 性能 | 批量计算需在指定窗口完成 |
| 可扩展性 | 支持新产品、新市场 |
| 安全性 | 角色权限、数据隔离、审计 |
五、实战案例:CICC ODTS 系统真实架构(IT BA 视角)
前面是一般化的 OTC 衍生品系统设计蓝图。下面以中金公司(CICC)的实际 ODTS 系统为例,展示真实系统的演进历程和架构决策。作为 IT BA,你会在多个项目中遇到这种”从单体到微服务、从 JSP 到 SPA”的技术演进。
5.1 系统全景(2024 年现状)
graph TB
subgraph "前端生态"
UT[UniLink<br/>Vue3 + pnpm monorepo<br/>下一代统一前端]
OLT[odts-linear-web<br/>Vue3 + Vite<br/>PB线性产品交易UI]
ORW[odts-rm-web<br/>Vue2 + Element UI<br/>风险管理工作台]
NODT[new-edsweb<br/>Vue2 + Element UI<br/>ODTS SPA]
ODY[Odyssey微前端壳<br/>Qiankun + Vue2<br/>主应用/子应用]
OLD[edsWeb旧前端<br/>JSP + Tiles + jQuery<br/>仍在运行]
end
subgraph "网关与认证"
GW[odyssey-internal-gateway<br/>Spring Cloud Gateway<br/>Nacos + Apollo]
AUTH[odyssey-fuxi-auth-web<br/>SSO + JWT + RBAC]
end
subgraph "核心后端服务"
EA[eds-web-app<br/>Spring Boot 1.5<br/>Oracle + Kafka + Pulsar]
HAS[hedging-as<br/>JFinal + Spark<br/>定价/对冲/保证金]
SSS[ods-edsPriceServer<br/>定价引擎服务]
CSV[odyssey-cash-manager-service<br/>资金/结算管理]
RPS[odyssey-report-processing<br/>监管报送合并]
end
subgraph "数据与行情"
DDB[DolphinDB<br/>高频行情时序库]
REDIS[Redis<br/>缓存/RPC注册中心]
MQ[ActiveMQ / Kafka / Pulsar<br/>消息队列]
end
subgraph "对外报送"
OFA[ofareg<br/>柜台报送/备案平台<br/>Spring Boot + MyBatis]
end
OLD --> EA
NODT --> EA
ODY --> GW
GW --> AUTH
OLT -->|Axios| EA
OLT -->|Axios| CSV
ORW --> GW
UT --> EA
EA --> HAS
HAS --> DDB
HAS --> REDIS
OFA -->|TR报送| REGAPI[中证报价/CSRC]
CSV --> SETTAPI[托管行]
5.2 技术栈演进时间线
| 阶段 | 年份 | 项目 | 前端技术 | 后端技术 | 架构风格 |
|---|---|---|---|---|---|
| EDS 时代 | 2016-2017 | edsWeb / eds-web-app / hedging-as | JSP + Tiles 3 + jQuery + Bootstrap | Spring Boot 1.5 + MyBatis + Oracle + Drools | ”三大件”单体 → 前后端分离 |
| Vue 改造 | 2021-2022 | new-edsweb | Vue 2.6 + Element UI + DevExtreme | 复用 eds-web-app REST API | 前端 SPA + 旧后端 API |
| Odyssey 平台 | 2022-2023 | odyssey-main-web / option / swap / swap-rm | Vue 2 + Qiankun 微前端 | Spring Cloud Gateway + Nacos + Apollo + 多微服务 | 微前端 + 微服务 |
| PB 重构 | 2023-2024 | odts-linear-web (PB Refactor) | Vue 3 + Vite + AG Grid Enterprise + Element Plus | 复用/扩展后端服务 | 新一代 SPA |
| UniLink 统一 | 2024- | unilink-parent-web (13+ 子应用) | Vue 3 + TypeScript + pnpm monorepo + Turborepo | 平台化后端服务 | 企业级 monorepo |
| 风险管理 | 持续 | odts-rm-web / odyssey-swap-rm-web | Vue 2 + Element UI + Qinakun | 独立风险服务 | 业务线专属前端 |
5.3 核心项目关系详解
5.3.1 edsWeb + eds-web-app + hedging-as:EDS 时代”三大件”
这是 ODTS 系统的最早期实现(2016-2017),由三个紧密协作的 Java 项目组成:
| 项目 | Git 出生 | 角色 | 端口 | 关键技术 |
|---|---|---|---|---|
| edsWeb | 2016-12-16 | 前端 Web 层 | 8080 | Spring MVC 4.1 + Apache Tiles 3 + JSP/JSPX + Shiro + Hibernate 4 |
| eds-web-app | 2016-12-28 | 后端应用服务 | 8087 | Spring Boot 1.5 + MyBatis + Oracle + Drools + ActiveMQ + MINA Protobuf |
| hedging-as | 2017-02-22 | 对冲/定价引擎 | 8082 | JFinal + Spark(MC) + Oracle + QuickFIX/J + ZMQ + ActiveMQ |
通信方式:
[旧前端 edsWeb:8080] ←→ REST/JSON → [eds-web-app:8087] ← RPC/Protobuf → [hedging-as:8082]
[edsWeb 旧前端] ←→ Protobuf/TCP(MINA) → [AccessApp 网关] → [eds-web-app]
关键架构特征:
- 双通道前端通信:edsWeb 同时使用 REST(Spring MVC Controller)和 Protobuf/TCP(MINA NIO + AccessApp 网关)
- 双数据层:eds-web-app 同时维护 MyBatis(REST API)和自定义 DAO(遗留 Action 层)
- 规则引擎:Drools(28 个规则目录)处理对冲、确认、结算、保证金逻辑
- 多数据库:Oracle(主库)+ DolphinDB(行情时序)+ MySQL(ATP 清算)
5.3.2 new-edsweb:旧前端的 Vue 替代(2021+)
2021 年,团队用 Vue 2 SPA 逐步替换 edsWeb 的 JSP 页面:
- 位置:作为
edsWeb/项目的 git submodule 嵌入,部署在同一 Tomcat 下 - 集成方式:旧 JSP 菜单链接指向
/assets/vue/#/xxx,Vue 路由劫持后渲染新页面 - 菜单:仍然是 JSP 服务端渲染——Vue 启动后通过 Axios 请求旧后端获取 HTML 菜单,解包注入 DOM
- API:
http.js自动添加 baseURL 前缀,host.js动态判断开发/生产环境 - 典型页面:开户(innerOpenAccount)、银行流水(bankFlow)、外汇(foreignExchange)、风控指标(riskIndicators)等 38 个路由
BA 笔记:这种”Vue SPA 嵌入 JSP 系统”是大型企业系统前后端分离的典型过渡模式。菜单仍由后端控制,前端专注于业务功能页面。
5.3.3 Odyssey 平台(2022+)
Odyssey 是 ODTS 的微服务化升级,引入了:
- 微前端:Qiankun 框架,main-web 作为壳应用,加载 option-web / swap-web / swap-rm-web / public-web
- API 网关:Spring Cloud Gateway + Nacos(服务发现)+ Apollo(配置中心)
- 统一认证:Fuxi(复曦)SSO + JWT
- 平台化服务:cash-manager(资金管理)、quotation(行情)、report-processing(报送)
5.3.4 odts-linear-web:PB Refactor(2023+)
PB(Prime Brokerage)线性产品的最现代前端:
- 技术栈:Vue 3 + Vite + AG Grid Enterprise(专业表格)+ Element Plus
- 范围:完整覆盖收益互换、期权管理、指数增强、跨境锁仓、ETF 校验等业务
- 特点:4000+ commits,JIRA 引用
ODTSPB-XXXX/PBRM-XXXX
5.3.5 ofareg:柜台报送平台
ODTS 与监管机构的报送桥梁:
- 项目 9000+ commits,是代码量最大的项目
- 对接中证报价、CSRC、交易所等外部监管接口
- Spring Boot + MyBatis-Plus 多模块架构
5.4 核心模块与业务功能映射
| 业务功能 | eds-web-app 实现 | hedging-as 实现 | 前端 |
|---|---|---|---|
| 交易管理 | 72 个 REST Controller | Protobuf Action 层 | edsWeb + new-edsweb + odts-linear-web |
| 定价 & Greeks | — | Spark Monte Carlo + EDS Library | 各前端查询接口 |
| 保证金计算 | Drools 规则(28 目录) | MarginService (Rule 1-8) | JSP + new-edsweb |
| EOD 处理 | 112 Cron 任务 | risk/checkpoint/eod | odts-linear-web |
| 压力测试 | 调用 hedging-as | Spark 分布式计算 | JFinal Web 控制台 |
| 中证报价报送 | — | — | ofareg 独立系统 |
| 合同生成 | EasyPoi + iText | 合同状态机 | 多前端 |
| 日终估值 | Cron 调用 | CalService + Spark | odts-linear-web |
| 资金管理 | CashVrController | — | odyssey-cash-manager |
5.5 数据库架构
| 数据库 | 用途 | 访问方式 |
|---|---|---|
| Oracle (odtsdb) | 所有业务数据——合同、交易、持仓、客户、风控 | JDBC 连接池(Druid/C3P0/BasicConnectionPool) |
| DolphinDB | 高频行情数据——实时报价、历史 tick | Java API(2.00.11.1) |
| MySQL (ATP) | 清算数据——清算中心视图查询 | MyBatis + Druid |
| Redis | 缓存、RPC 注册中心、消息流 | Redisson + Jedis Sentinel |
| OpenHFT Chronicle-Map | 堆外内存 KV 存储(低延迟定价缓存) | hedging-as 专用 |
5.6 消息队列架构
| MQ | 用途 | 所在项目 |
|---|---|---|
| ActiveMQ | 对冲数据分发(eds-hedging-data topic)、风险规则更新 | eds-web-app / hedging-as |
| Kafka | 流式事件处理、CDC(Change Data Capture)、订单流 | eds-web-app |
| Pulsar (Dipper) | 平台级消息流——CICC DataCOE 数据平台 | eds-web-app (DipperMqAccessServer) |
| ZeroMQ | 低延迟行情推送(snapshot + streaming) | hedging-as |
| Redis Streams | IMS 订单/敲入敲出流 | eds-web-app |
5.7 架构决策记录(ADR)
| 决策 | 选择 | 替代方案 | 理由 |
|---|---|---|---|
| 双通道前端通信 | REST + Protobuf/TCP | 纯 REST | 历史原因——旧 AccessApp 使用 Protobuf,新 REST API 逐步替代 |
| 规则引擎选型 | Drools + Easy-Rules | 自研规则 | 业务规则频繁变化(保证金/确认),规则引擎可视化维护 |
| 定价计算 | Spark 分布式 + EDS Library | 单机计算 | Monte Carlo 路径计算量大,Spark 集群并行(10.110.166.245:7077) |
| 新旧前端共存 | Vue SPA 嵌入 JSP | 全量重写 | 渐进式迁移,降低风险——38 个页面逐步替换 78 个 JSP 模块 |
| 行情数据库 | DolphinDB | 自研/Kudu | 时序数据查询性能要求极高,DolphinDB 专为金融场景优化 |
5.8 给 IT BA 的关键洞察
- 渐进式架构演进:从”三大件”单体 → Vue 混搭 → 微前端 → 微服务 → monorepo,每一步都保持向后兼容
- 新旧系统长期共存:2024 年 edsWeb(2016)仍在运行,与 Vue 3 SPA 共存——这是大型金融机构的常态
- 开发语言集中:全部 Java 8 + Vue(2/3),没有夸语言跨技术栈的复杂混合,利于维护
- 内部生态完善:CICC 有自研框架(Fuxi、Dipper、DataCOE、HMC SDK),系统深度嵌套在企业生态中
- 监管驱动建设:ofareg 报送平台、EOD 处理、SAC 报告等模块的复杂度源自监管要求,而非业务本身
- 中资券商特点:Oracle 为主库、GBK 编码、中国市场数据为主——与外资投行差异化明显
5.9 Odyssey 微服务交互全景
EDS 核心系统与 Odyssey 中台微服务之间的数据流:
5.9.1 服务调用链(跨系统视角)
[前端 Odyssey Main Web / Qiankun 子应用]
|
v
[odyssey-internal-gateway] ← Spring Cloud Gateway, Nacos LB
|-- /api/auth/** → [odyssey-fuxi-auth-web] ← JWT 签发 + RBAC
|-- /api/cash/** → [odyssey-cash-manager-service] ← 保证金追缴 + 资金划转
|-- /api/report/** → [odyssey-report-processing-service] ← EDS→OFA 数据处理
|-- /api/core/** → [eds-web-app] ← 核心业务 API
|
v
[eds-web-app] ←→ [hedging-as] ← RPC/Protobuf, 定价/对冲
| |
v v
[Oracle ODTSDB] [ActiveMQ/Kafka/Pulsar]
|
v
[Dipper/Pulsar 消息流] → [PostgreSQL Finalized]
5.9.2 各微服务详解
odyssey-cash-manager-service(资金管理)
| 功能 | 触发方式 | 源数据 | 目标 |
|---|---|---|---|
| 保证金追缴指令生成 | EOD 第 7 步 MarginStep.java | hedging-as | odyssey-cash-manager-service → IPMP |
| 资金划转确认 | IPMP 回调 | IPMP | Oracle ODTSDB |
| 清算对账 | 每日定时 | Oracle ODTSDB + 托管行接口 | 对账报告 |
| 资金流水查询 | 用户请求 (REST API) | ODTSDB ATP 视图 | 前端表格展示 |
代码路径:odyssey-cash-manager-service/src/main/java/com/cicc/odyssey/cash/controller/ + service/MarginCallService.java
odyssey-report-processing-service(报告加工)
这个服务是 EDS → OFA 的中间数据处理层:
hedging-as (EOD 第 8 步)
→ REST/JSON
→ odyssey-report-processing-service (数据合并/校验)
→ REST/JSON
→ ofareg (柜台报送)
→ 中证报价 / CSRC / 交易所
处理内容:
- 交易数据 OTC → 柜台格式映射(字段级转换)
- 多系统数据合并(EDS + odyssey-cash-manager + 外部数据)
- 报送前合规校验(利率、汇率、标的限额)
- 报送失败重试与人工干预接口
代码路径:odyssey-report-processing-service/src/main/java/com/cicc/odyssey/report/service/
odyssey-fuxi-auth-web(斧溪认证)
| 功能 | 说明 |
|---|---|
| SSO 单点登录 | 统一接入,支持企业微信/Domain |
| JWT 签发 | 无状态 Token,网关校验 |
| RBAC 权限 | 交易员/风控/运营/管理员 多角色 |
| 审计日志 | 操作记录,满足合规要求 |
odyssey-internal-gateway(内部网关)
| 功能 | 实现 |
|---|---|
| 路由 | Nacos 服务发现 → 按服务名路由 |
| 认证校验 | 拦截所有请求,调用 fuxi-auth-web 校验 JWT |
| 限流 | Sentinel 流量控制 |
| 配置 | Apollo 配置中心,支持动态路由规则 |
5.9.3 关键交互时序——保证金追缴
1. hedging-as EOD 第 7 步 → 计算所有交易对手的 Margin 缺口
2. hedging-as → Pulsar 消息 → odyssey-cash-manager-service
3. odyssey-cash-manager-service → 生成 MarginCall 指令
4. odyssey-cash-manager-service → REST → IPMP 发起资金划转
5. IPMP → 异步回调 → odyssey-cash-manager-service → 更新状态
6. odyssey-cash-manager-service → JUMS → 交易对手/交易员 接收追保通知
下一步:15-Client-Ecosystem.md 了解客户生态,或参考实战案例中的系统实现细节