国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向高并發(fā)復(fù)雜民航業(yè)務(wù)的服務(wù)器架構(gòu)設(shè)計

2016-06-08 05:48李永進(jìn)倪兆陽
計算機應(yīng)用與軟件 2016年5期
關(guān)鍵詞:調(diào)用線程處理器

李永進(jìn) 田 豐 倪兆陽

1(中國民航信息網(wǎng)絡(luò)股份有限公司研發(fā)中心 北京 100000)2(中國民航大學(xué)計算機科學(xué)與技術(shù)學(xué)院 天津 300000)

?

面向高并發(fā)復(fù)雜民航業(yè)務(wù)的服務(wù)器架構(gòu)設(shè)計

李永進(jìn)1田豐1倪兆陽2

1(中國民航信息網(wǎng)絡(luò)股份有限公司研發(fā)中心北京 100000)2(中國民航大學(xué)計算機科學(xué)與技術(shù)學(xué)院天津 300000)

摘要針對民航業(yè)務(wù)實時并發(fā)請求多、業(yè)務(wù)功能復(fù)雜多變、數(shù)據(jù)量大、可靠性要求高等業(yè)務(wù)特點,分析當(dāng)前流行的服務(wù)器架構(gòu)的優(yōu)缺點,將服務(wù)劃分階段,在民航旅客服務(wù)信息系統(tǒng)中引入分階段的事件驅(qū)動架構(gòu)SEDA(Staged Event-Driven Architecture),并進(jìn)行實驗對比驗證。實驗結(jié)果表明,基于SEDA的服務(wù)器軟件架構(gòu)比基于線程池模型的服務(wù)器軟件架構(gòu)擁有更好的處理高并發(fā)請求的能力,能夠使大規(guī)模民航旅客服務(wù)信息系統(tǒng)有效應(yīng)對高并發(fā)高負(fù)載環(huán)境。

關(guān)鍵詞SEDA服務(wù)器架構(gòu)中間件民航旅客服務(wù)信息系統(tǒng)異步調(diào)用

0引言

隨著經(jīng)濟(jì)社會的發(fā)展,互聯(lián)網(wǎng)變得觸手可及,網(wǎng)絡(luò)上的流量也增加了許多倍,這對于提供各種服務(wù)的服務(wù)器是一個不小的挑戰(zhàn),未來網(wǎng)絡(luò)服務(wù)器的任務(wù)將更加繁重。雖然隨著時間的推移計算機硬件在不斷發(fā)展,服務(wù)器的性能有了很大提升,但仍然難以滿足大量的并發(fā)訪問對性能的要求。同時,全球各地的用戶經(jīng)常以碎片化、互相近似的形式向服務(wù)器發(fā)出請求, 用戶請求在高峰時段會超過平均值的8到10倍[1],服務(wù)器的處理能力通常不能承受這樣的負(fù)載,以至于其響應(yīng)時間將會大大增加,吞吐量嚴(yán)重降低,更有甚者還會停止服務(wù),提供給用戶的服務(wù)質(zhì)量很難得到保證。

互聯(lián)網(wǎng)及航空業(yè)的不斷發(fā)展使得越來越多的人選擇從互聯(lián)網(wǎng)獲得關(guān)于航班的各種信息。民航業(yè)自身的發(fā)展也要求其信息化程度逐步提高,這意味著越來越多的民航業(yè)務(wù)要由信息系統(tǒng)處理。

民航旅客服務(wù)信息系統(tǒng)對可靠性要求極高,信息系統(tǒng)的運行狀況不僅僅關(guān)系到提供給地面用戶的服務(wù)質(zhì)量,還涉及到空中的交通安全和全國各航空公司的飛行計劃安排,一旦出現(xiàn)差錯將造成大量的旅客滯留和航班延誤,其損失是不可估量的。

民航旅客服務(wù)系統(tǒng)需要面向全國用戶,請求數(shù)量龐大,而且民航業(yè)務(wù)復(fù)雜,一個民航業(yè)務(wù)請求往往需要多個服務(wù)協(xié)同工作才能完成,這對民航旅客服務(wù)信息系統(tǒng)的處理能力提出了極大的挑戰(zhàn)。同時根據(jù)SOA的要求還需要提高民航軟件復(fù)用度,實現(xiàn)業(yè)務(wù)功能靈活定制。

這就要求民航旅客服務(wù)信息系統(tǒng)能夠良好地應(yīng)對高并發(fā)高負(fù)載環(huán)境,通過服務(wù)整合機制實現(xiàn)應(yīng)用間的消息通信,形成面向用戶的實際業(yè)務(wù)功能。提高現(xiàn)有服務(wù)器對高并發(fā)、動態(tài)變化、連續(xù)高可靠性的適應(yīng)能力以及對其他需求的應(yīng)對能力成為當(dāng)前的重要任務(wù)。

除了計算機硬件性能以外,服務(wù)器的軟件架構(gòu)也會對服務(wù)器性能產(chǎn)生重要影響。優(yōu)秀的軟件架構(gòu)能夠充分發(fā)揮出計算機的硬件性能,提高軟件的可重用性,降低軟件開發(fā)和維護(hù)成本,為企業(yè)帶來豐厚的經(jīng)濟(jì)效益。因此有必要設(shè)計一款先進(jìn)的軟件架構(gòu)為企業(yè)的應(yīng)用開發(fā)和服務(wù)復(fù)用提供基礎(chǔ)服務(wù),使民航旅客服務(wù)信息系統(tǒng)支持高并發(fā)高負(fù)載復(fù)雜民航業(yè)務(wù),支持軟件復(fù)用,滿足民航業(yè)務(wù)對系統(tǒng)通用性和靈活性的需求。

1研究現(xiàn)狀

目前的交易處理服務(wù)器軟件架構(gòu)主要基于三種模型。第一種是線程池模型[2],為每個請求分配一個線程;第二種是事件驅(qū)動(Event-Driven)處理模型[3],由一個調(diào)度器控制消息的處理流程;第三種是SEDA模型[1,4],將處理流程劃分成不同的處理階段,階段之間用事件隊列連接。

1.1線程池模型

線程池模型充分體現(xiàn)了操作系統(tǒng)對多線程技術(shù)的支持,通過多線程實現(xiàn)處理器、輸入輸出資源的多路復(fù)用,從而實現(xiàn)高并發(fā)處理,也可以通過重用已經(jīng)創(chuàng)建好的線程來降低新建和銷毀線程的開銷[5]。系統(tǒng)中由一個主線程dispatcher專門負(fù)責(zé)給線程池的其他線程分派任務(wù),如圖1所示。每個線程完成它所處理的任務(wù)的所有業(yè)務(wù)邏輯,如執(zhí)行查詢數(shù)據(jù)庫請求的所有邏輯步驟,然后再等待新的請求。該模型容易實現(xiàn)且應(yīng)用廣泛,其處理邏輯以阻塞方式進(jìn)行工作。在這種模型下,如果大量的線程因為等待某個事件的完成而被阻塞(比如等待磁盤IO、等待其他服務(wù)返回結(jié)果等),就會使其他新到的請求得不到及時處理。

圖1 線程池模型

1.2事件驅(qū)動處理模型

事件驅(qū)動處理模型將請求表示成一個有限狀態(tài)機FSM(Finite State Machine),根據(jù)請求的當(dāng)前狀態(tài)進(jìn)行相應(yīng)的處理。系統(tǒng)中有一個調(diào)度器scheduler專門給對應(yīng)的FSM分配事件,每個狀態(tài)機對應(yīng)邏輯處理流程中的一個狀態(tài),通過事件來觸發(fā)狀態(tài)機之間的切換,如圖2所示。在設(shè)計實現(xiàn)中,首先要從處理流程中將事件的各種狀態(tài)抽象出來(如輸入輸出完成、線程準(zhǔn)備就緒等狀態(tài)),構(gòu)成一系列FSM,然后實現(xiàn)scheduler和各個事件處理邏輯[6]。

圖2 事件驅(qū)動模型

這種模型克服了線程池模型在高并發(fā)高負(fù)載環(huán)境下的不足,由一組線程循環(huán)處理相應(yīng)狀態(tài)的請求,處理完以后該線程又被放回到線程池中等待下一個處于相同狀態(tài)的請求。該模型的關(guān)鍵是設(shè)計一個高效公平的事件調(diào)度器,其中請求的優(yōu)先級,事件的優(yōu)先級,請求的資源消耗等都與具體的應(yīng)用相關(guān),不同的應(yīng)用需要不同的實現(xiàn)[7]。

1.3分階段的事件驅(qū)動架構(gòu)模型

SEDA模型將模塊化思想運用到了事件驅(qū)動體系結(jié)構(gòu)中。該架構(gòu)將事件驅(qū)動的處理流程分解成一系列的階段,每個階段完成一個獨立的功能。這些階段由事件隊列(Event Queue)連接起來并通過事件進(jìn)行通信,階段之間不共享數(shù)據(jù)。每個階段有自己的線程池(Thread Pool)、事件處理器(Event Handler)、事件隊列和資源控制器(Controllers),并且可以在運行時通過資源控制器配置本階段的資源[8]。當(dāng)請求到來時,系統(tǒng)依據(jù)請求內(nèi)容將其封裝成事件發(fā)送到相應(yīng)階段的事件隊列,該階段的工作線程按照控制器的控制策略從隊列中取出事件,調(diào)用事件處理器對事件進(jìn)行處理,處理完成后將結(jié)果封裝成事件按照請求的需要移交給下一個階段,直到完成整個請求的處理流程,如圖3所示。

圖3 分階段的事件驅(qū)動模型

這種設(shè)計將邏輯應(yīng)用核心從線程管理和調(diào)度中分離出來,為開發(fā)者提供了統(tǒng)一的資源管理模型以降低應(yīng)用程序設(shè)計的復(fù)雜度,使開發(fā)人員不用關(guān)心復(fù)雜的服務(wù)器資源控制。因為每個階段有獨立的運行參數(shù),從而使得系統(tǒng)瓶頸很容易被定位[9]。目前多將該模型用于研究如何在極端負(fù)載情況下提升服務(wù)器性能。

在高負(fù)載的互聯(lián)網(wǎng)環(huán)境下,線程池模型有著明顯的不足,處理請求的工作流程中往往發(fā)生大量的阻塞,為了保證請求及時得到響應(yīng),必須增加線程數(shù)量。然而,系統(tǒng)的資源是有限的,線程之間上下文的切換也會帶來大量的處理器開銷。因此,基于線程池模型的架構(gòu)在高并發(fā)、高負(fù)載的環(huán)境下性能會急劇下降,甚至造成系統(tǒng)癱瘓。

事件驅(qū)動處理模型要求單個處理階段的阻塞時間不能太長,而且調(diào)度器決定了整個事件處理流程,結(jié)構(gòu)復(fù)雜,實現(xiàn)之后不能輕易改變,這使得應(yīng)用很難自定義流程,因此它的通用性不夠高。

SEDA模型結(jié)合了線程池模型和事件驅(qū)動模型的優(yōu)點,采用非阻塞輸入輸出,既充分利用了處理器的并行處理特點又避開了線程切換的開銷[10],并且能夠依照業(yè)務(wù)邏輯靈活地將服務(wù)劃分階段,在階段內(nèi)部進(jìn)行動態(tài)資源調(diào)節(jié),再通過事件隊列將這些階段連接起來實現(xiàn)整個業(yè)務(wù)的處理流程,從而可以支持高并發(fā)、高負(fù)載,并且具有良好的通用性。

經(jīng)過比較與分析,SEDA架構(gòu)能使服務(wù)器有效應(yīng)對高并發(fā)高負(fù)載環(huán)境,并且能最好地滿足民航業(yè)務(wù)對服務(wù)器性能的各種要求。

2JCF平臺中的SEDA架構(gòu)

2.1整體結(jié)構(gòu)

JCF(Java Core Framework)中間件平臺是民航旅客服務(wù)信息系統(tǒng)的重要組成部分,允許使用Java語言以及相關(guān)技術(shù)實現(xiàn)交易處理。它的主要目的是提供一個使用Java技術(shù)創(chuàng)建、部署、運行業(yè)務(wù)服務(wù)的平臺。平臺允許用戶使用Java語言創(chuàng)建核心的業(yè)務(wù)處理邏輯,并支持圖形化的流程配置模式將多個核心業(yè)務(wù)處理邏輯編排成為可獨立運行、部署的業(yè)務(wù)服務(wù)。同時JCF平臺需要在內(nèi)部提供系統(tǒng)的方案來解決JCF平臺內(nèi)部業(yè)務(wù)服務(wù)與現(xiàn)有企業(yè)服務(wù)總線TSI(Travelsky Service Integrator)系統(tǒng)對接的問題,以及通過TSI訪問JCF平臺內(nèi)部業(yè)務(wù)服務(wù)時,所需要的負(fù)載均衡、資源隔離、故障隔離等需求。

TSI為多個應(yīng)用之間的彼此訪問提供消息路由通道。不同系統(tǒng)之間的應(yīng)用通過TS進(jìn)行交互時,通過TSI的接入點接收發(fā)送給本系統(tǒng)應(yīng)用的消息,以及發(fā)出要發(fā)送到其他系統(tǒng)的消息。TSI負(fù)責(zé)將消息在不同系統(tǒng)的接入點之間進(jìn)行路由轉(zhuǎn)發(fā)。

JCF平臺由開發(fā)工具、運行系統(tǒng)、部署管理工具三大部分組成,為業(yè)務(wù)服務(wù)的開發(fā)、部署、運行和維護(hù)提供完整的支持。平臺的邏輯視圖如圖4所示。

圖4 JCF平臺結(jié)構(gòu)

JCF運行系統(tǒng)的功能可以分為兩個層次,如圖5所示。

圖5 JCF運行系統(tǒng)結(jié)構(gòu)

上層為服務(wù)層。作為應(yīng)用支撐框架,它允許用戶使用 Java 語言創(chuàng)建核心的業(yè)務(wù)處理邏輯,并將其編排成為可獨立運行,部署的業(yè)務(wù)服務(wù),以一個服務(wù)為一個階段,階段之間用事件進(jìn)行通信。一個應(yīng)用可以包含多個服務(wù),當(dāng)應(yīng)用請求到來時會被交給多個服務(wù)依次序進(jìn)行處理,也就是對請求分階段處理。同樣也通過適配服務(wù)的方式解決JCF平臺內(nèi)部業(yè)務(wù)服務(wù)與現(xiàn)有TSI系統(tǒng)對接的問題,當(dāng)外系統(tǒng)消息到來時,首先由適配階段處理,然后將結(jié)果封裝成事件發(fā)送到下一個階段的事件隊列等待具體的業(yè)務(wù)處理。

底層為調(diào)用層。作為分布式服務(wù)調(diào)用平臺,它為服務(wù)之間的相互調(diào)用提供基本支撐:SEDA異步調(diào)用、負(fù)載均衡、故障隔離、自動尋址等等。對業(yè)務(wù)應(yīng)用的開發(fā)人員來說它是“透明”的。

2.2階段內(nèi)部結(jié)構(gòu)

按照SEDA模型對服務(wù)劃分階段的思想,將一個業(yè)務(wù)拆分成多個子服務(wù),以一個服務(wù)為一個階段。對于每個階段,它主要由以下三部分構(gòu)成:

1) 事件隊列。每個階段有自己的事件隊列,新到達(dá)的事件首先進(jìn)入該隊列,等待事件處理器進(jìn)行處理。該隊列的大小是有限制的,如果隊列達(dá)到閾值,新到的事件會被轉(zhuǎn)發(fā)到特定的錯誤處理階段。

2) 線程池。線程池為本階段的并發(fā)處理提供工作線程,它對應(yīng)用程序來說是透明的,階段與階段之間的線程池互相獨立。根據(jù)各自階段負(fù)載情況的不同,各個階段可以動態(tài)地調(diào)整本階段線程池的大小,避免某個階段用完所有的線程資源。

3) 事件處理器。事件處理器是業(yè)務(wù)邏輯的核心,它從事件隊列中取出事件,執(zhí)行用戶定義的邏輯操作,然后將事件發(fā)送給下一個階段。事件處理器通常由用戶自己編寫,具有良好的靈活性。

此外用資源控制器根據(jù)各個階段的運行時負(fù)載狀況調(diào)節(jié)本階段的資源配置和運行參數(shù),其主要組成部件為線程池控制器和批處理控制器。線程池控制器用來控制運行時的線程池大小,當(dāng)本階段事件隊列的深度比較大的時候,說明該階段有比較高的負(fù)載,則增加線程數(shù),反之則銷毀一些線程。批處理控制器用來控制事件處理器處理事件的并發(fā)量,也就是控制每次從事件隊列中取出的事件的數(shù)量。通過在每一批事件當(dāng)中共享代碼和數(shù)據(jù),提高服務(wù)器緩存命中率,從而提高JCF平臺的吞吐量。

當(dāng)外系統(tǒng)產(chǎn)生一個JCF業(yè)務(wù)請求時,首先將請求發(fā)送至TSI,由TSI將消息路由至JCF接入點。然后由JCF平臺中的適配服務(wù)從接入點獲取請求消息并進(jìn)行適配階段的處理,處理完成后將消息封裝成為事件,依據(jù)請求的需要發(fā)送到業(yè)務(wù)處理階段的事件隊列等待處理。業(yè)務(wù)處理階段根據(jù)批處理控制器的策略從事件隊列中取出一批事件放到線程池中,交給用戶編寫的事件處理器以并發(fā)的方式進(jìn)行處理。在這一過程執(zhí)行的同時事件隊列還會不停地接收到新的事件,線程池控制器會根據(jù)隊列深度的變化情況實時調(diào)整線程池大小,以合理分配系統(tǒng)資源。

在請求處理過程中如果出現(xiàn)服務(wù)之間的相互調(diào)用,由JCF平臺負(fù)責(zé)流程中的異步回調(diào)過程。JCF 平臺提供基于內(nèi)存隊列的SEDA異步機制,實現(xiàn)服務(wù)運行和調(diào)用所需的異步模型: 異步觸發(fā)對服務(wù)的調(diào)用,調(diào)用后不會阻塞調(diào)用方線程的執(zhí)行。來不及處理的消息會臨時緩存在與服務(wù)綁定的內(nèi)存隊列中。JCF平臺通過這種方式解決了Java系統(tǒng)開發(fā)中的線程同步阻塞問題,使得系統(tǒng)不必掛起等待被調(diào)用服務(wù)的應(yīng)答,這在業(yè)務(wù)邏輯比較復(fù)雜的情況下能夠有效提高系統(tǒng)效率。

2.3服務(wù)異步調(diào)用過程

國際民航系統(tǒng)間報文交互基于IATA所定義的國際規(guī)范,該規(guī)范分TYPE-A和TYPE-B兩種類型,其中TYPE-A屬于Request-Response模式,TYPE-B屬于One-way模式。JCF平臺提供了基于這兩種模式的異步調(diào)用過程。

JCF 平臺中的SEDA異步機制以非阻塞方式調(diào)用目標(biāo)服務(wù)。圖6顯示了服務(wù)異步調(diào)用的過程。

1) 源服務(wù)向服務(wù)平臺API發(fā)出服務(wù)調(diào)用請求。

2) 平臺負(fù)責(zé)將單個交易的交易序號存入應(yīng)答等待緩沖區(qū)。

3) 平臺將請求消息發(fā)送至JCFserver的發(fā)送隊列。

4) 當(dāng)被調(diào)用的服務(wù)實例位于其他的JCF服務(wù)器,由JCF服務(wù)器負(fù)責(zé)查找目標(biāo)服務(wù)所在主機。如果有多臺主機提供同樣的目標(biāo)服務(wù),則需要執(zhí)行負(fù)載均衡算法選擇一臺主機,然后與目標(biāo)主機進(jìn)行通信,將消息發(fā)送至目標(biāo)主機的接收隊列。當(dāng)被調(diào)用的服務(wù)實例位于當(dāng)前的JCF服務(wù)器,優(yōu)先調(diào)用本地服務(wù),此時不進(jìn)行負(fù)載均衡調(diào)度。對本地服務(wù)調(diào)用時,消息仍然使用隊列進(jìn)行轉(zhuǎn)發(fā),隊列的使用模式與異地消息收發(fā)的模式一致,主要區(qū)別在于不進(jìn)行通信轉(zhuǎn)發(fā)消息,而是直接投遞到目標(biāo)隊列。

5) 平臺通過異步方式接收到應(yīng)答后,自動觸發(fā)回調(diào)接口進(jìn)行應(yīng)答的處理并且允許通過交易序號來識別請求與應(yīng)答之間的對應(yīng)關(guān)系。

6) 當(dāng)請求與應(yīng)答的交易序號相同時,平臺會從應(yīng)答等待緩沖區(qū)中取出該交易的交易序號并將其從緩沖區(qū)中刪除。

7) 平臺根據(jù)該交易序號恢復(fù)現(xiàn)場并進(jìn)行后續(xù)處理,最后向發(fā)出該請求的服務(wù)提供交易序號并通知其調(diào)用已完成。

圖6 服務(wù)異步調(diào)用流程

服務(wù)平臺API還有定時功能。如果某個交易在超過一定時間后仍然沒有應(yīng)答消息,則服務(wù)平臺會從應(yīng)答等待緩沖區(qū)中將這個交易序號的流程運行狀態(tài)刪除,并且通知發(fā)出該調(diào)用請求的服務(wù)交易超時。之后如果接收到了該交易的應(yīng)答消息則直接丟棄。

3實驗

本節(jié)結(jié)合民航離港業(yè)務(wù)的處理過程給出了基于SEDA模型的異步模式服務(wù)器和基于線程池模型的同步模式服務(wù)器的性能對比實驗結(jié)果。如圖7所示。

圖7 實驗場景

民航離港業(yè)務(wù)是民航系統(tǒng)中最重要的業(yè)務(wù)之一,其處理速度直接影響到一個機場每天的旅客吞吐量。系統(tǒng)一旦故障,后果不堪設(shè)想。每個旅客值機的過程就是與離港系統(tǒng)做信息交互的過程。加快該過程能有效提高前臺工作人員的工作效率。

值機過程分提取電子客票、接收旅客兩個過程,其中接收旅客過程又由如下幾個子過程組成:電子客票驗證、判斷是否為天合優(yōu)享旅客、分配座位、打印登機牌等幾個過程。傳統(tǒng)模式下的處理將這幾個過程放在同一個線程中順序處理。而轉(zhuǎn)移到JCF系統(tǒng)后,基于SEDA異步機制進(jìn)行處理。

本實驗以中國民航離港業(yè)務(wù)的處理場景為模型組織。假設(shè)系統(tǒng)中存在A、B、C、D四個組件分別處理電子客票驗證、判斷是否為天合優(yōu)享旅客、分配座位、打印登機牌4個過程,其中A、C、D的處理過程比較短暫,而B的執(zhí)行會牽涉到數(shù)據(jù)庫查詢或等待其他服務(wù)返回結(jié)果等導(dǎo)致的長時間阻塞?,F(xiàn)在假設(shè)有兩個請求,請求1的處理過程需要用到A、C和D組件,請求2的處理過程需要用到B和C組件,用來模擬復(fù)雜民航業(yè)務(wù)。假設(shè)請求1的處理過程中處理器使用時間T1是0.1 ms,阻塞時間T2是3 ms。 請求2的處理過程中處理器使用時間T1是0.1 ms,而數(shù)據(jù)庫查詢和等待其他服務(wù)返回結(jié)果導(dǎo)致的阻塞時間T2是300 ms。

在傳統(tǒng)線程池的方案中,為了在阻塞時間T2中提供充足的線程使處理器保持忙碌的狀態(tài)以充分利用處理器,需要設(shè)置大約 N×(1+T2/T1) 個線程。其中N是系統(tǒng)擁有的處理器數(shù)量。通過前面的假設(shè)數(shù)據(jù)計算后可知,請求1需要30個線程,請求2需要3000個線程。

在線程池方案中,同時向服務(wù)器大量發(fā)送請求1、請求2,兩種請求的數(shù)量大致相同,則線程池會將線程資源平均分配給兩種請求。假設(shè)線程池的大小是請求1與請求2的數(shù)量之和3030,按照線程池模型的分配策略,3030個線程會被平均分配給請求1和請求2。這樣導(dǎo)致的結(jié)果是:請求1被分配了過量的線程,多余的線程得不到利用卻增加了線程調(diào)度的開銷;請求2得到的線程數(shù)量不足,當(dāng)線程全部阻塞時處理器處于空閑狀態(tài)卻沒有充足的線程用來處理新到達(dá)的事件,系統(tǒng)吞吐量下降。

而SEDA架構(gòu)的服務(wù)器的不同之處在于它能夠根據(jù)請求的不同執(zhí)行情況為它們分配適當(dāng)數(shù)量的線程。一個請求會由多個組件進(jìn)行處理,每個組件對應(yīng)SEDA中的一個階段,在本例中就分為A、B、C、D四個階段。雖然每個階段的資源需求和執(zhí)行情況都不同,但是SEDA的資源控制器可以為每個階段動態(tài)調(diào)整資源數(shù)量,比如當(dāng)某個階段的線程池中的線程大量阻塞的時候,就多給該階段多分配些線程,反之則減少些線程,這樣就達(dá)到了為不同請求分配不同數(shù)量的線程的目的。組件之間的調(diào)用方式也由同步調(diào)用改造為基于事件驅(qū)動的異步調(diào)用方式,以減少處理復(fù)雜業(yè)務(wù)時處理器空閑等待的時間。

針對這樣的場景設(shè)計了普通Java程序和JCF應(yīng)用程序,并分別運行在JVM和JCF平臺上。

實驗環(huán)境: HP Pro 3000 MT Business PC,機器的配置如下:

1) Intel Core2 Quad CPU Q9500 @ 2.83 GHz 2.83 GHz

2) 4 GB RAM

3) Windows 7 Pro

4) SUN JDK Version 1.8.0_20

5) JCF1.2

在服務(wù)器上部署好JCF平臺,然后安裝上待測試的服務(wù)。根據(jù)機器的配置情況,將并發(fā)量變化區(qū)間定為300 ~40 000。按照并發(fā)數(shù)的大小順序依次執(zhí)行, 每次實驗執(zhí)行 3 遍,防止隨機誤差。根據(jù)結(jié)果得到如圖8所示。

圖8 實驗結(jié)果對比

圖8顯示了服務(wù)器的單位時間吞吐量。在系統(tǒng)并發(fā)數(shù)較少的時候,差別幾乎看不出來。但是在并發(fā)數(shù)逐漸增大時,基于SEDA模型的服務(wù)器吞吐量呈穩(wěn)步上升的趨勢,而傳統(tǒng)的基于線程池模型的服務(wù)器的吞吐量則顯得不夠穩(wěn)定?;赟EDA模型的服務(wù)器顯示出了更為良好并且穩(wěn)定的性能。這說明SEDA架構(gòu)的確成功提高了系統(tǒng)應(yīng)對高并發(fā)高負(fù)載網(wǎng)絡(luò)環(huán)境的能力,并且在處理民航復(fù)雜業(yè)務(wù)的情況下基于SEDA模型的異步模式服務(wù)器在性能方面要優(yōu)于同步模式的服務(wù)器。

4結(jié)語

本文針對民航旅客服務(wù)信息系統(tǒng)實時并發(fā)請求多、業(yè)務(wù)功能復(fù)雜多變、數(shù)據(jù)量大等業(yè)務(wù)特點,引入了將服務(wù)劃分階段的方法,研究了如何在大規(guī)模民航旅客服務(wù)信息系統(tǒng)中應(yīng)用分階段的事件驅(qū)動架構(gòu)模型。通過將SEDA模型引入JCF平臺,實現(xiàn)了在運行時將同步流程自動轉(zhuǎn)換為異步方式執(zhí)行的特性,完全解決了Java系統(tǒng)開發(fā)中的線程同步阻塞問題,使得用戶不必關(guān)心同異步的轉(zhuǎn)換,從而能夠?qū)W⒂诔绦驑I(yè)務(wù)邏輯的開發(fā)。同時用實驗驗證表明SEDA架構(gòu)使得該平臺能夠通過運行時動態(tài)調(diào)節(jié)資源配置獲得穩(wěn)定的服務(wù)器性能,極大地提高了服務(wù)器應(yīng)對高并發(fā)高負(fù)載環(huán)境的能力,進(jìn)而增強了民航旅客服務(wù)信息系統(tǒng)的處理能力,使得該系統(tǒng)能夠快速適應(yīng)復(fù)雜多變的用戶需求和業(yè)務(wù)環(huán)境,降低軟件開發(fā)和維護(hù)成本,提高企業(yè)信息化水平。

參考文獻(xiàn)

[1] 唐國鐘.基于SEDA的自適應(yīng)性能優(yōu)化技術(shù)[D].電子科技大學(xué),2008.

[2] 劉新強,曾兵義.用線程池解決服務(wù)器并發(fā)請求的方案設(shè)計[J].現(xiàn)代電子技術(shù),2011,34(15):141-143.

[3] 姚錫凡,金鴻,李彬,等.事件驅(qū)動的面向云制造服務(wù)架構(gòu)及其開源實現(xiàn)[J].計算機集成制造系統(tǒng),2013,19(3):654-661.

[4] 馬存,馬躍,廉東本,等.基于SEDA企業(yè)服務(wù)總線負(fù)載控制[J].計算機系統(tǒng)應(yīng)用,2013,22(12):66-69.

[5] 趙金柱.基于事件驅(qū)動的SOA結(jié)構(gòu)設(shè)計與研究[D].華北電力大學(xué),2012.

[6] 彭樂,趙新陽,黃靚,等.基于分階段事件驅(qū)動的企業(yè)服務(wù)總線設(shè)計與實現(xiàn)[J].信息技術(shù)與標(biāo)準(zhǔn)化,2011,53(5):73-77.

[7] Shi Jianhong,Zhang Shengli,Chang Zhenggang.The security analysis of a threshold proxy quantum signature scheme[J].Science China(Physics,Mechanics & Astronomy),2013,56(3):519-523.

[8] 董率,廉東本,劉鵬.基于SEDA的企業(yè)服務(wù)總線的設(shè)計與實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2010,19(9):44-48.

[9] 羅海南.多階段事件驅(qū)動架構(gòu)性能調(diào)優(yōu)機制的研究[D].電子科技大學(xué),2009.

[10] 魯先志.基于SEDA的服務(wù)器端應(yīng)用程序設(shè)計與實現(xiàn)[D].重慶大學(xué),2008.

DESIGNING SERVER ARCHITECTURE FOR COMPLICATED AND HIGH CONCURRENCY CIVIL AVIATION BUSINESSES

Li Yongjin1Tian Feng1Ni Zhaoyang2

1(ResearchandDevelopmentCenter,TravelSkyTechnologyLimited,Beijing100000,China)2(SchoolofComputerScienceandTechnology,CivilAviationUniversityofChina,Tianjin300000,China)

AbstractFor the operation features of civil aviation business such as numerous real-time concurrent requests, complicated and changeable operation functions, large amount data, high reliability, etc., we analysed the advantages and disadvantages of currently prevalent server architectures. We divided the service into stages and introduced the staged event-driven architecture (SEDA) into civil aviation passengers service information system (CAPSIS), and carried out an experiment for comparative verification. It is proved by the experimental result that the server software architecture applying SEDA has better capacity than those thread pool model-based architectures in dealing with high concurrent requests, which can make large-scale CAPSIS respond effectively to high-concurrency and high-load environment.

KeywordsSEDAServer architectureMiddlewareCivil aviation passengers service information systemAsynchronous call

收稿日期:2014-12-25。國家科技支撐計劃項目(2014BAJ04B 02);民航局科技創(chuàng)新引導(dǎo)資金專項(MHRD20130106);中國民航大學(xué)中央高?;痦椖?3122014P004,3122014C016)。李永進(jìn),工程師,主研領(lǐng)域:中間件及分布式系統(tǒng)架構(gòu)。田豐,工程師。倪兆陽,碩士生。

中圖分類號TP319

文獻(xiàn)標(biāo)識碼A

DOI:10.3969/j.issn.1000-386x.2016.05.002

猜你喜歡
調(diào)用線程處理器
基于C#線程實驗探究
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
淺談linux多線程協(xié)作
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
Imagination的ClearCallTM VoIP應(yīng)用現(xiàn)可支持Cavium的OCTEON? Ⅲ多核處理器
ADI推出新一代SigmaDSP處理器
利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
Java的多線程技術(shù)探討