Summit System Implementation Overview(V6.0 or higher)

? ? ? ? 上文介紹了Summit系統(tǒng)的整體MVC構架。本文將對Summit系統(tǒng)的實現(xiàn)進行一個概述性的介紹。Summit系統(tǒng)從架構上來講是很優(yōu)秀的,個人認為其架構師的想法非常好,當然也設計出來了。但在實現(xiàn)的時候就沒那么美好了,Summit系統(tǒng)的實現(xiàn)比較復雜,比較麻煩,感覺跟架構師的想法有很大出入。如果你做過Summit項目,再深入到細節(jié),你就會感覺到惡心了,因為Summit實現(xiàn)細節(jié)真的很爛。但我是站上現(xiàn)在的技術基礎上開了上帝視角看一個存在了30年系統(tǒng),有點站著說話不腰疼。個人而言,還是比較佩服Summit架構師的,為它的實現(xiàn)感到惋惜。當前,筆者認為Summit系統(tǒng)的架構正在向分布式方向演進,因為它開始大量采用MQ、Web Service這些降低耦合的方式來優(yōu)化架構了。

? ? ? ? 筆者今天要介紹的內(nèi)容,是Summit系統(tǒng)實現(xiàn)的各個模塊,以及模塊之間的交互方式。本文站在架構師角度描述各個模塊之間的關系,不會涉及具體細節(jié),因此,還是可以感受到Summit系統(tǒng)架構的優(yōu)秀之處:

Summit系統(tǒng)模塊

Summit系統(tǒng)運行時模塊交互

Summit系統(tǒng)模塊

? ? ? ? Summit系統(tǒng)按照MVC來劃分的話,可以分成View層即客戶端/表單;Control層包含負責通訊的Web Service、負責業(yè)務邏輯的動態(tài)庫/程序;Model層包含數(shù)據(jù)抽象層及持久化層。

Summit系統(tǒng)經(jīng)過多年的架構優(yōu)化,在V6.0及之后的版本中,將之前版本采用的CORBA模塊替換成Web

Service(aixs2實現(xiàn))。這是Summit系統(tǒng)向分布式架構演進的體現(xiàn)之一。

進一步劃分的話,可以分成以下模塊:

序號? ?分層? ? ? ? ?模塊? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?說明

1? ? ? ??View? ? Summit FT? ? ? ? ? ? ? ? ? ? ? ? ? Summit系統(tǒng)客戶端

2? ? ? ?Control? ETK Web Service? ? ? ? ? ? ? 創(chuàng)建、銷毀會話(HTTP會話)

3? ? ? ?Control??Middle Web Service? ? ? ? ? 負責HTTP會話報文與Web Service Soap報文之間的轉換

4? ? ? ?Control??Naming Web Service? ? ? ? ?負責Web Service的注冊、查找;負責客戶端會話與后臺etkservice進程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 之間的注冊、查找(會話保持)

5? ? ? ?Control?Generate ID Web Service? ?產(chǎn)生全局唯一ID的Web Service

6? ? ? ?Control??MQ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?消息中間件(服務之間的松耦合)

7? ? ? ?Control? etkservice? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 用戶HTTP請求后臺服務進程

8? ? ? ?Model? ?database? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 持久化數(shù)據(jù)庫

9? ? ? ?N/A? ? ? ?STP ServiceSummit? ? ? ? ? ? ? 系統(tǒng)事件處理服務

10? ? ?N/A? ? ? ?BVS ServiceBlotter View Server? ?即實時刷新服務

11? ? ?N/A? ? ? ?SequencerSummit? ? ? ? ? ? ? ? 系統(tǒng)事件發(fā)布服務

12? ? ?N/A? ? ? ?SMTService Management Tool? 即STP/BVS服務管理工具

? ? ? ? 前文提到,Summit系統(tǒng)前后端通訊協(xié)議是HTTP。首先,HTTP協(xié)議是無狀態(tài)的,因此Summit系統(tǒng)需要提供一套類似于Web Server的會話服務。這個就是Summit Naming Service的作用。Summit Naming Service提供服務的注冊和查詢功能,Summit利用此服務來提供會話服務;其次,Summit后端功能都是用C/C++開發(fā)的,如何利用后端的C/C++提供HTTP服務呢?Summit采用的是Web Service的方式。Summit后端提供了etkservice,這是一個WebService服務端程序,啟動進程后,會通過一個端口服務某個用戶會話。Summit會為每個客戶端連接啟動一個etkservice進程來提供服務,利用Middle Web Service將HTTP請求內(nèi)容轉換成SOAP(Web Service)請求并轉發(fā)給相應的etkservice進程。etkservice進程處理完成后,結果通過SOAP報文能加給Middle Web Service,進而轉換成HTTP報文返回給客戶端。不僅如此,Middle Web Service負責所有前、后端交互的HTTP報文<-> SOAP報文之間的轉換工作。

? ? ? ? Summit系統(tǒng)不僅提供了用戶操作的基石,同時提供工作流和數(shù)據(jù)的生命周期管理的功能。這些功能是由STP服務來完成,STP服務即事件處理服務。STP服務會訂閱系統(tǒng)事件,每當Sequencer發(fā)布系統(tǒng)事件時,訂閱了相應事件的STP服務即會工作,完成自動化的處理任務。常見的STP服務如現(xiàn)金流產(chǎn)生服務、支付報文產(chǎn)生服務、額度計算服務、頭寸計算服務、合規(guī)檢查服務等。

? ? ? ? Summit系統(tǒng)將Generate ID獨立出來作為一個Web Service也是其架構向分布式演進的體現(xiàn)。Generate ID服務用來生成全局唯一的ID。Summit會為其保存或管理的數(shù)據(jù)分配一個全局唯一的ID,其內(nèi)部包括事件生成、分發(fā)、存/取,都是以此ID作為標識,這些ID全部由Generate ID來生成。因此,Generate ID會向Naming Service注冊自己,并且所有Generate ID服務注冊名是一樣的,以此來保證只有一個實例提供服務。

? ? ? ? MQ作為消息中間件來處理STP訂閱、BVS消息發(fā)布和Sequencer的事件發(fā)布。當前,Summit一般采用Active MQ實現(xiàn)。當STP服務啟動時,會首先在ActiveMQ對應的隊列訂閱相應的事件;Sequencer服務檢索到事件發(fā)生時,會向MQ發(fā)布事件。MQ將事件廣播到對應隊列,供相關的STP服務處理。BVS服務啟動后,會監(jiān)聽BVS請求隊列,當Summit FT中,用戶打開Blotter view時,會發(fā)送一個BVS請求。BVS服務根據(jù)訂閱數(shù)據(jù)篩選條件,將篩選的數(shù)據(jù)不斷推向BVS響應隊列。

? ? ? ? 最后,Summit系統(tǒng)提供了一個用來管理所有的STP服務及Sequencer服務。STP由于是監(jiān)聽器的角色,因此其是長時間運行的,這就需要提供一個管理工具,來監(jiān)控各個STP服務的。Service Management Tool(SMT)就是這樣一個管理工具。提供了基本的服務啟動、停止、新建、刪除的功能。

Summit系統(tǒng)模塊交互

? ? ? ? 上文靜態(tài)地介紹了Summit系統(tǒng)的各個模塊,接下來,筆者將會介紹在Summit系統(tǒng)運行時,各個模塊之間的交互協(xié)議以及方式,對于不同的操作,調(diào)用的模塊不同,交互的方式也不同,因此,筆者選取了以下幾個典型場景,來說明交互過程:

登陸過程

操作過程

事件處理過程

2.1? 登陸過程


1 系統(tǒng)啟動時,Generate ID需要啟動,啟動時向Naming Service注冊自己

2 用戶登陸點擊登陸后,Summit FT向ETK服務發(fā)起HTTP請求

3 ETK服務啟動一個etkservice進程來服務此用戶

4 etkservice啟動后,向Naming Service注冊自己(Session ID<-> 端口號)

5 etkservice讀取數(shù)據(jù)庫中的用戶信息,驗證密碼及其他信息(比如是否過期、是否被鎖定)

6 etkservice驗證完成后,將結果以SOAP報文的形式返回給Middle Service

7 Middle Service將SOAP報文轉換成HTTP報文并返回給Summit FT

2.2 操作過程

操作過程是指用戶登陸成功后,在Summit FT客戶端進行相關的操作,比如點擊按鈕、訂閱實時消息操作。此時的交互方式與登陸有所差別。


1 Summit FT發(fā)送HTTP請求至Middle Service(帶有Session標識)

2 Middle service向Naming Service發(fā)起Web Service查詢此請求對應的etkservice端口(使用Session ID),查詢成功后,以SOAP報文形式返回

3 Middle service查詢到session對應的etkservice后,向etkservice發(fā)起Web Service請求

4 etkservice響應請求,與數(shù)據(jù)庫交互,如果需要生成新的ID,則會向Generate ID發(fā)起Web Service請求生成ID。Generate ID生成ID后,以SOAP形式返回給etkservice。

5 etkservice處理完成后,將結果以SOAP報文形式返回給Middle Service

6 Middle Service將SOAP報文轉換成HTTP報文并返回給Summit FT

2.3 事件處理過程


? ? ? ? 筆者將Summit系統(tǒng)的事件分成2個大類,第一類由Sequencer服務產(chǎn)生,產(chǎn)生后推向MQ隊列并由STP服務來處理;第二類由用戶產(chǎn)生自Summit FT,比如打開了Blotter View來訂閱實時數(shù)據(jù),此類事件由BVS服務處理。因此,筆者將分成2個部分來說明Summit的事件處理過程。注:為使交互圖清晰,省略了前文提到的部分步驟及相關服務。

2.3.1 Sequencer事件

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

1 STP服務啟動時,會向MQ訂閱相關事件

2 Sequencer檢索數(shù)據(jù)庫,查詢每個STP服務處理的進度,并檢索出未處理事件

3 Sequencer將未處理事件發(fā)布到MQ

4 MQ收到事件后,將事件推送給相關的訂閱者,即STP服務

5 STP服務處理事件,過程中很有可能生成新的數(shù)據(jù),因此需要使用Generate ID服務

6 STP服務處理事件,過程中很有可能進行數(shù)據(jù)庫的讀取和保存。處理完成后,更新對應STP服務的Sequencer,以防止重復處理事件

2.3.2 用戶BVS事件

用戶BVS事件使用白底黑字表示:

1 用戶在Summit FT打開Blotter View,Summit FT發(fā)送HTTP請求至Middle Service

2 Middle Service收到請求后,通過Naming Service(見2.2)找到對應的etkservice,并將HTTP報文轉換成SOAP報文發(fā)送過去

3 etkservice向對應的BVS請求隊列中發(fā)送“實時數(shù)據(jù)訂閱”請求;

4 BVS服務從請求隊列中獲取“實時數(shù)據(jù)訂閱”請求,

5 BVS服務按照請求的篩選條件,從數(shù)據(jù)庫中加載相關數(shù)據(jù)

6 BVS服務將檢索出的數(shù)據(jù)推送到返回隊列

7 etkservice從返回隊列中獲取BVS檢索到的數(shù)據(jù)

8 etkservice將檢索到的數(shù)據(jù)轉換成SOAP報文,返回給Middle Service

9 Middle Service將SOAP報文轉換成HTTP報文,返回給Summit FT

3 結論

? ? ? ? Summit系統(tǒng)架構在不斷地演進,從6.0開始大量引入分布式的架構和組件,比如使用MQ去除服務耦合;將服務做成WebService;引入Naming Service等。相信隨著架構演進,Summit系統(tǒng)會越來越優(yōu)秀,性能會逐漸提高、部署更加方便、開發(fā)也也更加靈活。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容