北京首都國際機場股份有限公司 潘振杰
以民航業務為導向的中間件構架分析
北京首都國際機場股份有限公司 潘振杰
民航業務本身的業務功能異常復雜,實時并發請求多,數據傳輸量大,而且從保障航空器安全的角度,要求數據具備較高的可靠性。本文以民航業務為導向,在其服務信息系統中引入了分階段事件驅動架構(SEDA),對其中間件架構的設計實現進行了分析,希望能夠進一步提升系統的處理能力。
民航業務;服務器;中間件;構架設計
最近幾年,我國的民用航空事業得到了飛速發展,民航業務的發展受到了信息化水平的影響。在傳統的處理模式中,主要是對服務進同步調用,在發出相關請求后,需要一直等待結果從服務端返回,這樣的邏輯雖然更加直觀而且便于實現,但是在面對請求數量龐大的民航業務時,往往容易引發網絡阻塞問題,影響信息的可靠傳輸。針對這個問題,應該在分布式計算環境下,做好交易中間件系統的設計,為服務調用提供相應的平臺。
SEDA的全稱是staged event-driven architecture,屬于一種事件驅動的服務器軟件架構,或者說高性能的應用服務器模型,其本身融合了事件驅動模型以及線程池模型的優點,能夠在實現并行處理的同時,規避線程切換導致的高成本,也可以依照業務邏輯,對服務進行階段劃分,然后結合事件隊列,將服務階段整合進業務處理流程中,在異步調用方面有著先天性的優勢,而且架構可以根據業務邏輯的要求靈活變化,通用性較強。
SEDA模型會將處理過程分解成為若干個階段,每一個階段都包含有事件處理器、線程池、資源控制器以及事件隊列,這些階段可以依照事件隊列連接在一起。在接收到請求后,模型會將請求放入到第一個階段的事件隊列中,進行相應的處理,然后根據實際情況,將處理好的請求傳輸到下一個階段,繼續處理。在服務器中,單一的網絡求情一般以有窮狀態機的形式表示,換言之,服務器軟件的實現過程就是利用相關程序,構建有窮狀態機的過程。SEDA可以通過對有窮狀態機的分析,進行狀態網劃分,使得相關程度較高的狀態能夠處于相同的階段,然后結合事件隊列進行連接,形成完整的并發處理網絡。在每一個階段中,時間處理器可以依照負載量的大小,針對資源進行調整,從而實現資源的優化配置[1]。
2.1 總體架構
交易中間件系統(JCF)是民航旅客服務信息系統的一個重要組成部分,從民航業務本身的特點考慮,必須支持軟件的復用以及高并發、高負載的數據傳輸需求,具備良好的適用性和靈活性。JCF系統的運行環境是分布式系統,需要面對的操作平臺和硬件系統等存在著較大的差別,因此,為了保證交易處理的有效實現,JCF系統允許用戶利用相關技術,對業務服務進行自主創建和部署。系統本身必須提供有效的方案,實現與現有企業服務總線的可靠對接,對異步調用、故障隔離以及負載均衡等問題進行解決。例如,TSI系統可以提供多樣化的接入點,實現信息的高效傳輸。通過接入點,JCF系統能夠完成與TSI的交互,而這個接入點為一組或者多組MQ隊列(分上行下行),JCF系統向TSI發送的信息存儲在上行隊列,TSI向JCF系統發送的信息則存儲在下行隊列,通過TSI適配服務,對兩者之間的信息通信問題進行解決。JCF與TSI的交互如圖1所示。
JCF系統本身包含了開發工具、管理工具以及運行系統三個部分的內容,可以為民航業務服務的開發、運行、部署等提供可靠支持。其中,運行系統可以細分為兩個層次,一是服務層,用戶可以利用Java語言,進行業務邏輯的自主創建,然后結合系統提供的流程配置工具,對核心邏輯進行編排,形成能夠獨立運行的業務服務。SEDA為系統架構,將每一個服務判斷為一個階段,包含有相應的資源控制器,可以實現對于系統資源的優化配置[2];二是調用層,屬于分布式服務調用平臺,可以支持不同服務之間的相互調用,如負載均衡、異步調用、故障隔離等。在JCF系統中,以MES模式實現異步調用功能,通過服務注冊和發現機制,還可以實現異步調用的自動轉換,簡化了用戶的操作行為,在使用方面更加便捷。

圖1 JCF系統與TSI的交互
2.2 SEDA架構
對應JCF運行系統的兩個層次,SEDA架構同樣需要進行分層,一是用戶層,主要是對用戶的業務流程進行劃分,形成數個階段,以事件隊列連接,逐階段對業務需求進處理,階段之間的傳遞過程由系統自主完成,用戶只需要進行業務邏輯的編寫以及階段關系的安排,然后將其部署到JCF系統中,就可以實現自動運行。二是系統層,可以依照系統的功能模塊,進行階段劃分,因此相比較用戶層更加固定,能夠為相關程序的運行提供各種基礎服務[3]。出現請求后,其會自動進入到請求隊列,服務平臺完成對請求的接收,然后將其作為事件,傳遞給入口處理階段,結合相應的業務處理回調過程,進行事件的處理,之后將其傳遞給流程運行實例,如果遭遇其他服務的異步調用,則會將其事件傳遞給服務調用階段,進行SEDA異步調用處理。通過不同階段的分工協作,實現對SEDA模式的可靠支撐,在保證邏輯層次清晰的同時,也能夠促進系統運行效率的提高。
2.3 服務運行流程
假設在JCF系統中,存在一個正在運行的服務,其運行流程如下:
(1)API服務平臺從請求隊列中,接收相關服務的調用請求信息,并且由信息出發服務入口階段的業務回調過程,由該過程將請求傳遞到流程實例處理環節,依照預先設定好的配置,開展流程處理工作。
(2)若業務流程配備有對于JCF服務的異步調用,則運行到相關階段時,會直接觸發異步模式的服務調用功能。
(3)服務調用能夠結合異步調用功能,對交易ID進行分配,依照該交易ID,對當前執行的流程進行運行狀態壓棧,并向服務平臺發起異步調用請求,請求進入到JCFServer發送隊列。
(4)服務平臺在接收到JCFServer發送隊列的異步應答后,自動觸發異步回調。
(5)依照交易ID,對壓棧前的流程運行狀態進行分析,從緩沖區清除,流程運行實例結合相應的運行狀態恢復現場,做好后異步回調過程的后續處理。
在API中,還設置有相應的定時功能,例如,如果某一個交易在固定時間內沒有獲得應答信息,API會從緩沖區中刪除該交易ID的流程運行狀態,同時提示超時錯誤,若異步相應消息沒有進行運行狀態的記錄,則該交易會被拋棄,需要重新發送請求[4]。
面對復雜的民航業務,本文針對交易中間件系統進行了設計,提出了基于SEDA模型的服務器架構,利用兩層SEDA結構,能夠支撐用戶層面的服務分階段特性,對系統開發環節存在著的線程同步阻塞問題進行了有效解決,真正實現了平臺服務的異步化。同時,服務器架構本身的分階段特性可以從容應對高并發高負載環境下的民航業務處理問題,不僅處理的效率有了很大的提升,也能夠實現軟件的復用,滿足了系統對于開放性和靈活性的需求。
[1]丁建立,倪兆陽,田豐,王靜.面向復雜民航業務的中間件架構設計與實現[J].計算機工程與設計,2016,37(5):1367-1374.
[2]李永進,倪兆陽,田豐.面向高并發復雜民航業務的服務器架構設計[J].計算機應用與軟件,2016,33(5):4-7.
[3]李文慧.基于MapReduce的無線傳感網絡中間件架構技術研究[D].上海海洋大學.
[4]周超,李冬,張寶賢,馮玉珉.一種面向無線傳感網節點的中間件架構設計與實現[J].鐵道學報,2014,(8):63-69.