【正文】
以調(diào)用的到的Web服務(wù),也就是把傳統(tǒng)的Session Facade模型轉(zhuǎn)化為了 EJB 的Web服務(wù)端點(diǎn),這樣,我們就可以向 Web 服務(wù)客戶提供粗粒度的服務(wù)。如果我們要在 J2EE的環(huán)境下(基于WebSphere)構(gòu)建Web服務(wù),Web 服務(wù)客戶可以通過兩種方式訪問 J2EE 應(yīng)用程序??蛻艨梢栽L問用 JAXRPC API 創(chuàng)建的 Web 服務(wù)(使用 Servlet 來實(shí)現(xiàn));Web 服務(wù)客戶也可以通過 EJB的服務(wù)端點(diǎn)接口訪問無狀態(tài)的Session Bean,但Web 服務(wù)客戶不能訪問其他類型的企業(yè)Bean,如有狀態(tài)的Session Bean,實(shí)體Bean和消息驅(qū)動Bean。后一種選擇(公開無狀態(tài) EJB 組件作為 Web 服務(wù))有很多優(yōu)勢,基于已有的EJB組件,我們可以利用現(xiàn)有的業(yè)務(wù)邏輯和流程。在許多企業(yè)中,現(xiàn)有的業(yè)務(wù)邏輯可能已經(jīng)使用 EJB 組件編寫,通過 Web 服務(wù)公開它可能是實(shí)現(xiàn)從外界訪問這些服務(wù)的最佳選擇。EJB 端點(diǎn)是一種很好的選擇,因?yàn)樗箻I(yè)務(wù)邏輯和端點(diǎn)位于同一層上。另外EJB容器會自動提供對并發(fā)的支持,作為無狀態(tài)Session Bean實(shí)現(xiàn)的 EJB 服務(wù)端點(diǎn)不必?fù)?dān)心多線程訪問,因?yàn)?EJB 容器必須串行化對無狀態(tài)會話 bean 任何特定實(shí)例的請求。 由于EJB容器都會提供對于Security和Transaction的支持,因此Bean的開發(fā)人員可以不需要編寫安全代碼以及事務(wù)處理代碼。 性能問題對于Web服務(wù)來說一直都是一個問題,由于幾乎所有 EJB 容器都提供了對無狀態(tài)會話 Bean 群集的支持以及對無狀態(tài)Session Bean 池與資源管理的支持,因此當(dāng)負(fù)載增加時,可以向群集中增加機(jī)器,Web 服務(wù)請求可以定向到這些不同的服務(wù)器,同時由于無狀態(tài)Session Bean 池改進(jìn)了資源利用和內(nèi)存管理,使 Web 服務(wù)能夠有效地響應(yīng)多個客戶請求。由此我們可以看到,通過把 Web 服務(wù)模型化為 EJB 端點(diǎn),可以使服務(wù)具有更強(qiáng)的可伸縮性,并增強(qiáng)了系統(tǒng)整體的可靠性。4. 結(jié)束語本文簡要介紹了有關(guān)架構(gòu)設(shè)計(jì)師以及SOA架構(gòu)的知識,分析了SOA架構(gòu)師在設(shè)計(jì)SOA系統(tǒng)架構(gòu)時有哪些應(yīng)該特別注意的地方。本文的第二部分將向您介紹在構(gòu)建基于SOA架構(gòu)的企業(yè)系統(tǒng)時應(yīng)該怎樣保證所構(gòu)建的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中不同的服務(wù)級別需求。從架構(gòu)設(shè)計(jì)師的角度,SOA是一種新的設(shè)計(jì)模式,方法學(xué)。因此,SOA本身涵蓋了很多的內(nèi)容,也觸及到了系統(tǒng)整體架構(gòu)設(shè)計(jì)、實(shí)現(xiàn)、維護(hù)等各個方面。本文的內(nèi)容只是涉及到了有關(guān)于架構(gòu)方面的一部分內(nèi)容,希望能對廣大的SOA系統(tǒng)開發(fā)設(shè)計(jì)人員起到一定的幫助作用。參考資料 1. Patterns: Serviceoriented Architecture and Web Services紅皮書,SG24630300,2004 年 4 月,作者M(jìn)ark Endrei 等。 2. DeveloperWorks 的SOA 和 Web 服務(wù)專區(qū)有大量專題文章以及關(guān)于開發(fā) Web 服務(wù)應(yīng)用程序的入門級、中級和高級教程。 3. 有關(guān)隨需應(yīng)變商務(wù)的更多信息,請參閱 Developer resources for an on demand world Web site 4. Web 服務(wù)項(xiàng)目角色 描述了 Web 服務(wù)開發(fā)項(xiàng)目中所涉及到的各種不同的工作角色,包括各自的目標(biāo),任務(wù)以及彼此之間是如何協(xié)作的。 5. 面向服務(wù)的分析與設(shè)計(jì)原理一文研究了OOAD、EA 和 BPM 中的適當(dāng)原理。 6. 企業(yè)服務(wù)總線解決方案剖析,第 1 部分 介紹了面向服務(wù)的體系結(jié)構(gòu)(serviceoriented architecture,SOA)和企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)的基本知識,ESB的技術(shù)沿革,以及ESB與SOA之間的關(guān)系。 關(guān)于作者王 強(qiáng),IBM軟件工程師,工作在IBM中國軟件開發(fā)實(shí)驗(yàn)室 SOA Design Center,從事Incubator及SOA,Grid項(xiàng)目的工作,對J2EE架構(gòu)、SOA架構(gòu)、MDA/MDD以及網(wǎng)格計(jì)算等技術(shù)有較深入的研究。聯(lián)系方式:wangq@ 架構(gòu)設(shè)計(jì)師與 SOA , 第 2 部分本系列的第 1 部分 介紹了有關(guān)架構(gòu)設(shè)計(jì)師以及 SOA 架構(gòu)的知識,分析了 SOA 架構(gòu)師在設(shè)計(jì) SOA 系統(tǒng)架構(gòu)時有哪些應(yīng)該特別注意的地方。本文將延續(xù)第一部分的內(nèi)容,向您介紹了 SOA 為企業(yè)級架構(gòu)設(shè)計(jì)帶來的影響,以及在構(gòu)建基于 SOA 架構(gòu)的企業(yè)系統(tǒng)時應(yīng)該怎樣保證所構(gòu)建的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中不同的服務(wù)級別需求。1. SOA 為企業(yè)級架構(gòu)設(shè)計(jì)帶來的影響1.1 SOA 的特點(diǎn)及其使用范圍SOA 既不是一種語言,也不是一種具體的技術(shù),它是一種新的軟件系統(tǒng)架構(gòu)模型。 SOA 最主要的應(yīng)用場合在于解決在Internet環(huán)境下的不同商業(yè)應(yīng)用之間的業(yè)務(wù)集成問題。Internet環(huán)境區(qū)別于Intranet環(huán)境的幾個特點(diǎn)主要是:(a)大量異構(gòu)系統(tǒng)并存,不同計(jì)算機(jī)硬件工作方式不同,操作系統(tǒng)不同、編程語言也不同;(b)大量、頻繁的數(shù)據(jù)傳輸?shù)乃俣热匀幌鄬^緩慢并且不穩(wěn)定;(c)無法完成服務(wù)(service)的版本升級,甚至根本就無法知道互聯(lián)網(wǎng)上有哪些機(jī)器直接或者間接的使用某個服務(wù)。SOA 架構(gòu)具有一些典型特性,主要包括松耦合性,位置透明性以及協(xié)議無關(guān)性。松耦合性要求 SOA 架構(gòu)中的不同服務(wù)之間應(yīng)該保持一種松耦合的關(guān)系,也就是應(yīng)該保持一種相對獨(dú)立無依賴的關(guān)系;位置透明性要求 SOA 系統(tǒng)中的所有服務(wù)對于他們的調(diào)用者來說都是位置透明的,也就是說每個服務(wù)的調(diào)用者只需要知道他們調(diào)用的是哪一個服務(wù),但并不需要知道所調(diào)用服務(wù)的物理位置在哪里;而協(xié)議無關(guān)性要求每一個服務(wù)都可以通過不同的協(xié)議來調(diào)用。通過這些 SOA 架構(gòu)所具有的特性我們可以看到,SOA 架構(gòu)的出現(xiàn)為企業(yè)系統(tǒng)架構(gòu)提供了更加靈活的構(gòu)建方式,如果企業(yè)架構(gòu)設(shè)計(jì)師基于 SOA 來構(gòu)建系統(tǒng)架構(gòu),就可以從底層架構(gòu)的級別來保證整個系統(tǒng)的松耦合性以及靈活性,這都為未來企業(yè)業(yè)務(wù)邏輯的擴(kuò)展打好了基礎(chǔ)。1.2 SOA 架構(gòu)的分層模型接下來簡要介紹一下 SOA 系統(tǒng)中的分層模型,整個 SOA 架構(gòu)的分層模型如圖2所示。在 SOA 系統(tǒng)中不同的功能模塊可以被分為7層:第一層就是系統(tǒng)已經(jīng)存在的程序資源,例如ERP或者CRM系統(tǒng)等。第2層就是組件層,在這一層中我們用不同的組件把底層系統(tǒng)的功能封裝起來。第3層就是 SOA 系統(tǒng)中最重要的服務(wù)層,在這層中我們要用底層功能組件來構(gòu)建我們所需要的不同功能的服務(wù)??偟膩碚f,SOA 中的服務(wù)可以被映射成具體系統(tǒng)中的任何功能模塊,但是從功能性方面可以大致劃分為以下三種類型:(1)商業(yè)服務(wù)(business service) 或者是商業(yè)過程(business process)。這一類的服務(wù)是一個企業(yè)可以暴露給外部用戶或者合作伙伴使用的服務(wù)。比如說提交貸款申請,用戶信用檢查,貸款信用查詢。(2)商業(yè)功能服務(wù)(business function service), 這類服務(wù)會完成一些具體的商業(yè)操作,也會被更上層的商業(yè)服務(wù)調(diào)用,不過大多數(shù)情況下這類服務(wù)不會暴露給外部用戶直接調(diào)用,比如說檢索用戶帳戶信息,存儲用戶信息等。(3)技術(shù)功能服務(wù)(technical function service),這類服務(wù)主要完成一些底層的技術(shù)功能,比如說日志服務(wù)以及安全服務(wù)等。在服務(wù)層之上的第4層就是商業(yè)流程層,在這一層中我們利用已經(jīng)封裝好的各種服務(wù)來構(gòu)建商業(yè)系統(tǒng)中的商業(yè)流程。在商業(yè)流程層之上的就是第5層表示層了,我們利用表示層來向用戶提供用戶接口服務(wù),這一層可以用基于portal的系統(tǒng)來構(gòu)建。以上這5層都需要有一個集成的環(huán)境來支持它們的運(yùn)行,第6層中的企業(yè)服務(wù)總線(ESB)提供了這個功能。第7層主要為整個 SOA 系統(tǒng)提供一些輔助的功能,例如服務(wù)質(zhì)量管理,安全管理這一類的輔助功能。2. SOA 架構(gòu)中的非功能性服務(wù)級別(servicelevel)需求除了系統(tǒng)的業(yè)務(wù)需求,架構(gòu)設(shè)計(jì)師還必須要保證構(gòu)建出來的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中的非功能性服務(wù)級別(servicelevel)需求以及服務(wù)質(zhì)量(QoS)方面的需求。在項(xiàng)目初始及細(xì)化階段,架構(gòu)設(shè)計(jì)師應(yīng)該與系統(tǒng)所有涉及方(Stakeholders)一起,為每一個服務(wù)級別需求定義其相關(guān)的衡量標(biāo)準(zhǔn)。構(gòu)建出的系統(tǒng)架構(gòu)必須要能滿足以下幾方面的服務(wù)水準(zhǔn)要求:性能、可升級性、可靠性、可用性、可擴(kuò)展性、可維護(hù)性、易管理性以及安全性。架構(gòu)設(shè)計(jì)師在設(shè)計(jì)架構(gòu)過程中需要平衡所有的這些服務(wù)級別需求。例如,如果服務(wù)級別需求中最重要的是系統(tǒng)性能,架構(gòu)設(shè)計(jì)師很有可能不得不在一定程度上犧牲系統(tǒng)的可維護(hù)性及可擴(kuò)展性,以確保滿足系統(tǒng)性能上的要求。隨著互聯(lián)網(wǎng)的發(fā)展,新構(gòu)建的系統(tǒng)對于服務(wù)級別需求也變得日益重要,現(xiàn)在基于互聯(lián)網(wǎng)的企業(yè)系統(tǒng)的用戶已經(jīng)不僅僅局限于是本企業(yè)的雇員,企業(yè)的外部客戶也會成為企業(yè)系統(tǒng)的主要用戶。 架構(gòu)設(shè)計(jì)師的職責(zé)之一就是要盡可能地為提高系統(tǒng)設(shè)計(jì)人員和系統(tǒng)開發(fā)人員的工作效率考慮。在構(gòu)建整個企業(yè)系統(tǒng)架構(gòu)的過程中,需要充分重視各種服務(wù)級別需求,從而避免在系統(tǒng)開發(fā)和運(yùn)行的時候出現(xiàn)重大問題。一個企業(yè)級系統(tǒng)中的服務(wù)級別需求往往是十分錯綜復(fù)雜的, SOA 架構(gòu)設(shè)計(jì)師需要憑借豐富的專業(yè)經(jīng)驗(yàn)和扎實(shí)的理論知識來分離和抽象系統(tǒng)中不同的服務(wù)級別需求,圖3展示了這種分析的過程。 圖3經(jīng)過 SOA 架構(gòu)設(shè)計(jì)師分析和抽象的服務(wù)級別需求主要分為以下幾類: 性能是指系統(tǒng)提供的服務(wù)要滿足一定的性能衡量標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)可能包括系統(tǒng)反應(yīng)時間以及處理交易量的能力等; 可升級性是指當(dāng)系統(tǒng)負(fù)荷加大時,能夠確保所需的服務(wù)質(zhì)量,而不需要更改整個系統(tǒng)的架構(gòu); 可靠性是指確保各應(yīng)用及其相關(guān)的所有交易的完整性和一致性的能力; 可用性是指一個系統(tǒng)應(yīng)確保一項(xiàng)服務(wù)或者資源永遠(yuǎn)都可以被訪問到; 可擴(kuò)展性是指在不影響現(xiàn)有系統(tǒng)功能的基礎(chǔ)上,為系統(tǒng)填加新的功能或修改現(xiàn)有功能的能力; 可維護(hù)性是指在不影響系統(tǒng)其他部分的情況下修正現(xiàn)有功能中問題或缺陷,并對整個系統(tǒng)進(jìn)行維護(hù)的能力; 可管理性是指管理系統(tǒng)以確保系統(tǒng)的可升級性、可靠性、可用性、性能和安全性的能力; 安全性是指確保系統(tǒng)安全不會被危及的能力。 1) 性能 我們通??梢愿鶕?jù)每個用戶訪問的系統(tǒng)響應(yīng)時間來衡量系統(tǒng)的整體性能;另外,我們也可以通過系統(tǒng)能夠處理的交易量(每秒)來衡量系統(tǒng)的性能。對于架構(gòu)設(shè)計(jì)師來說,無論采取哪種衡量系統(tǒng)性能的方法來構(gòu)建系統(tǒng)架構(gòu),這些對于性能的考慮對系統(tǒng)設(shè)計(jì)開發(fā)人員來說都應(yīng)該是透明的,也就是說對于系統(tǒng)整體架構(gòu)性能的考慮應(yīng)該是架構(gòu)設(shè)計(jì)師的工作,而不是系統(tǒng)設(shè)計(jì)開發(fā)人員應(yīng)該關(guān)注的事情。在較傳統(tǒng)的基于EJB或者XMLRPC的分布式計(jì)算模型中,它們的服務(wù)提供都是通過函數(shù)調(diào)用的方式進(jìn)行的,一個功能的完成往往需要通過客戶端和服務(wù)器來回很多