IBM? 面向服務(wù)體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)編程模型使非程序員可以創(chuàng)建和重用 IT 資產(chǎn),而不需要掌握 IT 技能。該模型包括組件類型,布線,模板,應(yīng)用程序適配器,統(tǒng)一數(shù)據(jù)表示和企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)。本文是系列文章的第一部分,該系列文章介紹了 IBM SOA 編程模型,選擇、開發(fā)、部署工作所需的內(nèi)容,以及建議的編程模型元素。本文陳述的內(nèi)容考慮了使用該模型的開發(fā)人員可能具備不同的技術(shù)水平和工作角色。
SOA 編程模型系列
對(duì)于任何獨(dú)立程序員來(lái)說(shuō),有效的掌握和應(yīng)用飛速增長(zhǎng)的軟件技術(shù)、實(shí)踐、工具和平臺(tái),變得越來(lái)越困難,當(dāng)然更不用說(shuō)非程序員了。然而,如果業(yè)務(wù)流程轉(zhuǎn)換能夠成功進(jìn)行,很多的非程序員就可以使用現(xiàn)有的 IT 資產(chǎn)來(lái)進(jìn)行他們的工作,而不用去學(xué)習(xí)繁瑣的底層技術(shù)細(xì)節(jié)。本系列文章描述了一個(gè)新的面向服務(wù)體系結(jié)構(gòu)(SOA)編程模型,該模型實(shí)現(xiàn)了業(yè)務(wù)關(guān)系的分離,因此企業(yè)中具備不同技術(shù)水平和工作角色的人,即使不是專業(yè)的 IT 人員,也可以在軟件開發(fā)生命周期每個(gè)階段創(chuàng)建和使用 IT 資產(chǎn)。這可以顯著提高隨需應(yīng)變企業(yè)的業(yè)務(wù)靈活性。
引言
IBM 產(chǎn)品逐漸應(yīng)用了 SOA 和編程模型。程序員構(gòu)建服務(wù)、使用服務(wù),并且開發(fā)聚集服務(wù)的解決方案。我們?cè)谶@里使用"程序員(programmer)"這個(gè)泛稱,因?yàn)?SOA 編程模型的一個(gè)關(guān)鍵方面是將"編程"的概念擴(kuò)展到非傳統(tǒng)開發(fā)人員的工作角色和技能,比如業(yè)務(wù)分析員和腳本語(yǔ)言用戶。
大多數(shù)關(guān)于 Web 服務(wù)的文章主要集中在服務(wù)接口和這些接口的使用方面。為了補(bǔ)充接口標(biāo)準(zhǔn)和最佳實(shí)踐,IBM 引入了一個(gè)編程模型,來(lái)實(shí)現(xiàn)服務(wù)并將它們組合為解決方案。擴(kuò)展 IBM 軟件平臺(tái)的范圍,使之能夠被更多的用戶團(tuán)體使用 -- 包括非傳統(tǒng)的開發(fā)人員 -- 這個(gè)模型提供了新的組件類型與用戶的角色、目標(biāo)、技能和概念框架相匹配。這些組件類型使更直觀的開發(fā)工具可以使用。另一個(gè)主要的主題是通過編程模型特性和功能的逐步透明化來(lái)增強(qiáng)可使用性。
這是關(guān)于 SOA 編程模型系列文章中的第一篇,特別針對(duì)軟件開發(fā)專業(yè)人員。在本系列中,我們介紹了實(shí)現(xiàn)這些目標(biāo)的一些新的編程模型元素。我們介紹了如何利用它們來(lái)使您選擇、開發(fā)、建議或管理的軟件能夠更加容易的開發(fā)、重用和消費(fèi)。將軟件構(gòu)造為服務(wù)對(duì)于按需的企業(yè)來(lái)說(shuō)更加有價(jià)值,因?yàn)椴痪邆涮嗉寄艿拈_發(fā)人員可以將其"接入"到解決方案中,或者編入一個(gè)業(yè)務(wù)流程編排流中來(lái)滿足快速變更的業(yè)務(wù)需求。不管你是大型企業(yè)或者小型業(yè)務(wù)的開發(fā)人員、獨(dú)立軟件供應(yīng)商(ISV),還是應(yīng)用程序提供者或者中間件供應(yīng)商,你都可以通過這種方式構(gòu)造你的軟件,從而從中受益。那么,讓我們立即開始應(yīng)用 SOA 原理。
SOA 編程模型的亮點(diǎn)
讓我們首先重點(diǎn)介紹 SOA 編程模型的幾個(gè)主要特性。
服務(wù)數(shù)據(jù)對(duì)象(SDO)是 IBM SOA 中的一個(gè)基礎(chǔ)概念。SDO 大大提高了開發(fā)人員的生產(chǎn)力,并且將你從如何訪問特定后端數(shù)據(jù)源、應(yīng)用程序和服務(wù)的技術(shù)細(xì)節(jié)中解脫出來(lái)。它們提供了簡(jiǎn)化的抽象,使程序員可以更多的集中在業(yè)務(wù)邏輯上。SDO 還提供了統(tǒng)一的消息表示來(lái)與服務(wù)交互,淘汰了用于數(shù)據(jù)表示的復(fù)雜技術(shù)迷宮,僅僅訪問單個(gè)統(tǒng)一模型。
SOA 編程模型同樣需要統(tǒng)一的范型來(lái)創(chuàng)建和訪問業(yè)務(wù)邏輯。為了易于使用,服務(wù)應(yīng)該隱藏實(shí)現(xiàn)技術(shù)之間的差別,并應(yīng)該建立在比現(xiàn)有編程結(jié)構(gòu)(比如 Enterprise Java?Bean(EJB))更高級(jí)別的抽象上。服務(wù)可以通過組裝到模塊(這些模塊可以組成解決方案)中的組件來(lái)實(shí)現(xiàn)。通過組件公開的服務(wù)可以使用可定位的接口來(lái)調(diào)用。您可以使用 Web 服務(wù)描述語(yǔ)言(WSDL)、Java 或其他語(yǔ)言來(lái)描述接口。這個(gè)實(shí)現(xiàn)類型可以有對(duì)所需服務(wù)的待定引用,在將組件結(jié)合在一起執(zhí)行之前,這些服務(wù)是滿足需求的。
這個(gè)編程模型還引入了良好定義的組件類型,對(duì)程序員開發(fā)和部署到解決方案中的常用構(gòu)件建模。例子包括"無(wú)格式舊 Java 對(duì)象"、業(yè)務(wù)流程執(zhí)行語(yǔ)言(BPEL)流程、結(jié)構(gòu)化查詢語(yǔ)言(SQL)服務(wù)、Adaptive Business Objects、通過 Java 連接器體系結(jié)構(gòu)(J2C)資源適配器訪問的 CICS?程序、使用 SAP 業(yè)務(wù)應(yīng)用程序編程接口的應(yīng)用程序、Java 2 Enterprise Edition(J2EE)無(wú)狀態(tài)會(huì)話 bean 和 MQSeries? 應(yīng)用程序。
企業(yè)服務(wù)總線是多協(xié)議結(jié)構(gòu)的一個(gè)關(guān)鍵角色,將服務(wù)組件編成無(wú)縫的交互,通過在消息路徑中加入被稱為中介的特別組件,來(lái)代理服務(wù)間的交互,而不用更改現(xiàn)有的端點(diǎn),從而允許在核心級(jí)別上處理企業(yè)關(guān)注的內(nèi)容 -- 比如審核、日志、路由、不匹配接口的適配、等價(jià)組件的增量替換、安全等。
新的流程語(yǔ)言縮小了 IT 概念和業(yè)務(wù)構(gòu)件之間的間隙。很重要的一個(gè)是 BPEL。雖然流程可以通過業(yè)務(wù)分析員引入圖形化工具來(lái)定義,但它也是一個(gè)可執(zhí)行程序。流程在按需業(yè)務(wù)轉(zhuǎn)換中占有重要的地位,例如為擴(kuò)展價(jià)值鏈描述長(zhǎng)時(shí)間運(yùn)行的可執(zhí)行流程。通過擴(kuò)展價(jià)值鏈,我們可以跨越多個(gè)供應(yīng)商和 IT 域來(lái)進(jìn)行業(yè)務(wù)安排,比如一個(gè)零售商和他的多個(gè)獨(dú)立的供應(yīng)商,保險(xiǎn)公司及其眾多的第三方理賠員,IT 外購(gòu)狀況等。
業(yè)務(wù)狀態(tài)機(jī)(business state machine)是業(yè)務(wù)分析師可以通過圖形工具創(chuàng)建流程的另一個(gè)編程框架,并且在流程設(shè)計(jì)引擎中執(zhí)行。狀態(tài)機(jī)可以表示業(yè)務(wù)構(gòu)件 -- 比如采購(gòu)單、保險(xiǎn)索賠等 -- 這些轉(zhuǎn)換通過一些良好定義的狀態(tài)來(lái)響應(yīng)特定的生命周期"事件"。
需要重用的組件可以封裝為具有可變店(points of variability)的模板,可以在放入解決方案中時(shí)進(jìn)行設(shè)計(jì)。這種適配成為我們的編程模型的第一部分,同時(shí)結(jié)合規(guī)則語(yǔ)言和相關(guān)的工具,為新型用戶提供定制的能力。
另一個(gè)創(chuàng)新領(lǐng)域是新的解決方案模型,它讓部署者、管理者和其它業(yè)務(wù)用戶可以將組件組裝成解決方案。在開發(fā)的時(shí)候,你可以將服務(wù)實(shí)現(xiàn)與托管服務(wù)的拓?fù)洌ㄏ到y(tǒng)架構(gòu)師建模的部署拓?fù)洌╆P(guān)聯(lián)在一起。模型捕捉的系統(tǒng)需求和環(huán)境假設(shè)在早期的實(shí)現(xiàn)中進(jìn)行校驗(yàn),降低了應(yīng)用程序生命周期的費(fèi)用,并且極大的提高了可靠性和可計(jì)賬性(accountability)。該模型的特性還包括現(xiàn)有應(yīng)用程序的后期綁定、數(shù)據(jù)轉(zhuǎn)換中介和適配器,可以通過企業(yè)服務(wù)總線來(lái)實(shí)現(xiàn)面向服務(wù)的交互。
總的來(lái)說(shuō),SOA 編程模型將開發(fā)和部署活動(dòng)分割為不同的階段,這些階段可以發(fā)生在不同的時(shí)間,并且可以通過不同的個(gè)人使用不同的技能來(lái)實(shí)現(xiàn)。這就產(chǎn)生了關(guān)系的分離,使軟件組件可以被重用。它也將軟件體驗(yàn)劃分為單獨(dú)用戶的業(yè)務(wù)角色、技能和任務(wù)。最終,它使軟件生命周期可以適應(yīng)按需企業(yè)的需要,因?yàn)樗鼈兺ㄟ^針對(duì)業(yè)務(wù)靈活性重新設(shè)計(jì) IT 流程來(lái)尋求更高的有效性。
編程模型的概念
編程模型通常是 IBM SOA 和 IBM 產(chǎn)品的核心。它定義了程序員可以構(gòu)建和使用的概念和抽象。運(yùn)行時(shí)產(chǎn)品,例如 WebSphere? Application Server,DB2?和 CICS,可以運(yùn)行或托管編程模型構(gòu)件。開發(fā)工具支持編程模型構(gòu)件的建模和實(shí)現(xiàn)、組裝到應(yīng)用程序(解決方案),以及部署到運(yùn)行時(shí)環(huán)境中。最后,系統(tǒng)管理產(chǎn)品、代理和設(shè)備支持對(duì)運(yùn)行時(shí)和它們托管的編程模型構(gòu)件的管理。
編程模型是什么?雖然目前沒有公認(rèn)的一般定義,但我們喜歡將它定義為:
- 程序員構(gòu)建的一套部件類型。部件類型包括多種編程模型構(gòu)件:超文本標(biāo)記語(yǔ)言(HTML)文件、數(shù)據(jù)庫(kù)存儲(chǔ)過程、Java 類、可擴(kuò)展標(biāo)記語(yǔ)言(XML)Schema 定義、定義 MQSeries 消息的 C 結(jié)構(gòu),等等。
- 一系列角色,將具備相似技能和知識(shí)的開發(fā)和管理人員分組。用這種方式對(duì)開發(fā)人員分類有助于生產(chǎn)適應(yīng)于角色的工具,使非程序員可以實(shí)現(xiàn)服務(wù)并將服務(wù)組裝為解決方案。業(yè)務(wù)分析人員定義業(yè)務(wù)流程,銷售專家定義顧客分類的策略并計(jì)算產(chǎn)品折扣。每一種角色包含:
- 角色所具備的技能。例如,用戶界面開發(fā)人員開發(fā)界面,用來(lái)呈現(xiàn)應(yīng)用程序或者解決方案的功能構(gòu)件。假設(shè)這個(gè)角色了解正在開發(fā)的應(yīng)用程序和它的業(yè)務(wù)目標(biāo),充分了解應(yīng)用程序的用戶及他們的任務(wù),精通一些用戶界面設(shè)計(jì)方法,能夠通過為每個(gè)任務(wù)選擇恰當(dāng)?shù)念愋蛠?lái)創(chuàng)建易于使用的用戶接口。
- 角色交互(消費(fèi)或者生產(chǎn))所用的部件類型和應(yīng)用程序接口。例如,動(dòng)態(tài)頁(yè)面設(shè)計(jì)人員 -- 角色 -- 生產(chǎn) JavaServer Page(JSP)并消費(fèi) EJB -- 部件類型 -- 包裝現(xiàn)有的信息資源和應(yīng)用程序。
- 角色使用的工具。例如,Web 開發(fā)人員所用的適合于角色的工具是所見即所得的頁(yè)面設(shè)計(jì)工具,用來(lái)構(gòu)建動(dòng)態(tài)頁(yè)面,使用與 HTML 和 JSP 標(biāo)簽庫(kù)相關(guān)的控件,并將控件連接到 EJB。
使 Web 服務(wù)易于實(shí)現(xiàn)和使用的關(guān)鍵是對(duì)現(xiàn)有技術(shù)和知識(shí)進(jìn)行增量擴(kuò)展,從而使 SOA 可以被消費(fèi)。以 CICS COBOL 事務(wù)程序形式存在的服務(wù)與用 BPEL 編寫的服務(wù)差別很大。從數(shù)據(jù)庫(kù)存儲(chǔ)過程中調(diào)用服務(wù)與從 JSP 中調(diào)用也是不同的;技能和期望值是不同的。通過提供工具的分類來(lái)使部件類型適應(yīng)于各種技能,并適應(yīng)于開發(fā)流程的階段,你可以實(shí)現(xiàn)可消費(fèi)性(consumability)。
本系列的后續(xù)文章更加詳細(xì)的介紹了 SOA 編程模型的部件類型。
產(chǎn)品架構(gòu)
圖 1. 產(chǎn)品架構(gòu)
支持 IBM SOA 方案的產(chǎn)品分成兩個(gè)主要類別:服務(wù)端點(diǎn)和連接它們的消息傳送結(jié)構(gòu)。這個(gè)通用的架構(gòu) -- 包含了許多產(chǎn)品,這些產(chǎn)品都不是 IBM SOA 的專用傳輸工具 -- 如圖 1 所示。
核心是服務(wù)間的 ESB 提供的連通性。ESB 是多協(xié)議的,支持點(diǎn)到點(diǎn)和發(fā)布-訂閱兩種通信類型,并支持快速處理消息的中介服務(wù)。IBM WebSphere MQ,IBM WebSphere MQ Integrator Broker 以及支持 Web 服務(wù)和 Java 消息服務(wù)(JMS)的 WebSphere 都屬于第一個(gè)類別。
服務(wù)存在于抽象的托管環(huán)境(容器)中,并且提供了特定的編程框架。容器加載服務(wù)的實(shí)現(xiàn)代碼,提供到 ESB 的連接性,并管理服務(wù)實(shí)例。不同類型的服務(wù)存在于不同的容器中。(在典型的遞規(guī)設(shè)計(jì)的例子中,ESB 本身被認(rèn)為是用于中介服務(wù)的容器。)表 1 列出了一些主要的 IBM SOA 托管環(huán)境和托管的組件類型。
表 1. 托管各種組件和服務(wù)類型的容器
服務(wù)/組件類型
|
容器
|
用 COBOL、PL/1 和其他語(yǔ)言編寫的事務(wù)處理程序 |
CICS 或者 IMS(信息管理系統(tǒng) -- 一種企業(yè)事務(wù)處理系統(tǒng))。程序員可以使用 SOAP/HTTP、WebSphere MQ 和 J2EE J2C 連接來(lái)訪問服務(wù)。 |
業(yè)務(wù)流程編排 |
WebSphere Business Integration Server Foundation。該容器支持長(zhǎng)期存在的工作流,這些工作流實(shí)現(xiàn)了 Web 服務(wù)接口并調(diào)用其他 Web 服務(wù)上的操作。它同樣支持長(zhǎng)期運(yùn)行的業(yè)務(wù)活動(dòng)事務(wù)。 |
應(yīng)用程序適配器 -- 為現(xiàn)有的應(yīng)用程序和系統(tǒng)提供 SOA/Web 服務(wù)的會(huì)話虛包(facade)。 |
WebSphere Business Integration Server Foundation 提供的應(yīng)用程序適配器容器。適配器在 SOA 協(xié)議和格式,以及現(xiàn)有應(yīng)用程序和系統(tǒng)的協(xié)議和格式之間進(jìn)行轉(zhuǎn)換。例如,SAP 適配器將 SOA 編碼并通過 HTTP 傳輸?shù)?XML 轉(zhuǎn)換到 SAP 的現(xiàn)有業(yè)務(wù)應(yīng)用程序編程接口格式和 Remote Function Call(RFC)。 |
預(yù)定義的 SQL 查詢、XML 查詢或數(shù)據(jù)庫(kù)存儲(chǔ)過程實(shí)現(xiàn)的服務(wù) |
DB2 結(jié)合 WebSphere Application Server。查詢的參數(shù)來(lái)自 SOA 操作的輸入消息以及提供輸出消息的結(jié)果。 |
使用 Java 類和 EJB 實(shí)現(xiàn)的服務(wù)。 |
WebSphere Application Server。 |
結(jié)束語(yǔ)
IBM SOA 編程模型系列文章的第一篇概述了 IBM 工具和產(chǎn)品如何適用于模型,以及開發(fā)人員如何有效的在應(yīng)用程序開發(fā)中使用它。
- 使用 SDO 簡(jiǎn)化數(shù)據(jù)訪問
- 服務(wù)定義以及組件模型發(fā)展?fàn)顩r的介紹
- 用組件類型來(lái)簡(jiǎn)化開發(fā)
- 基本組件類型
- 服務(wù)組合和定制
- 流程組件:BPEL 和業(yè)務(wù)狀態(tài)機(jī)
- 定制服務(wù):設(shè)計(jì)模式,模板和可變點(diǎn)
- 面向服務(wù)的用戶接口
- 用于管理的 SOA 方法
- SOA 軟件生命周期開發(fā)工具
- SOA 的安全性