成都公司:成都市成華區(qū)建設南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓
當前位置:工程項目OA系統(tǒng) > 泛普各地 > 浙江OA系統(tǒng) > 杭州OA系統(tǒng) > 杭州OA行業(yè)資訊
基于SOA的體系架構設計
當我在為全球酒店在線預訂系統(tǒng)做架構設計時,我發(fā)現(xiàn)一個頭疼的問題是如何保證系統(tǒng)與分布在全球各地的酒店之間完成消息的交互?
一個妥協(xié)的辦法是,我們?yōu)榫频旯芾碚咛峁┕芾砉δ苋肟?,管理人員可以將酒店的客房及客房類型的數(shù)據(jù)輸入到系統(tǒng)的數(shù)據(jù)庫中。發(fā)布到在線預訂系統(tǒng)中的客房數(shù)據(jù)必須是預留的,如此方可以避免在線預訂者與酒店本身顧客對于客房資源的爭用。
客房資源雖然得到了妥善的安排,但造成的問題是客房可能會被閑置,從而造成資源的浪費。例如,某酒店為在線預訂系統(tǒng)預留了50間客房。為了保證在線預訂系統(tǒng)的顧客可以順利地預訂到合適的客房,這50間客房不允許非在線預訂者預訂。假設整個酒店共有200間客房,如果150間客房均已入住了顧客,那么即使酒店還空著這50間客房,對于那些實際到酒店訂房的客人而言,酒店的大堂經(jīng)理也只能抱歉地說客滿了。
我們當然可以及時地更新這些數(shù)據(jù),然而這會給管理員帶來工作上的負擔??紤]全球時區(qū)不同的情況,有可能每個酒店的管理員都需要24小時的值守。

最好的辦法當然是讓各個酒店的數(shù)據(jù)與在線預訂系統(tǒng)的數(shù)據(jù)實現(xiàn)共享。然而這會帶來三個問題:
1、全球的酒店系統(tǒng)需要定義統(tǒng)一的接口標準;
2、如何保障酒店數(shù)據(jù)訪問的安全性?
3、全球的各個酒店可能會使用不同的系統(tǒng),如何保障它們與在線預訂系統(tǒng)之間的互操作性?
SOA可以使得這些問題迎刃而解。雖然我們很難要求全球的酒店系統(tǒng)都遵循統(tǒng)一的酒店接口標準,但鑒于酒店的行業(yè)特征,定義統(tǒng)一的服務契約(ServiceContract)是完全可行的。當然,我們首先需要解決消息的定義,如此我們就可以定義如下的服務契約:
[ServiceContract]
以下是引用片段:
ReservationResponseReserve(ReservationRequestrequest);
自從WebService誕生以來,對于WebService安全性的討論就沒有停止過。例如Microsoft推出的WSE。.NET3.0下的WCF則完全支持WS-Security、WS-Trust和WS-SecureConversation等安全策略。如果再考慮用戶的權限控制,以及WAN和LAN的防火墻配置,數(shù)據(jù)訪問的安全性可以得到較好的保證。
SOA本身就是為互操作性(interoperability)而生的,這也正是SOA的最大價值體現(xiàn)。只要提供了WebService,我們就可以通過WCF調(diào)用這些服務。如果有的系統(tǒng)無法提供WebService,例如RPG和COBOL,我們可以通過HostIntegrationServer(HIS),使得應用程序接口能夠實現(xiàn).NETWebService。
用戶可以通過PC、laptop或者PDA訪問在防火墻保護下的酒店在線預訂系統(tǒng),查詢/預訂/退訂房間。系統(tǒng)通過WCF技術跨應用程序地訪問各個酒店提供的WebService。這些酒店系統(tǒng)分布在世界各地,它們實現(xiàn)WebService的方式可能是WCF、WebSphere,也可能通過HostIntegrationServer實現(xiàn)。這些WebService都遵守一個共同的服務契約,并被定義為統(tǒng)一的服務接口。
為了定義與管理酒店的業(yè)務流程與工作流,系統(tǒng)還必須部署B(yǎng)izTalkServer。此外,該服務器還要負責管理事務,處理異常消息的傳遞。
沒有SOA和WebService,要實現(xiàn)這樣的全球酒店在線預訂系統(tǒng)是很難想象的,特別是新設計的在線預訂系統(tǒng)還必須考慮兼容舊有的酒店系統(tǒng)。此外,我們不能奢望酒店的預訂服務流程是一成不變的,利用SOA,可以很好地隔離服務的提供者與調(diào)用者之間的依賴,實現(xiàn)系統(tǒng)的松散耦合。只要在設計中遵循了“服務是自治的”這一原則,并且能夠較好地定義服務的邊界,即使服務的實現(xiàn)發(fā)生了變化,對于整個系統(tǒng)而言,也不會嚴重到傷筋動骨的地步。重要的是,我們必須改變系統(tǒng)設計的思路與精神,利用面向服務而非面向對象的方式來考慮架構的整體設計。

