本文将对Summit系统的实现进行一个概述性的介绍。Summit系统从架构上来说是很优秀的,我的认为其架构师的想法很是好,固然也设计出来了。但在实现的时候就没那么美好了,Summit系统的实现比较复杂,比较麻烦,感受跟架构师的想法有很大出入。若是你作过Summit项目,再深刻到细节,你就会感受到恶心了,由于Summit实现细节真的很烂。但我是站上如今的技术基础上开了上帝视角看一个存在了30年系统,有点站着说话不腰疼。我的而言,仍是比较佩服Summit架构师的,为它的实现感到可惜。当前,笔者认为Summit系统的架构正在向分布式方向演进,由于它开始大量采用MQ、Web Service这些下降耦合的方式来优化架构了。数据库
笔者今天要介绍的内容,是Summit系统实现的各个模块,以及模块之间的交互方式。本文站在架构师角度描述各个模块之间的关系,不会涉及具体细节,所以,仍是能够感觉到Summit系统架构的优秀之处:后端
Summit系统按照MVC来划分的话,能够分红View层即客户端/表单;Control层包含负责通信的Web Service、负责业务逻辑的动态库/程序;Model层包含数据抽象层及持久化层。session
Summit系统通过多年的架构优化,在V6.0及以后的版本中,将以前版本采用的CORBA模块替换成Web Service(aixs2实现)。这是Summit系统向分布式架构演进的体现之一。架构
进一步划分的话,能够分红如下模块:分布式
序号工具 |
分层性能 |
模块优化 |
说明设计 |
13d |
View |
Summit FT |
Summit系统客户端 |
2 |
Control |
ETK Web Service |
建立、销毁会话(HTTP会话) |
3 |
Middle Web Service |
负责HTTP会话报文与Web Service Soap报文之间的转换 |
|
4 |
Naming Web Service |
负责Web Service的注册、查找;负责客户端会话与后台etkservice进程之间的注册、查找(会话保持) |
|
5 |
Generate ID Web Service |
产生全局惟一ID的Web Service |
|
6 |
MQ |
消息中间件(服务之间的松耦合) |
|
7 |
etkservice |
用户HTTP请求后台服务进程 |
|
8 |
Model |
database |
持久化数据库 |
9 |
N/A |
STP Service |
Summit系统事件处理服务 |
10 |
N/A |
BVS Service |
Blotter View Server,即实时刷新服务 |
1 |
N/A |
Sequencer |
Summit系统事件发布服务 |
12 |
N/A |
SMT |
Service Management Tool,即STP/BVS服务管理工具 |
前文提到,Summit系统先后端通信协议是HTTP。首先,HTTP协议是无状态的,所以Summit系统须要提供一套相似于Web Server的会话服务。这个就是Summit Naming Service的做用。Summit Naming Service提供服务的注册和查询功能,Summit利用此服务来提供会话服务;其次,Summit后端功能都是用C/C++开发的,如何利用后端的C/C++提供HTTP服务呢?Summit采用的是Web Service的方式。Summit后端提供了etkservice,这是一个Web Service服务端程序,启动进程后,会经过一个端口服务某个用户会话。Summit会为每一个客户端链接启动一个etkservice进程来提供服务,利用Middle Web Service将HTTP请求内容转换成SOAP(Web Service)请求并转发给相应的etkservice进程。etkservice进程处理完成后,结果经过SOAP报文能加给Middle Web Service,进而转换成HTTP报文返回给客户端。不只如此,Middle Web Service负责全部前、后端交互的HTTP报文 <-> SOAP报文之间的转换工做。
Summit系统不只提供了用户操做的基石,同时提供工做流和数据的生命周期管理的功能。这些功能是由STP服务来完成,STP服务即事件处理服务。STP服务会订阅系统事件,每当Sequencer发布系统事件时,订阅了相应事件的STP服务即会工做,完成自动化的处理任务。常见的STP服务如现金流产生服务、支付报文产生服务、额度计算服务、头寸计算服务、合规检查服务等。
Summit系统将Generate ID独立出来做为一个Web Service也是其架构向分布式演进的体现。Generate ID服务用来生成全局惟一的ID。Summit会为其保存或管理的数据分配一个全局惟一的ID,其内部包括事件生成、分发、存/取,都是以此ID做为标识,这些ID所有由Generate ID来生成。所以,Generate ID会向Naming Service注册本身,而且全部Generate ID服务注册名是同样的,以此来保证只有一个实例提供服务。
MQ做为消息中间件来处理STP订阅、BVS消息发布和Sequencer的事件发布。当前,Summit通常采用Active MQ实现。当STP服务启动时,会首先在ActiveMQ对应的队列订阅相应的事件;Sequencer服务检索到事件发生时,会向MQ发布事件。MQ将事件广播到对应队列,供相关的STP服务处理。BVS服务启动后,会监听BVS请求队列,当Summit FT中,用户打开Blotter view时,会发送一个BVS请求。BVS服务根据订阅数据筛选条件,将筛选的数据不断推向BVS响应队列。
最后,Summit系统提供了一个用来管理全部的STP服务及Sequencer服务。STP因为是监听器的角色,所以其是长时间运行的,这就须要提供一个管理工具,来监控各个STP服务的。Service Management Tool(SMT)就是这样一个管理工具。提供了基本的服务启动、中止、新建、删除的功能。
上文静态地介绍了Summit系统的各个模块,接下来,笔者将会介绍在Summit系统运行时,各个模块之间的交互协议以及方式,对于不一样的操做,调用的模块不一样,交互的方式也不一样,所以,笔者选取了如下几个典型场景,来讲明交互过程:
操做过程是指用户登录成功后,在Summit FT客户端进行相关的操做,好比点击按钮、订阅实时消息操做。此时的交互方式与登录有所差异。
笔者将Summit系统的事件分红2个大类,第一类由Sequencer服务产生,产生后推向MQ队列并由STP服务来处理;第二类由用户产生自Summit FT,好比打开了Blotter View来订阅实时数据,此类事件由BVS服务处理。所以,笔者将分红2个部分来讲明Summit的事件处理过程。注:为使交互图清晰,省略了前文提到的部分步骤及相关服务。
Sequencer事件使用黑底白色表示:
Summit系统架构在不断地演进,从6.0开始大量引入分布式的架构和组件,好比使用MQ去除服务耦合;将服务作成WebService;引入Naming Service等。相信随着架构演进,Summit系统会愈来愈优秀,性能会逐渐提升、部署更加方便、开发也也更加灵活。