基于SOA的体系架构设计
當我在為全球酒店在線預訂系統做架構設計時,我發現一個頭疼的問題是如何保證系統與分布在全球各地的酒店之間完成消息的交互?
一個妥協的辦法是,我們為酒店管理者提供管理功能入口,管理人員可以將酒店的客房及客房類型的數據輸入到系統的數據庫中。發布到在線預訂系統中的客房數據必須是預留的,如此方可以避免在線預訂者與酒店本身顧客對于客房資源的爭用。
客房資源雖然得到了妥善的安排,但造成的問題是客房可能會被閑置,從而造成資源的浪費。例如,某酒店為在線預訂系統預留了50間客房。為了保證在線預訂系統的顧客可以順利地預訂到合適的客房,這50間客房不允許非在線預訂者預訂。假設整個酒店共有200間客房,如果150間客房均已入住了顧客,那么即使酒店還空著這50間客房,對于那些實際到酒店訂房的客人而言,酒店的大堂經理也只能抱歉地說客滿了。
我們當然可以及時地更新這些數據,然而這會給管理員帶來工作上的負擔。考慮全球時區不同的情況,有可能每個酒店的管理員都需要24小時的值守。
最好的辦法當然是讓各個酒店的數據與在線預訂系統的數據實現共享。然而這會帶來三個問題:
1、?全球的酒店系統需要定義統一的接口標準;
2、?如何保障酒店數據訪問的安全性?
3、?全球的各個酒店可能會使用不同的系統,如何保障它們與在線預訂系統之間的互操作性?
SOA可以使得這些問題迎刃而解。雖然我們很難要求全球的酒店系統都遵循統一的酒店接口標準,但鑒于酒店的行業特征,定義統一的服務契約(Service Contract)是完全可行的。當然,我們首先需要解決消息的定義,如此我們就可以定義如下的服務契約:
[ServiceContract]
ReservationResponse Reserve(ReservationRequest request) ;
自從Web Service誕生以來,對于Web Service安全性的討論就沒有停止過。例如Microsoft推出的WSE。.NET 3.0下的WCF則完全支持WS-Security、WS-Trust和WS-SecureConversation等安全策略。如果再考慮用戶的權限控制,以及WAN和LAN的防火墻配置,數據訪問的安全性可以得到較好的保證。
SOA本身就是為互操作性(interoperability)而生的,這也正是SOA的最大價值體現。只要提供了Web Service,我們就可以通過WCF調用這些服務。如果有的系統無法提供Web Service,例如RPG和COBOL,我們可以通過Host Integration Server(HIS),使得應用程序接口能夠實現.NET Web Service。
全球酒店在線預訂系統的體系架構圖如圖1所示:
?
圖1 全球酒店在線預訂系統的體系架構圖
???
用戶可以通過PC、laptop或者PDA訪問在防火墻保護下的酒店在線預訂系統,查詢/預訂/退訂房間。系統通過WCF技術跨應用程序地訪問各個酒店提供的Web Service。這些酒店系統分布在世界各地,它們實現Web Service的方式可能是WCF、WebSphere,也可能通過Host Integration Server實現。這些Web Service都遵守一個共同的服務契約,并被定義為統一的服務接口。
為了定義與管理酒店的業務流程與工作流,系統還必須部署BizTalk Server。此外,該服務器還要負責管理事務,處理異常消息的傳遞。
沒有SOA和Web Service,要實現這樣的全球酒店在線預訂系統是很難想象的,特別是新設計的在線預訂系統還必須考慮兼容舊有的酒店系統。此外,我們不能奢望酒店的預訂服務流程是一成不變的,利用SOA,可以很好地隔離服務的提供者與調用者之間的依賴,實現系統的松散耦合。只要在設計中遵循了“服務是自治的”這一原則,并且能夠較好地定義服務的邊界,即使服務的實現發生了變化,對于整個系統而言,也不會嚴重到傷筋動骨的地步。重要的是,我們必須改變系統設計的思路與精神,利用面向服務而非面向對象的方式來考慮架構的整體設計。
轉載于:https://www.cnblogs.com/wayfarer/archive/2007/04/05/700679.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的基于SOA的体系架构设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我感恩
- 下一篇: Js+DVML:很酷实用的右键弹出菜单