朱樹人,謝勇
(廣東財經大學信息學院,廣東廣州 510320)
面向服務技術和經濟全球化的日益發(fā)展,逐步形成了以獨立、自治的服務供應和服務消費為特點、以網(wǎng)絡為中心的商務結構趨勢[1,2]。物聯(lián)網(wǎng)服務和擁有大量在線用戶的交通管理與信息服務系統(tǒng)等,不但需要承受大量持續(xù)的并發(fā)訪問請求,還會遭遇巨量的尖峰負載[3-5]。高并發(fā)請求達到一定水平時,由于服務請求轉化成數(shù)目更大的I/O和網(wǎng)絡請求,需要消耗巨量的網(wǎng)絡基礎資源。研究網(wǎng)絡服務能跟隨負載同步增長的可伸縮服務能力,避免造成服務品質急劇下降具有十分重要的意義?,F(xiàn)有的物聯(lián)網(wǎng)服務平臺尤其是交通管理與信息服務服務平臺缺乏對高并發(fā)性、動態(tài)內容、連續(xù)的高可用性、對突發(fā)時變負載的自適應調節(jié)能力等需求的綜合考慮[6],采用的編程模型缺乏完整的服務設計方法、缺乏保障服務整體性能的量化方法,對突發(fā)過量負載不具備自適應平滑能力[7]。本文基于EPCIS(electronic product code information service),采用的階段化異步事件驅動網(wǎng)絡服務模型用“階段”來劃分網(wǎng)絡服務,以對象化的隊列為主要構成組件,底層采用異步I/O為基礎,組件內部和組件間采用事件驅動模型通信,設計和實現(xiàn)一個基于事件驅動模型的異步Socket通信適配子層,用以屏蔽底層OS異步I/O細節(jié),構造具有可伸縮性、連續(xù)的高可用性、可管理性和服務易構建性的網(wǎng)絡服務模型。
Web服務器并發(fā)處理體系結構是影響服務器性能的重要因素[8-9],有多進程、多線程、事件驅動、核心類等服務并發(fā)處理。事件驅動模型是近年來逐步流行的并發(fā)管理方法[10],其目標是保持負載變化時的系統(tǒng)健壯性,當供應負載增大超出飽和值時,吞吐量只有很小的退化;當任務數(shù)增加時,服務器的吞吐量也增長直到瓶頸飽和;如果任務數(shù)進一步增加,過量的任務將被吸收在服務器的事件隊列中。吞吐量在負載很寬的變化范圍內保持恒定,而每個任務的延遲呈線性增長。Flash等Web服務器以及 HarvestWeb cache 采用這種模型[11-12]。這類服務器包含少量的線程,它們不停地循環(huán),處理來自隊列的事件。事件可以由操作系統(tǒng)或應用內部產生,并對應于網(wǎng)絡和磁盤I/O的就緒和完成指示、定時器超時以及其他應用指定的事件。事件驅動方法在實現(xiàn)上把每個任務當成是一個有限狀態(tài)機FSM(finite state machine),狀態(tài)之間的轉移由事件驅動。服務器對每個任務不依賴于線程上下文維護其連續(xù)狀態(tài)。事件驅動服務器[13-15]只使用少量進程,不需要鎖定和同步,也沒有上下文切換開銷,因此能獲得更高的并發(fā)性。其缺點是開發(fā)這樣的服務器沒有合適的編程模型。所以適當組合使用編程簡單的多線程模型將會簡化開發(fā)難度。
異步事件驅動通信體系結構使用事件驅動模型和異步I/O技術的網(wǎng)絡應用體系結構,主要包含底層的NIO,中間的異步通信子層,頂部的應用層3個層次[7]。模型中組件內部和組件間將組合使用事件驅動模型和多線程模型。在NIO層中,核心的組件是可層次擴展的變遷NIO,組件通過通信原語與其上層之間的數(shù)據(jù)交換。異步通信子層是一個適配層,它只有一個核心組件AsocketQ。AsocketQ是一個隊列,所有與NIO和應用層之間的輸入輸出都緩沖在這個隊列中,隨后予以處理。與此類似,應用層中也包含一個隊列appQ,緩沖并處理應用程序和異步通信子層的輸入輸出。接受1個客戶請求時,該請求的服務映射為對CPU處理資源和對I/O資源的使用。請求到資源使用的1對多映射是1個同步粒度細化的過程,細化的結果是系統(tǒng)能更協(xié)調地使用資源,減少性能瓶頸產生的機會和持續(xù)時間。隊列盡量吸收不能及時處理的請求,而不是在資源不足時簡單地拒絕服務。Renew工具組件采用“類化”的方法描述多層次對象,AsocketQ和appQ可看作是同一個事件隊列類的不同實例。
圖1 異步通信隊列類模型Fig.1 Asynchronous communication queue model
使用高級petri網(wǎng)描述的異步通信隊列類模型(圖1)給出了1個實用的隊列模型,Queue是基本隊列對象,定時器組件timer調用定期queueManager隊列管理器,完成隊列事件處理。policy是描述排隊策略以及進行隊列過載管理的預定義組件,變遷queueManaging使用policy實現(xiàn)事件調度策略,同時根據(jù)policy對隊列進行過載管理,實現(xiàn)準入控制(admission control)等。當事件出隊時,首先對隊列進行分析,并通過 eventHandler進行處理。例如,在AsocketQ實例中,當隊列輸入請求是1個TCP連接請求并調度出隊時,parsing將該請求傳遞給EventHandling變遷,后者創(chuàng)建1個本地的連接代理proxy,由proxy通過outgoing變遷,在 NIO上注冊,通知NIO Selector監(jiān)視連接操作,并使用連接請求附帶的遠程地址創(chuàng)建一個socket。當NIO完成實際連接時,在下一個輪詢周期,將NIO Selector提供的連接完成事件重新入隊,并將連接作為應用層事件回傳給appQ隊列。
圖2所示為NIO的高級petri模型。NIO以注冊(register)/查詢(polling)方式提供異步 TCP,UDP和LISTEN服務。圖中9個變遷是提供給上層應用的服務接口。NIO層的工作過程如下:上層應用通過打開Selector和SelectableChannel建立可進行異步通信的環(huán)境。使用register對需要NIO監(jiān)視的操作予以注冊。完成注冊后,上層可異步地進行 connect,listen,read 和 write 等操作[7]。NIO 在完成I/O操作后,將通過SelectionKey指示。在事件處理隊列一個輪詢周期到達時,上層會通過調用select操作獲取NIO完成的指示,并繼而采取相應的動作完成異步I/O處理。
圖2 NIO高級petri模型Fig.2 NIO Senior Petri model
在服務模型中使用“階段”作為服務軟件控制流程的構成組件,并以此作為設施資源分配、調度和其它管理的基本單位。設計時,服務開發(fā)者使用一系列設計模式將控制流程分解為一組“階段”,服務定義成由“階段”所組成的圖構成?!半A段”是一個自包含的軟件組件,由事件處理器、可管理的事件隊列、具有反饋能力的資源控制器以及驅動線程池組成?!半A段”通過獨立工作的事件隊列減少部件間的耦合度,使用動態(tài)資源管理技術適應突發(fā)負載的時變特征。驅動各“階段”執(zhí)行的活動實體有各自獨立的線程池通過事件處理程序和線程調度部件消除耦合。服務邏輯從線程調度等核心邏輯中分離了出來,控制事件控制器的執(zhí)行實現(xiàn)資源管理策略。應用系統(tǒng)內部組織是由多個事件隊列連接起來的“階段互連圖”構成,“階段”間通過隊列通信,因此,具有獨立的、明確的控制邊界。
服務管理用業(yè)務流程處理語言(BPEL),事件驅動技術方法分析和實現(xiàn)。用面向過程的語法定義服務的控制和組合,在命令-控制模型上通過BPEL執(zhí)行引擎實現(xiàn)BPEL。BPEL構建完全抽象了商務流程邏輯的服務組合層次,因此,不會對面向服務結構(SOA)造成任何影響。BPEL允許一個流程使用服務進一步封裝,或由其他的服務流程組合,所以,任何一個商務流程并不限于它所處的層。通過點擊的機制將事件、發(fā)布者和訂閱者聯(lián)系起來,執(zhí)行環(huán)境的實現(xiàn)獨立于控制引擎。事件驅動機制提供了連接孤立環(huán)境的方式,事件驅動的消息模式設計方法使得服務之間的通訊更加暢通。
設計1個處理簡單對象訪問協(xié)議(SOAP)的消息隊列基礎框架,SOA在HTTP層網(wǎng)絡基礎通過web service技術就能實現(xiàn)事件驅動機制。企業(yè)服務總線(enterprise service bus,ESB)構架提供了一種可以將消息隊列和Web Service技術結合起來的途徑。ESB允許事件廣泛訂閱,適合作容納已發(fā)布的商務事件的容器。將ESB放入企業(yè)的全局數(shù)據(jù)空間,區(qū)域自治的多條服務總線產品結合起來提供ESB的服務,這樣不管使用什么技術開發(fā)的應用在任何時間和地點都能訪問事件信息。圖3演示了一個企業(yè)級的服務總線是如何通過運行多個域,構造整個組織全局數(shù)據(jù)空間的。
圖3 ESB結構及全局數(shù)據(jù)空間Fig.3 ESB structure and global data space
按需服務的商業(yè)模式要求服務提供者對外部環(huán)境的刺激(事件)快速做出反應。但供應與需求分離程度的擴大產生了對于敏捷性的需求,當組織的結構不斷變化時,只有通過服務之間的松耦合才能支持業(yè)務不受阻礙的連續(xù)發(fā)展。為實現(xiàn)服務響應的敏捷性,網(wǎng)絡服務系統(tǒng)必須不受機構的各種重組變更的影響。服務業(yè)務流程適應機構變化的敏捷性必須不受支持它們的IT系統(tǒng)的限制。機構敏捷性基礎是降低耦合的服務更容易在不干擾現(xiàn)有IT支持系統(tǒng)連續(xù)性的基礎上改造組織的結構,因此,松耦合可以滿足這些服務需求。EDA的發(fā)布-訂閱模式建立了松耦合基礎,作為連接邊界、允許各個邊界保持解耦合的狀態(tài),實現(xiàn)跨邊界通信。服務應用搭建的靈活性可以通過定義良好的功能邊界,使用共享的服務來完成。敏捷性依賴于為了重新設計商務流程而對應用進行重構增加敏捷性的能力,事件驅動能夠增加服務的敏捷性。與同步、命令-控制消息交換模式的傳統(tǒng)分布式架構不同,EDA采用基于異步、發(fā)布-訂閱模式,發(fā)布者完全不需要知道訂閱者的存在,訂閱者也無需知道發(fā)布者的細節(jié)。服務的松耦合只共享消息的語義,EDA在聯(lián)合的、自治的處理環(huán)境中,為商務流程中各個步驟之間的獨立性提供支持。消息框架利用異步消息模式來實現(xiàn)的請求-應答通訊。EDA通過消息框架處理流程鏈中各個層之間的水平通訊、需要跨越功能單位邊界的流程以及需要跨越物理單位界限的流程。通過將請求的發(fā)布者和應答的消費者分離,將請求的消費者和應答的發(fā)布者分離,讓系統(tǒng)松耦合。鑒別跨越功能邊界的應用,是潛在的“敏捷性瓶頸”,對需要跨越機構的外部邊界的應用給予較高的優(yōu)先級,是解耦合服務邊界的基礎。
松耦合意味著獨立,松耦合的服務對彼此的依賴沒有緊耦合的服務密切,功能和數(shù)據(jù)同樣適合這個規(guī)則。服務相關的數(shù)據(jù)定義在服務功能邊界內時,服務間的耦合度就會增加。這種設計會增加服務間訪問數(shù)據(jù)的彼此依賴概率。當以數(shù)據(jù)復制、避免保證數(shù)據(jù)傳輸和語義一致性的共享層之外的其他層共享等機制實現(xiàn)的數(shù)據(jù)冗余被允許的情況下,服務之間的耦合程度會降低。EDA支持在冗余環(huán)境中的數(shù)據(jù)一致性,保證跨越解耦合邊界的數(shù)據(jù)冗余讓松耦合更加強健。找到“解耦合點”被證明是有效使用EDA的關鍵。“解耦合點”就是某些經常同時出現(xiàn)的商務流程,它們會一起出現(xiàn)在任何一個組織單位中,具有強烈的內聚性和原子類型的業(yè)務功能,即在各個業(yè)務功能之間的邊界商業(yè)流程的功能構成變得清楚的位置。如果原子交易跨越了解耦合邊界,那么回滾交易就需要在這些解耦合點實現(xiàn)。無論在這些解耦合點上的服務是連接還是斷開,都不會影響被連接的系統(tǒng),不同域之間的所有的數(shù)據(jù)交換都發(fā)生在這些點。在一個可重用的域中,EDA的粒度越小,可重用的域也就越小,系統(tǒng)的靈活性就越好。在解耦合點使用基于SOAP的Web服務技術,結合通用的ESB企業(yè)服務總線基礎架構,可以很容易實現(xiàn)與SOAP技術封裝的ERP系統(tǒng)、其它外部系統(tǒng)的網(wǎng)關等異構系統(tǒng)的無縫連接。
網(wǎng)絡服務軟件在訪問網(wǎng)絡或文件時的典型做法是使用阻塞式(blocking)I/O操作,并采用多線程復用多個I/O通道[11]。其主要缺陷是當I/O通道數(shù)目很大時性能下降嚴重,系統(tǒng)缺乏良好的伸縮性。另一種伸縮性更好的方法是使用非阻塞式(non-blocking)I/O,例如熟知的UNIX select()系統(tǒng)調用。為避免陷入復雜的調度決策和底層操作細節(jié),對高層編程模型提供支持,在Java JDK NIO和編程模型之間加入異步socket適配子層Asocket,封裝和屏蔽底層細節(jié)。圖4描述了ASocket的體系結構,低部是JDK NIO;中間是異步通信子層,由 hipserse.aFrame.Asocket 和 hipserse.aFrame.Asocket.nio 構成;頂層是編程模型,Hiperse.aFrame.api是編程模型的 API接口,hiperse.aFrame.core支持服務模型的基本運行環(huán)境,是編程模型 aFrame的核心部分[8]。
圖4 Asocket異步通信體系結構Fig.4 Asocket communication architecture
EPCIS是物聯(lián)網(wǎng)的核心模塊,在物聯(lián)網(wǎng)的整體結構中,它不同于應用層事件(Application Level E-vent,ALE)規(guī)范和RFID閱讀器,EPCIS處于系統(tǒng)上層位置,它是基于ALE和RFID讀取設備的管理中間件[9]。EPCIS定義了對象事件、聚合事件、統(tǒng)計事件和交易事件等四種事件類型。服務系統(tǒng)在物聯(lián)網(wǎng)定義了捕獲服務、查詢服務等一系列的服務,為建立一個標準的物聯(lián)網(wǎng)服務系統(tǒng)有重要的作用[10]。捕獲服務的功能是捕獲應用層事件,實現(xiàn)對標簽狀態(tài)間接監(jiān)聽。查詢服務分為核心查詢服務、查詢訂閱服務和查詢控制服務。為用戶提供一系列的訂閱規(guī)則,服務可以根據(jù)用戶的訂閱規(guī)則,周期性地產生查詢報告并發(fā)送給客戶,便于客戶了解感興趣的信息??刂瓶蛻舳说牟樵冋埱?,處理例外情況或完成異常處理。EPCIS模塊是一種層次結構,底層定義基礎數(shù)據(jù)格式,上層提供的服務接口和綁定技術實現(xiàn)。在EPCIS服務器端,定義物聯(lián)網(wǎng)的所有核心服務,允許用戶開發(fā)自己的客戶端來調用相應的EPC服務模塊,實現(xiàn)對EPC系統(tǒng)的快速開發(fā)。
在EPCIS訪問應用層嵌入Socket通信適配子層就能系統(tǒng)的高并發(fā)訪問,增強服務系統(tǒng)的吞吐量,EPC服務之間的交互,需要使用對象命名服務(Object Naming Service,ONE)組件,它可以使2種服務無縫連接到一起,從而實現(xiàn)企業(yè)間信息交互中間件的開發(fā),系統(tǒng)服務實現(xiàn)的數(shù)據(jù)流圖見圖5。ONS將一個EPC映射到一個或者多個URI,在URI中可以查找到物品的更多的詳細信息,通常對應著EPCIS的地址信息,也可以將EPC關聯(lián)到與物品相關的web站點或者其他Intemet資源。服務系統(tǒng)包含N個相對獨立的EPC系統(tǒng),EPC系統(tǒng)之間的交互樞紐是ONS模塊。EPC系統(tǒng)包括EPCIS事件監(jiān)聽模塊、數(shù)據(jù)持久化模塊、即時查詢模塊、定制查詢模塊和本地ONS查詢模塊。
圖5 基于EPCIS的異步事件驅動網(wǎng)絡服務數(shù)據(jù)流Fig.5 Network service data flow based on EPCIS
為了檢驗新模型的性能,仿真實驗環(huán)境服務器采用IBM System x3850 X5(7143i19),在服務請求數(shù)量小于1 000時,系統(tǒng)性能沒有什么變化,但當服務請求數(shù)量達到2 000時,新模型系統(tǒng)表現(xiàn)穩(wěn)定,而非異步事件驅動的服務模型響應速度開始變慢,并開始出現(xiàn)阻塞現(xiàn)象。仿真實驗說明,在新模型系統(tǒng)中請求到資源使用的1對多映射是一個同步粒度細化的過程,細化的結果是系統(tǒng)能更協(xié)調地使用資源,減少性能瓶頸產生的機會和持續(xù)時間。
(1)基于EPCIS,用“階段”劃分網(wǎng)絡服務,使用“階段”作為服務軟件控制流程的構成組件,并以此作為設施資源分配、調度和其他管理的基本單位。
(2)通過組合異步化事件驅動、階段化編程模型等技術來滿足高性能服務器高并發(fā)、可伸縮等方面的需求。并設計了1個異步Socket適配層來封裝和屏蔽底層細節(jié)。整個模型采用的HLPN網(wǎng)來描敘。
(3)在高性能通信軟件開發(fā)過程中將來需要繼續(xù)完成的工作是立建模系統(tǒng)的性能模型,并通過性能評估發(fā)現(xiàn)可能的瓶頸。
[1]李戈.云環(huán)境中典型應用的I/O優(yōu)化策略研究[D].上海:復旦大學,2012.LI Ge.I/O Performance optimization for typical applications in cloud environment[D].Shanghai:Fudan University,2012.
[2]龔奕利,雷迎春,張文,等.MEANS:基于微線程結構的網(wǎng)絡服務器[J].計算機研究與發(fā)展,2010,47(8):1466-1480.GONG Yili, LEI Yingchun, ZHANG Wen, et al.MEANS:A micro-thread architecture for network servers[J].Journal of Computer Research and Development,2010,47(8):1466-1480.
[3]朱樹人,彭妮.一種具有可伸縮服務能力的高性能web代理服務器[J].中南大學學報:自然科學版,2005,36(6):1064-1068.ZHU Shuren,PENG Ni.A high performance web proxy server with flexible service ability[J].Journal of Central South University:Science and Technology,2005,36(6):1064-1068.
[4] Apache Software Foundation.The Apache web server[EB/OL].http://www.apache.org.
[5]Jack van Hoof.SOA and EDA:Using events to bridge decoupled service boundaries[EB/OL].http://searchsoa.techtarget.com/tip/SOA-and-EDA-Using-eventsto-bridge-decoupled-service-boundaries.
[6]黃冬泉,張敏,徐振亞,等.高并發(fā)事件驅動服務器研究[J].2007,29(1):138 -142,148.HUANG Dongquan,ZHANG Min,XU Zhenya,et al.A study of highly concurrent even - t driven servers[J].Computer Engineering& Science,2007,29(1):138-142,148.
[7]彭妮.階段化異步事件驅動高性能WEB服務器[D].長沙:長沙理工大學,2006.PENG Ni.The staged asynchronous event- driven high performance web server[D].Changsha:Changsha University of Science& Technology,2006.
[8]夏卓群,朱樹人,彭妮.基于事件驅動和異步通信體系結構的Web服務器設計[J].長沙電力學院學報:自然科學版,2005,20(1):49 -51.XIA Zhuoqun,ZHU Shuren,PENG Ni.The design of web server based on the construction of event-driven and asynchronous communication[J].Journal of Changsha U-niversity of Electric Power:Natural Science,2005,20(1):49-51.
[9]LIU Zhiqing.Multimedia networking improvements of an embedded system:a case study[J].The Journal of China Universities of Posts and Telecommunica,2005,12(3):26-32.
[10]朱樹人,劉雪峰.一種基于MPLS-DiffServ流量工程的故障恢復模型[J].鐵道科學與工程學報,2006,3(4):88-92.ZHU Shuren,LIU Xuefeng.A model for fault restoration based on MPLS - DiffServ traffic engineering[J].Journal of Railway Science and Engineering,2006,3(4):88 -92.
[11]賈冰.基于語義的物聯(lián)網(wǎng)服務架構及及關鍵算法研究[D].長春:吉林大學,2013.JIA Bing.Research on semantic-based service architecture and key algorithms for the internet of things[D].Changchun:Jilin University,2013.
[12]魏強,金芝,李戈,等.物聯(lián)網(wǎng)服務發(fā)現(xiàn)初探:傳統(tǒng)SOA的可行性和局限性[J].計算機科學與探索,2013,7(2):97-113.WEI Qiang,JIN Zhi,LI Ge,et al.Preliminary study of service discovery in internet of things:feasibility and limitation of SOA[J].Journal of Frontiers of Computer Science and Technology,2013,7(2):97 -113.
[13]Guinard D,Trifa V,Karnouskos S,et al.Interacting with the SOA -based Internet of things:discovery,query,selection,and on-demand provisioning of Web services[J].IEEE Transactions on Service Computing,2010,3(3):223-235.
[14]HAO Yanan,ZHANG Yanchun,CAO Jinli.Web services discovery and rank:an information retrieval approach[J].Future Generation Computer Systems,2010,26(8):1053-1062.
[15]WANG Ting,WEI Dengping,WANG Ji,et al.SAWSDL-iMatcher:a customizable and effective semantic Web service matchmaker[J].Web Semantics:Science,Services and Agents onthe World Wide Web,2011,9(4):402-417.