馬 聰,史志鵬,馮 蓉
(中國(guó)電子科技集團(tuán)公司第三十三研究所,山西 太原 030032)
隨著企業(yè)規(guī)模及業(yè)務(wù)的不斷發(fā)展壯大,必然會(huì)遇到組織分散、流程分散、信息分散、資源分散的發(fā)展瓶頸。很多企業(yè)IT系統(tǒng)架構(gòu)主要是圍繞著綜合業(yè)務(wù)系統(tǒng)建立的,隨著業(yè)務(wù)需求不斷增多和變化,個(gè)別外圍系統(tǒng)的變化都有可能需要修改綜合業(yè)務(wù)系統(tǒng),形成了以綜合業(yè)務(wù)系統(tǒng)為核心的緊耦合IT架構(gòu)。與此同時(shí),由于各系統(tǒng)建設(shè)的時(shí)期和廠商不同,采用不同的數(shù)據(jù)庫(kù),不同的通信協(xié)議,不同的開(kāi)發(fā)技術(shù),數(shù)據(jù)標(biāo)準(zhǔn)和一致性難以保障,應(yīng)用開(kāi)發(fā)周期過(guò)長(zhǎng)等諸多弊端,致使系統(tǒng)之間的集成復(fù)雜,集成開(kāi)發(fā)效率低,工作量大,難以快速響應(yīng)新的業(yè)務(wù)需求[1]。因此,企業(yè)迫切需要改進(jìn)IT架構(gòu)來(lái)推動(dòng)流程整合、信息集中、資源共享、數(shù)據(jù)交互協(xié)調(diào),實(shí)現(xiàn)從規(guī)模擴(kuò)展走向規(guī)模效益。
Oracle Service Bus(OSB)是甲骨文公司推出的一種基于配置的策略驅(qū)動(dòng)型企業(yè)服務(wù)總線(xiàn),在異構(gòu)環(huán)境中提供可擴(kuò)展且可靠的面向服務(wù)的集成,服務(wù)管理和傳統(tǒng)消息代理。本文使用OSB設(shè)計(jì)與實(shí)現(xiàn)了一套企業(yè)服務(wù)總線(xiàn)平臺(tái)(ESB),集成整合了OA辦公自動(dòng)化、人力資源管理、電子檔案、合同管理、計(jì)劃管理等多個(gè)應(yīng)用系統(tǒng),有效地消除了應(yīng)用系統(tǒng)的集成復(fù)雜性,具備良好架構(gòu)柔性和擴(kuò)展性,從而能夠幫助公司在業(yè)務(wù)變化時(shí)實(shí)現(xiàn)IT系統(tǒng)的快速響應(yīng)。
ESB在服務(wù)調(diào)用方和服務(wù)提供方之間提供靈活的消息處理和操作。服務(wù)調(diào)用方通過(guò)企業(yè)服務(wù)總線(xiàn)統(tǒng)一使用HTTPS/HTTP發(fā)送REST/JSON消息,ESB路由轉(zhuǎn)換消息并調(diào)用服務(wù)提供方提供的服務(wù),也可直接進(jìn)行適配連接數(shù)據(jù)庫(kù)。系統(tǒng)管理員可通過(guò)ESB實(shí)時(shí)監(jiān)控服務(wù)器運(yùn)行狀況、服務(wù)訪(fǎng)問(wèn)情況、服務(wù)運(yùn)行質(zhì)量、操作用時(shí)跟蹤等內(nèi)容[2],同時(shí)ESB基于Oracle平臺(tái)安全服務(wù)和用于Web服務(wù)的Oracle Web服務(wù)管理器,確保了服務(wù)的安全性。系統(tǒng)總體架構(gòu)如圖1所示。
圖1 ESB架構(gòu)圖
本文中ESB為多個(gè)業(yè)務(wù)系統(tǒng)提供接入接出服務(wù),一個(gè)中間庫(kù)進(jìn)行數(shù)據(jù)庫(kù)適配。ESB實(shí)現(xiàn)服務(wù)的暴露及后臺(tái)系統(tǒng)的集成,針對(duì)輸入的服務(wù)消息進(jìn)行認(rèn)證、解析、路由、編排等操作調(diào)用服務(wù)提供方提供的服務(wù)。具體關(guān)系及接口協(xié)議如圖2所示。
圖2 ESB接口關(guān)系圖
ESB支持同步、異步、無(wú)響應(yīng)、訂閱分發(fā)等信息交換模式,在本系統(tǒng)中主要使用了同步、無(wú)響應(yīng)、分發(fā)的信息交換模式。
同步調(diào)用方式一般是請(qǐng)求方與服務(wù)方系統(tǒng)建立連接,發(fā)送請(qǐng)求內(nèi)容后等待服務(wù)方系統(tǒng)處理完畢后給出響應(yīng)。如圖3所示。
圖3 同步調(diào)用方式
同步調(diào)用方式一般是在同一個(gè)網(wǎng)絡(luò)連接里面完成,例如通過(guò)TCP同步短連接和HTTP都能簡(jiǎn)單實(shí)現(xiàn)系統(tǒng)間的同步調(diào)用機(jī)制,本系統(tǒng)中后臺(tái)服務(wù)及數(shù)據(jù)調(diào)用均采用同步調(diào)用方式。
無(wú)響應(yīng)調(diào)用方式是請(qǐng)求方發(fā)出請(qǐng)求消息后不再關(guān)心服務(wù)端是否處理成功的情況,直接釋放處理的進(jìn)程或是線(xiàn)程。如圖4所示。由于部分服務(wù)的調(diào)用場(chǎng)景請(qǐng)求方系統(tǒng)并不關(guān)心業(yè)務(wù)處理狀態(tài),本項(xiàng)目中一些簡(jiǎn)單消息通知采用此信息交換模式。
圖4 無(wú)響應(yīng)調(diào)用方式
ESB使用publish組件實(shí)現(xiàn)消息發(fā)布功能,實(shí)現(xiàn)一個(gè)消息向多個(gè)系統(tǒng)進(jìn)行廣播,本系統(tǒng)中更改通知功能采用此信息交換模式。
通訊協(xié)議默認(rèn)采用HTTPS或HTTP,編碼格式為UTF-8,數(shù)據(jù)使用JSON傳輸。服務(wù)調(diào)用方需要實(shí)現(xiàn)超時(shí)的控制機(jī)制,當(dāng)超過(guò)設(shè)定的時(shí)間ESB仍然沒(méi)有返回,服務(wù)調(diào)用方系統(tǒng)可以進(jìn)入異常流程。通訊過(guò)程中數(shù)據(jù)提交方式默認(rèn)采用POST方式,訪(fǎng)問(wèn)方式為: http://(esb.ip:port)/esb/proxyservice請(qǐng)求示例:
{
"method": "login",
"param": {
"userid": "0001",
"systemname": "PORTAL",
"password":"******"
"verifycode":"123321"
}
}
返回示例:返回信息以json形式打包,其中code表示返回信息狀態(tài),message為錯(cuò)誤信息,message內(nèi)容是在請(qǐng)求錯(cuò)誤的情況的提示信息,data為數(shù)據(jù)信息。請(qǐng)求正常返回"code"為1, "message"為"",data為返回?cái)?shù)據(jù)(只返回處理結(jié)果,無(wú)需返回?cái)?shù)據(jù)的操作,如注銷(xiāo)登錄,data為"");請(qǐng)求錯(cuò)誤返回"code"為0, "message"為錯(cuò)誤提示,data為""。
{
"code":1,
"message“:"",
"data": {
"id":"1012",
"username":"張三",
"userid":"10001",
"department":"信息中心",
"position":"副主任"
"token":"3e286f3324098342ce28"
}
}
登錄Service Bus 控制臺(tái),對(duì)每個(gè)應(yīng)用系統(tǒng)分別創(chuàng)建BusinesService用于存儲(chǔ)業(yè)務(wù)服務(wù),ProService用于存儲(chǔ)代理服務(wù)和管道。
本項(xiàng)目ESB開(kāi)發(fā)主要使用三種處理方式:服務(wù)直連、格式轉(zhuǎn)換、數(shù)據(jù)分發(fā)。
服務(wù)直連:服務(wù)調(diào)用方與提供方不需要協(xié)議、格式轉(zhuǎn)換,ESB需要?jiǎng)?chuàng)建業(yè)務(wù)服務(wù)、代理服務(wù)、進(jìn)行管道配置。
格式轉(zhuǎn)換:服務(wù)調(diào)用方與提供方協(xié)議或格式不同,ESB需要?jiǎng)?chuàng)建業(yè)務(wù)服務(wù)、代理服務(wù)、進(jìn)行管道配置、格式或協(xié)議轉(zhuǎn)換。
數(shù)據(jù)分發(fā):一個(gè)服務(wù)調(diào)用方需要分發(fā)數(shù)據(jù)到多個(gè)服務(wù)提供方,ESB需要?jiǎng)?chuàng)建業(yè)務(wù)服務(wù)、代理服務(wù)、進(jìn)行管道配置、格式或協(xié)議轉(zhuǎn)換、數(shù)據(jù)分發(fā)。
ESB使用角色控制策略對(duì)訪(fǎng)問(wèn)服務(wù)進(jìn)行傳輸訪(fǎng)問(wèn)控制,驗(yàn)證方式使用BASIC驗(yàn)證,ESB根據(jù)訪(fǎng)問(wèn)內(nèi)容向各業(yè)務(wù)系統(tǒng)分配不同權(quán)限角色的賬戶(hù)及口令,各業(yè)務(wù)系統(tǒng)在傳輸數(shù)據(jù)的同時(shí)需要將分配的賬戶(hù)及口令用”username:password”合并,并將合并后的字符串用BASE64編碼,組合成字符串“Basic (賬戶(hù)及口令BASE64編碼)”,于每次請(qǐng)求數(shù)據(jù)時(shí),將字符串附加于請(qǐng)求頭(Request Header)中。ESB在每次收到請(qǐng)求包后,根據(jù)協(xié)議取得客戶(hù)端附加的用戶(hù)信息(BASE64編碼的用戶(hù)名和密碼),解開(kāi)請(qǐng)求包,對(duì)用戶(hù)名及密碼進(jìn)行驗(yàn)證,如果用戶(hù)名及密碼正確,則根據(jù)客戶(hù)端請(qǐng)求,返回客戶(hù)端所需要的數(shù)據(jù),否則返回錯(cuò)誤代碼或重新要求客戶(hù)端提供用戶(hù)名及密碼。
企業(yè)服務(wù)總線(xiàn)平臺(tái)的構(gòu)建,有效地支撐了各業(yè)務(wù)環(huán)節(jié)業(yè)務(wù)運(yùn)作的共享、協(xié)同與整合。同時(shí)兼容未來(lái)建設(shè)的信息化系統(tǒng),根據(jù)相應(yīng)標(biāo)準(zhǔn)規(guī)范,能夠納入到整個(gè)技術(shù)體系之中,無(wú)需重復(fù)建設(shè),能夠?yàn)橛脩?hù)節(jié)約IT投資。在支撐服務(wù)的設(shè)計(jì)上遵循了高內(nèi)聚、低耦合的設(shè)計(jì)原則,服務(wù)之間可靈活協(xié)同工作,達(dá)到了整個(gè)架構(gòu)可擴(kuò)展、可重用性等目的。