Summit System Implementation Overview(V6.0 or higher)

        本文将对Summit系统的实现进行一个概述性的介绍。Summit系统从架构上来讲是很优秀的,个人认为其架构师的想法非常好,当然也设计出来了。但在实现的时候就没那么美好了,Summit系统的实现比较复杂,比较麻烦,感觉跟架构师的想法有很大出入。如果你做过Summit项目,再深入到细节,你就会感觉到恶心了,因为Summit实现细节真的很烂。但我是站上现在的技术基础上开了上帝视角看一个存在了30年系统,有点站着说话不腰疼。个人而言,还是比较佩服Summit架构师的,为它的实现感到惋惜。当前,笔者认为Summit系统的架构正在向分布式方向演进,因为它开始大量采用MQ、Web Service这些降低耦合的方式来优化架构了。

        笔者今天要介绍的内容,是Summit系统实现的各个模块,以及模块之间的交互方式。本文站在架构师角度描述各个模块之间的关系,不会涉及具体细节,因此,还是可以感受到Summit系统架构的优秀之处:

  1. Summit系统模块
  2. Summit系统运行时模块交互

1 Summit系统模块

        Summit系统按照MVC来划分的话,可以分成View层即客户端/表单;Control层包含负责通讯的Web Service、负责业务逻辑的动态库/程序;Model层包含数据抽象层及持久化层。

        Summit系统经过多年的架构优化,在V6.0及之后的版本中,将之前版本采用的CORBA模块替换成Web Service(aixs2实现)。这是Summit系统向分布式架构演进的体现之一。

进一步划分的话,可以分成以下模块:

序号

分层

模块

说明

1

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)就是这样一个管理工具。提供了基本的服务启动、停止、新建、删除的功能。

2 Summit系统模块交互

        上文静态地介绍了Summit系统的各个模块,接下来,笔者将会介绍在Summit系统运行时,各个模块之间的交互协议以及方式,对于不同的操作,调用的模块不同,交互的方式也不同,因此,笔者选取了以下几个典型场景,来说明交互过程:

  1. 登陆过程
  2. 操作过程
  3. ü 事件处理过程

2.1 登陆过程

   0. 系统启动时,Generate ID需要启动,启动时向Naming Service注册自己
  1. 用户登陆点击登陆后,Summit FT向ETK服务发起HTTP请求
  2. ETK服务启动一个etkservice进程来服务此用户
  3. etkservice启动后,向Naming Service注册自己(Session ID <-> 端口号)
  4. etkservice读取数据库中的用户信息,验证密码及其他信息(比如是否过期、是否被锁定)
  5. etkservice验证完成后,将结果以SOAP报文的形式返回给Middle Service
  6. Middle Service将SOAP报文转换成HTTP报文并返回给Summit FT

2.2 操作过程

        操作过程是指用户登陆成功后,在Summit FT客户端进行相关的操作,比如点击按钮、订阅实时消息操作。此时的交互方式与登陆有所差别。


  1. Summit FT发送HTTP请求至Middle Service(带有Session标识)
  2. Middle service向Naming Service发起Web Service查询此请求对应的etkservice端口(使用Session ID),查询成功后,以SOAP报文形式返回
  3. Middle service查询到session对应的etkservice后,向etkservice发起Web Service请求
  4. etkservice响应请求,与数据库交互,如果需要生成新的ID,则会向Generate ID发起Web Service请求生成ID。Generate ID生成ID后,以SOAP形式返回给etkservice。
  5. etkservice处理完成后,将结果以SOAP报文形式返回给Middle Service
  6. Middle Service将SOAP报文转换成HTTP报文并返回给Summit FT

2.3 事件处理过程


        笔者将Summit系统的事件分成2个大类,第一类由Sequencer服务产生,产生后推向MQ队列并由STP服务来处理;第二类由用户产生自Summit FT,比如打开了Blotter View来订阅实时数据,此类事件由BVS服务处理。因此,笔者将分成2个部分来说明Summit的事件处理过程。注:为使交互图清晰,省略了前文提到的部分步骤及相关服务。

2.3.1 Sequencer事件

Sequencer事件使用黑底白色表示:

  1. STP服务启动时,会向MQ订阅相关事件
  2. Sequencer检索数据库,查询每个STP服务处理的进度,并检索出未处理事件
  3. Sequencer将未处理事件发布到MQ
  4. MQ收到事件后,将事件推送给相关的订阅者,即STP服务
  5. STP服务处理事件,过程中很有可能生成新的数据,因此需要使用Generate ID服务
  6. STP服务处理事件,过程中很有可能进行数据库的读取和保存。处理完成后,更新对应STP服务的Sequencer,以防止重复处理事件

2.3.2 用户BVS事件

  1. 用户在Summit FT打开Blotter View,Summit FT发送HTTP请求至Middle Service
  2. Middle Service收到请求后,通过Naming Service(见2.2)找到对应的etkservice,并将HTTP报文转换成SOAP报文发送过去
  3. etkservice向对应的BVS请求队列中发送“实时数据订阅”请求;
  4. BVS服务从请求队列中获取“实时数据订阅”请求,
  5. BVS服务按照请求的筛选条件,从数据库中加载相关数据
  6. BVS服务将检索出的数据推送到返回队列
  7. etkservice从返回队列中获取BVS检索到的数据
  8. etkservice将检索到的数据转换成SOAP报文,返回给Middle Service
  9. Middle Service将SOAP报文转换成HTTP报文,返回给Summit FT

3 结论

        Summit系统架构在不断地演进,从6.0开始大量引入分布式的架构和组件,比如使用MQ去除服务耦合;将服务做成WebService;引入Naming Service等。相信随着架构演进,Summit系统会越来越优秀,性能会逐渐提高、部署更加方便、开发也也更加灵活。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值