Summit System Implementation Overview(V6.0 or higher)
上文介紹了Summit系統的整體MVC構架。本文將對Summit系統的實現進行一個概述性的介紹。Summit系統從架構上來講是很優秀的,個人認為其架構師的想法非常好,當然也設計出來了。但在實現的時候就沒那麼美好了,Summit系統的實現比較複雜,比較麻煩,感覺跟架構師的想法有很大出入。如果你做過Summit專案,再深入到細節,你就會感覺到噁心了,因為Summit實現細節真的很爛。但我是站上現在的技術基礎上開了上帝視角看一個存在了30年系統,有點站著說話不腰疼。個人而言,還是比較佩服Summit架構師的,為它的實現感到惋惜。當前,筆者認為Summit系統的架構正在向分散式方向演進,因為它開始大量採用MQ、Web Service這些降低耦合的方式來優化架構了。
筆者今天要介紹的內容,是Summit系統實現的各個模組,以及模組之間的互動方式。本文站在架構師角度描述各個模組之間的關係,不會涉及具體細節,因此,還是可以感受到Summit系統架構的優秀之處:
Summit系統模組
Summit系統執行時模組互動
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 Control Middle Web Service 負責HTTP會話報文與Web Service Soap報文之間的轉換
4 Control Naming Web Service 負責Web Service的註冊、查詢;負責客戶端會話與後臺etkservice程序
之間的註冊、查詢(會話保持)
5 Control Generate ID Web Service 產生全域性唯一ID的Web Service
6 Control MQ 訊息中介軟體(服務之間的鬆耦合)
7 Control etkservice 使用者HTTP請求後臺服務程序
8 Model database 持久化資料庫
9 N/A STP ServiceSummit 系統事件處理服務
10 N/A BVS ServiceBlotter View Server 即實時重新整理服務
11 N/A SequencerSummit 系統事件釋出服務
12 N/A SMTService 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,這是一個WebService服務端程式,啟動程序後,會通過一個埠服務某個使用者會話。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系統執行時,各個模組之間的互動協議以及方式,對於不同的操作,呼叫的模組不同,互動的方式也不同,因此,筆者選取了以下幾個典型場景,來說明互動過程:
登陸過程
操作過程
事件處理過程
2.1 登陸過程

1 系統啟動時,Generate ID需要啟動,啟動時向Naming Service註冊自己
2 使用者登陸點選登陸後,Summit FT向ETK服務發起HTTP請求
3 ETK服務啟動一個etkservice程序來服務此使用者
4 etkservice啟動後,向Naming Service註冊自己(Session ID<-> 埠號)
5 etkservice讀取資料庫中的使用者資訊,驗證密碼及其他資訊(比如是否過期、是否被鎖定)
6 etkservice驗證完成後,將結果以SOAP報文的形式返回給Middle Service
7 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事件
使用者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系統會越來越優秀,效能會逐漸提高、部署更加方便、開發也也更加靈活。