基于微服务的外汇交易系统的设计与实现
作者: 郑文涛
摘要:外汇交易系统是银行金融市场的常用应用系统之一,主要提供外汇衍生品交易、报价汇率、风险管理、清算等功能,也是银行开展外汇业务的核心系统。随着全球经济一体化的深入发展,我国外汇市场迎来新的发展机遇,外汇业务产品种类更加丰富多样。某银行原有的外汇交易系统是单体架构,模块之间紧密耦合,维护困难、扩展性差,已无法满足复杂多变的外汇业务发展需求。在此背景下,文章研究设计并实现了基于SpringBoot、Vue 框架的分布式微服务外汇交易系统。该系统可以快速迭代,实现对业务需求的快速响应。研发团队可以并行工作,提高效率,缩短项目周期,实现降本增效。服务之间通过轻量级通信方式实现解耦,服务独立扩展、扩容,独立部署和更新,具有较强的扩展性和容错能力。
关键词:外汇交易系统;分布式;微服务;SpringBoot;Vue
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2025)06-0064-06开放科学(资源服务)标识码(OSID):
0 引言
外汇市场作为全球最大、最流动的金融市场之一,在全球贸易和经济活动中扮演着重要角色。外汇衍生品交易是外汇市场的重要组成部分,其发展推动了外汇市场的深化和多元化[1]。代客外汇衍生品业务具有较大、广阔的市场空间[2]。然而,银行开展代客衍生品交易业务,要求较高,需要满足客户复杂多样化的汇率风险管理需求。因此,必须依靠一套完善、高效的外汇交易系统提供有力支撑。
某银行原有外汇交易系统是多年前基于集中式单体架构建设。一方面随着信息技术的快速发展,系统框架已过时落伍,维护日益困难。另一方面一个系统包含所有服务模块,模块之间耦合较高。存在扩展能力差,并发能力弱,性能低下等根本性问题。
随着互联网和云计算的快速发展,微服务架构在越来越多的行业广泛应用。分布式微服务架构侧重于服务拆分,不同的业务主题域由不同的应用承载其服务逻辑,应用之间相互独立,提高系统的并行处理能力和容错性。服务之间通过轻量级通信机制进行交互,如RESTful API、消息队列等,使服务之间的耦合度降低,提高了系统的可维护性和可扩展性。适合处理高并发和高可用性的业务需求[3]。
在此背景下,本文研究设计并实现了基于Spring⁃Boot、Vue框架的分布式微服务外汇交易系统。该系统技术先进、功能强大、性能高效、易扩展,可以满足银行代客衍生品交易业务量快速扩张和快速迭代升级的需求,增强了银行外汇业务的竞争实力。
1 功能需求
外汇交易平台由首页、牌价管理、交易管理、清算管理、客户管理、台账管理、报表单据、风险管理、公共基础、运维管理、批处理子模块组成。具体系统模块结构如图1所示。
首页是操作员登录系统后的主界面,可以查看最新牌价、待办事项、消息等,由牌价区、事件流程、我的待办、消息提醒模块组成。牌价管理由牌价试算、报价管理、牌价查询组成。通过对接报价引擎,实时接收最新牌价行情。提供即期、远期、掉期、期权的结售汇与外汇牌价试算、查询、新增、批量上架/下架功能。
交易管理支持即期、远期、掉期、期权的购汇、结汇、外汇买卖、存续期业务处理。提供发起审批、询价、上传影像、平仓、交割等功能。即期购汇、结汇、外汇买卖是货币对基于期限T0/T1/T2询价、买入和卖出交易。即期存续期,提供生命周期内交易修改、到期平仓、到期交割、交易撤销等功能。远期购汇、结汇、外汇买卖是货币对基于期限(W为周,M为月,Y为年)1W/2W/3W/1M/2M/3M/4M/5M/6M/7M/8M/9M/10M/11M、1Y/2Y/3Y/4Y/5Y的询价、买入和卖出交易。远期存续期提供生命周期内提前平仓、提前交割、交易撤销、原价展期、非原价展期、提前强制平仓等功能。掉期购汇、结汇、外汇买卖是货币对基于期限ON(Overnight)、SN(Spot-next)、TN(Tomorrow-next)、1M/2M/3M/4M/5M/6M/7M/8M、9M/10M/11M、1Y/2Y/3Y/4Y/5Y的询价、买入和卖出交易。掉期存续期提供生命周期内近端到期交割、全部平仓、全部强制平仓等功能。购汇、结汇期权是货币EUR(欧元)、JPY(日元)、USD(美元)分别对CNY(人民币),外汇期权是货币对EUR/JPY、EUR/USD、USD/JPY的询价交易。期权存续期,提供生命周期内提前平仓、交易撤销、提前强制平仓等功能。
交易的主要过程如下。
1)录入信息:业务人员或客户录入客户号、账户名称、账号等要素,系统调用ECIF(企业级客户信息整合系统)接口,查询客户信息,在菜单界面反显供核对。
2)上传影像资料:包括交易申请书、免收凭证、单笔单核等jpg、png、pdf文件,进入客户真实性资料审核流程。
3)交易金额计算:系统根据录入的交易货币1、交易货币2、交易金额1、实时牌价,计算出货币2对应的交易金额2,反显于界面。
4)风险担保:录入担保信息,可以选择保证金、授信、免收三种模式之一。保证金模式,根据币种、保证金账户、金额,系统调用核心接口进行圈存。授信模式,根据客户号、授信额度,系统调用额度系统接口,进行额度占用。免收模式,根据币种、账户、免收金额,系统调用核心接口进行冻结。
5)申报备案:录入结售汇申报信息,系统发往外汇监管部门备案。
6)审批流程:相关检查完成后,进入交易审批流程,业务人员审批完成后,系统发往核心记账,交易数据落地。
清算管理由交割管理、账务管理、批量交割组成。操作员发起的交易,完成审批流程后,系统根据交易要素和业务场景,生成待交割指令。若指令中交割日为当日,系统实时处理,否则等待到期后系统再处理。若待交割指令满足设置的自动交割业务规则,则直接发往核心系统记账;否则进入人工审批环节,审批完成后,与核心系统交互,完成账务处理。
客户管理由客户信息、协议签约、账号管理、客户授信、客户优惠组成,提供查询、新增、修改、同步功能。为确保客户信息准确性,系统夜间会批量从ECIF系统进行同步更新,同时支持手动同步。
台账管理提供业务相关明细数据的查询、导出,由审批流查询、交易查询、结售汇申报、业务台账、影像台账组成。报表单据对每日交易量进行统计,由业务报表、监控报表、运营报表组成。风险管理由估值管理、担保管理、风险预警管理、合规管理组成,完成客户风险相关业务的处理。
公共基础包含系统参数、菜单、权限、操作员、节假日、货币、机构网点、岗位等基础参数的管理,提供手工配置、修改和同步功能。其中操作员、机构网点、岗位等数据,通过夜间批量从汇聚平台抽取的方式,保证数据及时更新。运维管理由短信配置、标准流程、运维日志、交易维护等子菜单组成,辅助系统日常的运维工作和异常监控。系统将短信数据如手机号码、短信内容发往消息中心,消息中心再转发给电信运营商系统进行发送。批处理用于系统辅助功能和批量任务的处理,包括系统切日、交易数据批量汇总、结售汇数据批量报送、到期数据批量交割、交易到期提醒等功能,每日夜间定时运行。
2 系统设计
2.1 架构设计
外汇系统群体系结构划分为5层,体系架构如图2所示。
1)外联层,由渠道系统和第三方系统组成。
渠道系统如手机App、企业网银、柜面网点,面向社会客户群体,开展外汇产品业务。第三方系统如彭博、CMDS(外汇交易中心)等,相互通信完成信息传递、价格汇率数据发布、交易数据报送监管等功能。
2)前置层,由第三方系统前置和行内前置系统组成。
为提高系统的安全性、保密性,内部系统采用前置堡垒机与其他机构的系统相互连通。第三方系统前置,如彭博前置、CMDS前置,主要负责与银行内部系统通信。行内前置系统如网银前置NGINX、管理台SSO系统、网银后端、柜面后端系统。
3)调度层,由PRICE(外汇牌价引擎)、网关、WEBNET、配置中心、注册中心组成。
PRICE负责对接收彭博、外汇交易中心的牌价数据进行实时、批量的处理,供行内各个系统使用。网关主要提供报文转发、调度、交易限流的功能。WEB⁃NET负责报价的订阅与推送。配置中心负责整个微服务群子系统的配置数据动态、实时下发,统一集成管理。注册中心NACOS提供服务注册、发现、下线、健康状态监测等功能。
4)业务层,由微服务群、核心/内服区、外围系统组成。
微服务群是整个外汇交易系统的核心部分,由若干个子系统组成,是外汇交易的平台基座。核心/内服区由核心系统、ECIF、代客头寸汇聚组成。外围系统由消息中心、电子签章系统、内容管理系统组成,负责发送短信、回单凭证签章、客户资料影像管理等功能。
5)数据层,由MySQL数据库、缓存Redis集群、数据集市、数据仓库等组成。提供数据的存储、读写、分析统计等功能。
2.2 微服务划分
根据模块功能设计,系统划分为基础数据、市场数据、产品报价、交易核心、客户管理、公共组件、批量执行器、分布式序列服务、市场数据服务、单据管理、注册中心、配置中心、批量平台、WEBNET、PRICE、NGINX、MQ子系统。表1为子系统概述。
2.3 网络部署
系统网络部署如图3所示。
2.4 微服务模块
子系统与模块的对应关系如图4所示。
基础微服务是系统的公共部分,由5个部分组成,具体如表2所示。应用微服务即业务子系统,包括XXX-report、XXX-core、XXX-md、XXX-customer。各模块独立部署,互相间通过API进行HTTP服务化调用。每个服务内部由API、common、server三层组成,如表3所示。
2.5 数据库选型
选用MySQL为主数据库,它是一种开源的关系型数据库,广泛应用于Web系统,具有易用、高效、可靠的特点。在大数据时代,MySQL也被应用于各种大规模的数据管理、分析领域,特别是过百万数据量时,其优势尤其突出[4]。采用垂直拆分的策略,市场数据、产品报价、基础数据、客户管理、交易核心、单据管理、批量任务、公共组件八大子系统各自配置单独的数据库实例。这样数据相互独立,互不影响,提高数据读写的性能,降低耦合性。同时采用集群部署、主从复制技术,保证数据库的高可用性。
采用Redis为缓存数据库,它与传统关系数据库组合使用,可以实现更好的查询体验[5]。外汇系统基础数据如参数常量、操作员、岗位、货币对、业务日期、衍生品属性等,访问频繁,但修改更新较少,适合放入缓存中直接读取。这样有效地减少了数据库访问的压力,缩短交易处理耗时。同时Redis采用集群部署方式,提高读写操作的效率,提升了系统性能。
2.6 服务注册中心
采用Nacos平台,它拥有强大的服务注册、发现、配置、管理功能,具有简单易用、高可用、动态配置、服务治理的特点与优势。它基于Raft协议实现节点选举策略的简化算法,提供数据一致性。使用自主研发的Distro协议,保证了高可用性[6]。
应用服务启动时,发送请求包含IP地址、端口等服务信息到Nacos进行注册。注册中心注册成功后会维护一张服务列表,并定时发送心跳包检测服务的状态。若服务不可用,则将健康状态更新为false,服务下线。例如,当Web客户端请求发送到XXX-platform微服务时,服务作为客户端向Nacos发送请求,查询需要调用的另外一个服务的路由信息。注册中心查询服务列表返回应答,同时登记订阅者列表。客户端收到应答,将请求转发到目的服务。目的服务端处理完成业务后,反向路由,最终返回应答至Web客户端。