【正文】
的細粒度服務(wù)接口。而粗粒度服務(wù)接口保證了服務(wù)請求者將以一致的方式使用系統(tǒng)中所暴露出的服務(wù)。雖然面向服務(wù)的體系結(jié)構(gòu)( SOA)并不強制要求一定要使用粗粒度的服務(wù)接口,但是建議使用它們作為外部集成的接口。通常架構(gòu)設(shè)計師可以使用 BPEL 來創(chuàng)建由細粒度操作組成的業(yè)務(wù)流程的粗粒度的服務(wù)接口。 無狀態(tài)服務(wù)的設(shè)計 SOA 系統(tǒng)架構(gòu)中的具體服務(wù)應(yīng)該都是獨立的、自包含的請求,在實現(xiàn)這些服務(wù)的時候不需要前一個請求的狀態(tài),也就是說服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文和狀態(tài),即 SOA 架構(gòu)中的服務(wù)應(yīng)該是無狀態(tài)的服務(wù)。當某一個服務(wù)需要依賴時,我們最好把它定義成具體的業(yè)務(wù)流程( BPEL)。在服務(wù)的具體實現(xiàn)機制上,我們可以通過使用 EJB 組件來實現(xiàn)粗粒度的服務(wù)。我們通常會利用無狀態(tài)的 Session Bean 來實現(xiàn)具體的服務(wù),如果基于 Web Service 技術(shù),我們就可以將無狀態(tài)的Session Bean 暴露為外部用戶可以調(diào)用的到的 Web 服務(wù),也就是把傳統(tǒng)的 Session Facade 模型轉(zhuǎn)化為了 EJB 的 Web 服務(wù)端點,這樣,我們就可以向 Web 服務(wù)客戶提供粗粒度的服務(wù)。 如果我們要在 J2EE 的環(huán)境下(基于 WebSphere)構(gòu)建 Web 服務(wù), Web 服務(wù)客戶可以通過兩種方式訪問 J2EE 應(yīng)用程序??蛻艨梢栽L問用 JAXRPC API 創(chuàng)建的 Web 服務(wù)(使用 Servlet 來實現(xiàn));Web 服務(wù)客戶也可以通過 EJB 的服務(wù)端點接口訪問無狀態(tài)的 Session Bean,但 Web 服務(wù)客戶不能訪問其他類型的企業(yè) Bean,如有狀態(tài)的 Session Bean,實體 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ù)公開它可能是實現(xiàn)從外界訪問這些服務(wù)的最佳選擇。 EJB 端點是一種很好的選擇,因為它使業(yè)務(wù)邏輯和端點位于同一層上。另外 EJB 容器會自動提供對并發(fā)的支持,作為無狀態(tài) Session Bean實現(xiàn)的 EJB 服務(wù)端點不必擔(dān)心多線程訪問,因為 EJB 容器必須串行化對無狀態(tài)會話 bean 任何特定實例的請求。 由于 EJB 容器都會提供對于 Security 和 Transaction 的支持,因此 Bean 的開發(fā)人員可以不需要編寫安全代碼以及事務(wù)處理代碼。 性能問題對于 Web 服務(wù)來說一直都是一個問題,由于幾乎所有 EJB 容器都提供了對無狀態(tài)會話 Bean 群集的支持以及對無狀態(tài) Session Bean 池與資源管理的支持,因此當負載增加時,可以向群集中增加機器, Web 服務(wù)請求可以定向到這些不同的服務(wù)器,同時由于無狀態(tài) Session Bean 池改進了資源利用和內(nèi)存管理,使 Web 服務(wù)能夠有效地響應(yīng)多個客戶請求。由此我們可以看到,通過把 Web 服務(wù)模型化為 EJB 端點,可以使服務(wù)具有更強的可伸縮性,并增強了系統(tǒng)整體的可靠性。 4. 結(jié)束語 本文簡要介紹了有關(guān)架構(gòu)設(shè)計師以及 SOA 架構(gòu)的知識,分析了 SOA 架構(gòu)師在設(shè)計 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è)計師的 角度, SOA 是一種新的設(shè)計模式,方法學(xué)。因此, SOA 本身涵蓋了很多的內(nèi)容,也觸及到了系統(tǒng)整體架構(gòu)設(shè)計、實現(xiàn)、維護等各個方面。本文的內(nèi)容只是涉及到了有關(guān)于架構(gòu)方面的一部分內(nèi)容,希望能對廣大的 SOA 系統(tǒng)開發(fā)設(shè)計人員起到一定的幫助作用。 參考資料 1. Patterns: Serviceoriented Architecture and Web Services 紅皮書, SG24630300,2022 年 4 月,作者 Mark 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ù)項目角色 描述了 Web 服務(wù)開發(fā)項目中所涉 及到的各種不同的工作角色,包括各自的目標,任務(wù)以及彼此之間是如何協(xié)作的。 5. 面向服務(wù)的分析與設(shè)計原理 一文研究了 OOAD、 EA 和 BPM 中的適當原理。 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)于作者 王 強 ,IBM 軟件工程師,工作在 IBM 中國軟件開發(fā)實驗室 SOA Design Center,從事 Incubator及 SOA, Grid 項目的工作,對 J2EE 架構(gòu)、 SOA 架構(gòu)、 MDA/MDD 以及網(wǎng)格計算等技術(shù)有較深入的研究。聯(lián)系方式: 架構(gòu)設(shè)計師與 SOA , 第 2 部分 本系列的 第 1 部分 介紹了有關(guān)架構(gòu)設(shè)計師以及 SOA 架構(gòu)的知識,分析了 SOA 架構(gòu)師在設(shè)計 SOA 系統(tǒng)架構(gòu)時有哪些應(yīng)該特別注意的地方。本文將延續(xù)第一部分的內(nèi)容,向您介紹了 SOA 為企業(yè)級架構(gòu)設(shè)計帶來的影響,以及在構(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è)計帶來的影響 1. 1 SOA 的特點及其使用范圍 SOA 既不是一種語言,也不是一種具體的技術(shù),它是一種新的軟件系統(tǒng)架構(gòu)模型。 SOA 最主要的應(yīng)用場合在于解決在 Inter 環(huán)境下的不同商業(yè)應(yīng)用之間的業(yè)務(wù)集成問題。 Inter 環(huán)境區(qū)別于 Intra 環(huán)境的幾個特點主要是: (a)大量異構(gòu)系統(tǒng)并存,不同計算機硬件工作方式不同,操作系統(tǒng)不同、編 程語言也不同; (b)大量、頻繁的數(shù)據(jù)傳輸?shù)乃俣热匀幌鄬^緩慢并且不穩(wěn)定; (c)無法完成服務(wù)( service)的版本升級,甚至根本就無法知道互聯(lián)網(wǎng)上有哪些機器直接或者間接的使用某個服務(wù)。 SOA 架構(gòu)具有一些典型特性,主要包括松耦合性,位置透明性以及協(xié)議無關(guān)性。松耦合性要求 SOA 架構(gòu)中的不同服務(wù)之間應(yīng)該保持一種松耦合的關(guān)系,也就是應(yīng)該保持一種相對獨立無依賴的關(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è)計師基于 SOA 來構(gòu)建系統(tǒng)架構(gòu),就可以從底層架構(gòu)的級別來保證整個系統(tǒng)的松耦合性以及靈活性,這都為未來企業(yè)業(yè)務(wù)邏輯的擴展打好了基礎(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ù)。總的來說, 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)境來支持它們的運行,第 6 層中的企業(yè)服務(wù)總線( ESB)提供了這個功能。第 7 層主要為整個 SOA 系統(tǒng)提供一些輔助的功能,例如服務(wù)質(zhì)量管理,安全管理這一類的輔助功能。 2. SOA 架構(gòu)中的非功能性服務(wù)級別( servicelevel)需求 除了系統(tǒng)的業(yè)務(wù)需求,架構(gòu)設(shè)計師還必須要保證構(gòu)建出來的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中的非功能性服務(wù)級別( servicelevel)需求以及服務(wù)質(zhì)量( QoS)方面的需求。在項目初始及細化階段,架構(gòu)設(shè)計師應(yīng)該與系統(tǒng)所有涉及方( Stakeholders)一起,為每一個服務(wù)級別需求定義其相關(guān)的衡量標準。構(gòu)建出的系統(tǒng)架構(gòu)必須要能滿足以下幾方面的服務(wù)水準要求:性能、可升級性、可靠性、可用性、可擴展性、可維護性、易管理性以及安全性。架構(gòu)設(shè)計師在設(shè)計架構(gòu)過程中需要平衡所有的這些服務(wù)級別需求。例如,如果服務(wù)級別需求中最重要的是系統(tǒng)性 能,架構(gòu)設(shè)計師很有可能不得不在一定程度上犧牲系統(tǒng)的可維護性及可擴展性,以確保滿足系統(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è)計師的職責(zé)之一就是要盡可