北京首都國際機場股份有限公司 潘振杰
以民航業(yè)務(wù)為導(dǎo)向的中間件構(gòu)架分析
北京首都國際機場股份有限公司 潘振杰
民航業(yè)務(wù)本身的業(yè)務(wù)功能異常復(fù)雜,實時并發(fā)請求多,數(shù)據(jù)傳輸量大,而且從保障航空器安全的角度,要求數(shù)據(jù)具備較高的可靠性。本文以民航業(yè)務(wù)為導(dǎo)向,在其服務(wù)信息系統(tǒng)中引入了分階段事件驅(qū)動架構(gòu)(SEDA),對其中間件架構(gòu)的設(shè)計實現(xiàn)進行了分析,希望能夠進一步提升系統(tǒng)的處理能力。
民航業(yè)務(wù);服務(wù)器;中間件;構(gòu)架設(shè)計
最近幾年,我國的民用航空事業(yè)得到了飛速發(fā)展,民航業(yè)務(wù)的發(fā)展受到了信息化水平的影響。在傳統(tǒng)的處理模式中,主要是對服務(wù)進同步調(diào)用,在發(fā)出相關(guān)請求后,需要一直等待結(jié)果從服務(wù)端返回,這樣的邏輯雖然更加直觀而且便于實現(xiàn),但是在面對請求數(shù)量龐大的民航業(yè)務(wù)時,往往容易引發(fā)網(wǎng)絡(luò)阻塞問題,影響信息的可靠傳輸。針對這個問題,應(yīng)該在分布式計算環(huán)境下,做好交易中間件系統(tǒng)的設(shè)計,為服務(wù)調(diào)用提供相應(yīng)的平臺。
SEDA的全稱是staged event-driven architecture,屬于一種事件驅(qū)動的服務(wù)器軟件架構(gòu),或者說高性能的應(yīng)用服務(wù)器模型,其本身融合了事件驅(qū)動模型以及線程池模型的優(yōu)點,能夠在實現(xiàn)并行處理的同時,規(guī)避線程切換導(dǎo)致的高成本,也可以依照業(yè)務(wù)邏輯,對服務(wù)進行階段劃分,然后結(jié)合事件隊列,將服務(wù)階段整合進業(yè)務(wù)處理流程中,在異步調(diào)用方面有著先天性的優(yōu)勢,而且架構(gòu)可以根據(jù)業(yè)務(wù)邏輯的要求靈活變化,通用性較強。
SEDA模型會將處理過程分解成為若干個階段,每一個階段都包含有事件處理器、線程池、資源控制器以及事件隊列,這些階段可以依照事件隊列連接在一起。在接收到請求后,模型會將請求放入到第一個階段的事件隊列中,進行相應(yīng)的處理,然后根據(jù)實際情況,將處理好的請求傳輸?shù)较乱粋€階段,繼續(xù)處理。在服務(wù)器中,單一的網(wǎng)絡(luò)求情一般以有窮狀態(tài)機的形式表示,換言之,服務(wù)器軟件的實現(xiàn)過程就是利用相關(guān)程序,構(gòu)建有窮狀態(tài)機的過程。SEDA可以通過對有窮狀態(tài)機的分析,進行狀態(tài)網(wǎng)劃分,使得相關(guān)程度較高的狀態(tài)能夠處于相同的階段,然后結(jié)合事件隊列進行連接,形成完整的并發(fā)處理網(wǎng)絡(luò)。在每一個階段中,時間處理器可以依照負載量的大小,針對資源進行調(diào)整,從而實現(xiàn)資源的優(yōu)化配置[1]。
2.1 總體架構(gòu)
交易中間件系統(tǒng)(JCF)是民航旅客服務(wù)信息系統(tǒng)的一個重要組成部分,從民航業(yè)務(wù)本身的特點考慮,必須支持軟件的復(fù)用以及高并發(fā)、高負載的數(shù)據(jù)傳輸需求,具備良好的適用性和靈活性。JCF系統(tǒng)的運行環(huán)境是分布式系統(tǒng),需要面對的操作平臺和硬件系統(tǒng)等存在著較大的差別,因此,為了保證交易處理的有效實現(xiàn),JCF系統(tǒng)允許用戶利用相關(guān)技術(shù),對業(yè)務(wù)服務(wù)進行自主創(chuàng)建和部署。系統(tǒng)本身必須提供有效的方案,實現(xiàn)與現(xiàn)有企業(yè)服務(wù)總線的可靠對接,對異步調(diào)用、故障隔離以及負載均衡等問題進行解決。例如,TSI系統(tǒng)可以提供多樣化的接入點,實現(xiàn)信息的高效傳輸。通過接入點,JCF系統(tǒng)能夠完成與TSI的交互,而這個接入點為一組或者多組MQ隊列(分上行下行),JCF系統(tǒng)向TSI發(fā)送的信息存儲在上行隊列,TSI向JCF系統(tǒng)發(fā)送的信息則存儲在下行隊列,通過TSI適配服務(wù),對兩者之間的信息通信問題進行解決。JCF與TSI的交互如圖1所示。
JCF系統(tǒng)本身包含了開發(fā)工具、管理工具以及運行系統(tǒng)三個部分的內(nèi)容,可以為民航業(yè)務(wù)服務(wù)的開發(fā)、運行、部署等提供可靠支持。其中,運行系統(tǒng)可以細分為兩個層次,一是服務(wù)層,用戶可以利用Java語言,進行業(yè)務(wù)邏輯的自主創(chuàng)建,然后結(jié)合系統(tǒng)提供的流程配置工具,對核心邏輯進行編排,形成能夠獨立運行的業(yè)務(wù)服務(wù)。SEDA為系統(tǒng)架構(gòu),將每一個服務(wù)判斷為一個階段,包含有相應(yīng)的資源控制器,可以實現(xiàn)對于系統(tǒng)資源的優(yōu)化配置[2];二是調(diào)用層,屬于分布式服務(wù)調(diào)用平臺,可以支持不同服務(wù)之間的相互調(diào)用,如負載均衡、異步調(diào)用、故障隔離等。在JCF系統(tǒng)中,以MES模式實現(xiàn)異步調(diào)用功能,通過服務(wù)注冊和發(fā)現(xiàn)機制,還可以實現(xiàn)異步調(diào)用的自動轉(zhuǎn)換,簡化了用戶的操作行為,在使用方面更加便捷。
圖1 JCF系統(tǒng)與TSI的交互
2.2 SEDA架構(gòu)
對應(yīng)JCF運行系統(tǒng)的兩個層次,SEDA架構(gòu)同樣需要進行分層,一是用戶層,主要是對用戶的業(yè)務(wù)流程進行劃分,形成數(shù)個階段,以事件隊列連接,逐階段對業(yè)務(wù)需求進處理,階段之間的傳遞過程由系統(tǒng)自主完成,用戶只需要進行業(yè)務(wù)邏輯的編寫以及階段關(guān)系的安排,然后將其部署到JCF系統(tǒng)中,就可以實現(xiàn)自動運行。二是系統(tǒng)層,可以依照系統(tǒng)的功能模塊,進行階段劃分,因此相比較用戶層更加固定,能夠為相關(guān)程序的運行提供各種基礎(chǔ)服務(wù)[3]。出現(xiàn)請求后,其會自動進入到請求隊列,服務(wù)平臺完成對請求的接收,然后將其作為事件,傳遞給入口處理階段,結(jié)合相應(yīng)的業(yè)務(wù)處理回調(diào)過程,進行事件的處理,之后將其傳遞給流程運行實例,如果遭遇其他服務(wù)的異步調(diào)用,則會將其事件傳遞給服務(wù)調(diào)用階段,進行SEDA異步調(diào)用處理。通過不同階段的分工協(xié)作,實現(xiàn)對SEDA模式的可靠支撐,在保證邏輯層次清晰的同時,也能夠促進系統(tǒng)運行效率的提高。
2.3 服務(wù)運行流程
假設(shè)在JCF系統(tǒng)中,存在一個正在運行的服務(wù),其運行流程如下:
(1)API服務(wù)平臺從請求隊列中,接收相關(guān)服務(wù)的調(diào)用請求信息,并且由信息出發(fā)服務(wù)入口階段的業(yè)務(wù)回調(diào)過程,由該過程將請求傳遞到流程實例處理環(huán)節(jié),依照預(yù)先設(shè)定好的配置,開展流程處理工作。
(2)若業(yè)務(wù)流程配備有對于JCF服務(wù)的異步調(diào)用,則運行到相關(guān)階段時,會直接觸發(fā)異步模式的服務(wù)調(diào)用功能。
(3)服務(wù)調(diào)用能夠結(jié)合異步調(diào)用功能,對交易ID進行分配,依照該交易ID,對當前執(zhí)行的流程進行運行狀態(tài)壓棧,并向服務(wù)平臺發(fā)起異步調(diào)用請求,請求進入到JCFServer發(fā)送隊列。
(4)服務(wù)平臺在接收到JCFServer發(fā)送隊列的異步應(yīng)答后,自動觸發(fā)異步回調(diào)。
(5)依照交易ID,對壓棧前的流程運行狀態(tài)進行分析,從緩沖區(qū)清除,流程運行實例結(jié)合相應(yīng)的運行狀態(tài)恢復(fù)現(xiàn)場,做好后異步回調(diào)過程的后續(xù)處理。
在API中,還設(shè)置有相應(yīng)的定時功能,例如,如果某一個交易在固定時間內(nèi)沒有獲得應(yīng)答信息,API會從緩沖區(qū)中刪除該交易ID的流程運行狀態(tài),同時提示超時錯誤,若異步相應(yīng)消息沒有進行運行狀態(tài)的記錄,則該交易會被拋棄,需要重新發(fā)送請求[4]。
面對復(fù)雜的民航業(yè)務(wù),本文針對交易中間件系統(tǒng)進行了設(shè)計,提出了基于SEDA模型的服務(wù)器架構(gòu),利用兩層SEDA結(jié)構(gòu),能夠支撐用戶層面的服務(wù)分階段特性,對系統(tǒng)開發(fā)環(huán)節(jié)存在著的線程同步阻塞問題進行了有效解決,真正實現(xiàn)了平臺服務(wù)的異步化。同時,服務(wù)器架構(gòu)本身的分階段特性可以從容應(yīng)對高并發(fā)高負載環(huán)境下的民航業(yè)務(wù)處理問題,不僅處理的效率有了很大的提升,也能夠?qū)崿F(xiàn)軟件的復(fù)用,滿足了系統(tǒng)對于開放性和靈活性的需求。
[1]丁建立,倪兆陽,田豐,王靜.面向復(fù)雜民航業(yè)務(wù)的中間件架構(gòu)設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2016,37(5):1367-1374.
[2]李永進,倪兆陽,田豐.面向高并發(fā)復(fù)雜民航業(yè)務(wù)的服務(wù)器架構(gòu)設(shè)計[J].計算機應(yīng)用與軟件,2016,33(5):4-7.
[3]李文慧.基于MapReduce的無線傳感網(wǎng)絡(luò)中間件架構(gòu)技術(shù)研究[D].上海海洋大學(xué).
[4]周超,李冬,張寶賢,馮玉珉.一種面向無線傳感網(wǎng)節(jié)點的中間件架構(gòu)設(shè)計與實現(xiàn)[J].鐵道學(xué)報,2014,(8):63-69.