szhswl
          宋針還的個(gè)人空間
          【導(dǎo)讀】Service-Oriented Architecture),即面向服務(wù)的架構(gòu),這是最近一兩年出現(xiàn)在各種技術(shù)期刊上最多的詞匯了。本文簡要介紹了有關(guān)架構(gòu)設(shè)計(jì)師以及SOA架構(gòu)的知識,分析了SOA架構(gòu)師在設(shè)計(jì)SOA系統(tǒng)架構(gòu)時(shí)有哪些應(yīng)該特別注意的地方。
           

          Service-Oriented Architecture),即面向服務(wù)的架構(gòu),這是最近一兩年出現(xiàn)在各種技術(shù)期刊上最多的詞匯了。現(xiàn)在有很多架構(gòu)設(shè)計(jì)師和設(shè)計(jì)開發(fā)人員簡單的把SOA和Web Services技術(shù)等同起來,認(rèn)為SOA就是Web Service的一種實(shí)現(xiàn)。本質(zhì)上來說,SOA體現(xiàn)的是一種新的系統(tǒng)架構(gòu),SOA的出現(xiàn),將為整個(gè)企業(yè)級軟件架構(gòu)設(shè)計(jì)帶來巨大的影響。

          1. 什么是架構(gòu)?什么是基于SOA的架構(gòu)?

          1.1 什么是架構(gòu)

          從架構(gòu)設(shè)計(jì)師的角度來看,架構(gòu)就是一套構(gòu)建系統(tǒng)的準(zhǔn)則。通過這套準(zhǔn)則,我們可以把一個(gè)復(fù)雜的系統(tǒng)劃分為一套更簡單的子系統(tǒng)的集合,這些子系統(tǒng)之間應(yīng)該保持相互獨(dú)立,并與整個(gè)系統(tǒng)保持一致。而且每一個(gè)子系統(tǒng)還可以繼續(xù)細(xì)分下去,從而構(gòu)成一個(gè)復(fù)雜的企業(yè)級架構(gòu)。

          當(dāng)一名架構(gòu)設(shè)計(jì)師在構(gòu)建某個(gè)企業(yè)級的軟件系統(tǒng)時(shí),除了要考慮這個(gè)系統(tǒng)的架構(gòu)以及其應(yīng)具有的功能行為以外,還要關(guān)注整個(gè)架構(gòu)的可用性,性能問題,容錯(cuò)能力,可重用性,安全性,擴(kuò)展性,可管理維護(hù)性,可靠性等各個(gè)相關(guān)方面。有的時(shí)候一名好的架構(gòu)設(shè)計(jì)師甚至還需要考慮所構(gòu)建的系統(tǒng)架構(gòu)是否合乎美學(xué)要求。由此我們可以看到,我們衡量一個(gè)好的架構(gòu)設(shè)計(jì)并不能只從功能角度出發(fā),還要考慮很多其他的因素,對任何一個(gè)方面的欠缺考慮都有可能為整個(gè)系統(tǒng)的構(gòu)建埋下隱患。

          1.2 什么是基于SOA的架構(gòu)

          SOA本身就是一種面向企業(yè)級服務(wù)的系統(tǒng)架構(gòu),簡單來說,SOA就是一種進(jìn)行系統(tǒng)開發(fā)的新的體系架構(gòu),在基于SOA架構(gòu)的系統(tǒng)中,具體應(yīng)用程序的功能是由一些松耦合并且具有統(tǒng)一接口定義方式的組件(也就是service)組合構(gòu)建起來的。因此,基于SOA的架構(gòu)也一定是從企業(yè)的具體需求開始構(gòu)建的。但是,SOA和其它企業(yè)架構(gòu)的不同之處就在于SOA提供的業(yè)務(wù)靈活性。業(yè)務(wù)靈活性是指企業(yè)能對業(yè)務(wù)變更快速和有效地進(jìn)行響應(yīng)、并且利用業(yè)務(wù)變更來得到競爭優(yōu)勢的能力。對企業(yè)級架構(gòu)設(shè)計(jì)師來說,創(chuàng)建一個(gè)業(yè)務(wù)靈活的架構(gòu)意味著創(chuàng)建一個(gè)可以滿足當(dāng)前還未知的業(yè)務(wù)需求的IT架構(gòu)。

          利用基于SOA的系統(tǒng)構(gòu)建方法,如圖1中所示的一樣,一個(gè)基于SOA架構(gòu)的系統(tǒng)中的所有的程序功能都被封裝在一些功能模塊中,我們就是利用這些已經(jīng)封裝好的功能模塊組裝構(gòu)建我們所需要的程序或者系統(tǒng),而這些功能模塊就是SOA架構(gòu)中的不同的服務(wù)(services)。



          圖1

          因此,SOA架構(gòu)本質(zhì)上來說體現(xiàn)了一種復(fù)合的概念:它不僅為一個(gè)企業(yè)中商業(yè)流程的組織和實(shí)現(xiàn)提供了一種指導(dǎo)模式,同時(shí)也為具體的底層service開發(fā)提供了指導(dǎo)。

          2. SOA架構(gòu)設(shè)計(jì)師的角色

          2.1 SOA架構(gòu)設(shè)計(jì)師應(yīng)該具備什么?

          談到SOA架構(gòu)設(shè)計(jì)師的角色,我們首先要了解架構(gòu)設(shè)計(jì)師應(yīng)具有的能力。總體上來說,一個(gè)好的架構(gòu)設(shè)計(jì)師不僅應(yīng)該是一個(gè)成熟的,具有實(shí)際經(jīng)驗(yàn)的并具有快速學(xué)習(xí)能力的人,而且他還應(yīng)該具有良好的管理能力和溝通能力。只有具備了必需的能力,架構(gòu)設(shè)計(jì)師才能在關(guān)鍵的時(shí)刻作出困難的決定,這就是一名架構(gòu)設(shè)計(jì)師應(yīng)該承擔(dān)的責(zé)任。從角色上來看,SOA 架構(gòu)師不僅會負(fù)責(zé)端到端的服務(wù)請求者和提供者的設(shè)計(jì),并且會負(fù)責(zé)對系統(tǒng)中非功能服務(wù)請求的調(diào)研和表述。

          對于任何一名經(jīng)驗(yàn)豐富的架構(gòu)設(shè)計(jì)師來說,不論他是采用基于傳統(tǒng)的架構(gòu)設(shè)計(jì)方法(基于J2EE架構(gòu)或者.NET架構(gòu))還是采用基于SOA的架構(gòu)設(shè)計(jì)方法來構(gòu)建一個(gè)企業(yè)級的系統(tǒng)架構(gòu),具有相關(guān)商業(yè)領(lǐng)域的知識對于架構(gòu)設(shè)計(jì)師來說都是必不可少的,架構(gòu)設(shè)計(jì)師往往可以通過實(shí)際的工作經(jīng)驗(yàn)積累以及接受相關(guān)的專項(xiàng)培訓(xùn)來獲得這些商業(yè)領(lǐng)域的知識。除了具有相關(guān)商業(yè)領(lǐng)域的知識以外,一名合格的架構(gòu)設(shè)計(jì)師必須具有較廣泛的技術(shù)背景,這可能包括軟硬件,通信,安全等各個(gè)方面的知識。但這并不是意味著要成為一名架構(gòu)設(shè)計(jì)師就必須熟悉每一門具體技術(shù)的細(xì)節(jié),架構(gòu)設(shè)計(jì)師必須至少能對各種技術(shù)有一個(gè)整體上的了解,能夠熟知每種技術(shù)的特點(diǎn)以及優(yōu)缺點(diǎn),只有這樣架構(gòu)設(shè)計(jì)師才能在特定的應(yīng)用場景下正確地選擇各種技術(shù)來設(shè)計(jì)企業(yè)整體架構(gòu)。

          2.2 什么是SOA架構(gòu)設(shè)計(jì)師的職責(zé)?

          那什么是企業(yè)級SOA架構(gòu)設(shè)計(jì)師的具體角色呢?什么是SOA架構(gòu)設(shè)計(jì)師與設(shè)計(jì)和開發(fā)人員之間的差別呢?相信這些都是使大家最容易產(chǎn)生迷惑的問題。舉個(gè)實(shí)際的例子來說,當(dāng)構(gòu)建一個(gè)基于SOA架構(gòu)的系統(tǒng)的時(shí)候,針對一個(gè)具體的 service,系統(tǒng)設(shè)計(jì)人員主要應(yīng)該關(guān)注的是這個(gè)service能夠?yàn)橥獠坑脩籼峁┦裁礃拥姆?wù),也就是說系統(tǒng)設(shè)計(jì)人員關(guān)注的是這個(gè)service所提供的功能。而對于SOA架構(gòu)設(shè)計(jì)師來說,他們更關(guān)心的可能是當(dāng)有一千個(gè)用戶同時(shí)調(diào)用這個(gè) service的時(shí)候,什么會發(fā)生?也就是說架構(gòu)設(shè)計(jì)師關(guān)注的應(yīng)該是一些商業(yè)需求和服務(wù)級別(service-level)需求。所有的架構(gòu)設(shè)計(jì)師的角色都包含了在構(gòu)建一個(gè)系統(tǒng)的一開始就應(yīng)該盡量減少可能存在的技術(shù)風(fēng)險(xiǎn)。而技術(shù)風(fēng)險(xiǎn)一般指的是一切未知的、未經(jīng)證明的或未經(jīng)測試所帶來的風(fēng)險(xiǎn)。這些風(fēng)險(xiǎn)通常與服務(wù)級別(service-level)需求相關(guān),偶爾也會與企業(yè)具體的業(yè)務(wù)需求相關(guān)。無論是哪種類型的風(fēng)險(xiǎn),在項(xiàng)目初期設(shè)計(jì)整體系統(tǒng)架構(gòu)的過程中更易于發(fā)掘這些風(fēng)險(xiǎn),如果等到架構(gòu)實(shí)施時(shí)再發(fā)覺這些風(fēng)險(xiǎn),那么很可能會致使大量的開發(fā)人員等在那里,直到這些風(fēng)險(xiǎn)被妥善解決。如果進(jìn)一步的細(xì)化,我們可以看到SOA架構(gòu)設(shè)計(jì)師的主要任務(wù)包括對整個(gè)系統(tǒng)解決方案輪廓的構(gòu)建,需求分析,對體系結(jié)構(gòu)的整體決策,相關(guān)組件建模,相關(guān)操作建模,系統(tǒng)組件的邏輯和物理布局設(shè)計(jì)。

          作為SOA架構(gòu)設(shè)計(jì)師必須要能夠領(lǐng)導(dǎo)整個(gè)開發(fā)團(tuán)隊(duì),這樣才能保證設(shè)計(jì)和開發(fā)人員是按照構(gòu)建好的系統(tǒng)架構(gòu)來開發(fā)整個(gè)系統(tǒng)的,這一點(diǎn)十分的重要。這就要求一名架構(gòu)設(shè)計(jì)師不僅要有很好的技術(shù)洞察力,同時(shí)還要具有一定的項(xiàng)目管理和項(xiàng)目實(shí)施的能力。在系統(tǒng)開發(fā)的過程中,架構(gòu)設(shè)計(jì)師必須要有良好的溝通和表達(dá)能力,這就體現(xiàn)在由架構(gòu)設(shè)計(jì)師構(gòu)建的系統(tǒng)模型是否具有很好的可讀性和易理解性。如果由架構(gòu)設(shè)計(jì)師構(gòu)造出的系統(tǒng)模型不是很清晰的話,就可能會影響設(shè)計(jì)和開發(fā)人員對于整個(gè)系統(tǒng)架構(gòu)的理解。為了避免這種情況的出現(xiàn),定期由架構(gòu)設(shè)計(jì)師主持的開發(fā)團(tuán)隊(duì)內(nèi)部討論是十分重要的。

          3. 構(gòu)建SOA架構(gòu)時(shí)應(yīng)該注意的問題

          3.1 原有系統(tǒng)架構(gòu)中的集成需求

          當(dāng)架構(gòu)師基于SOA來構(gòu)建一個(gè)企業(yè)級的系統(tǒng)架構(gòu)的時(shí)候,一定要注意對原有系統(tǒng)架構(gòu)中的集成需求進(jìn)行細(xì)致的分析和整理。我們都知道,面向服務(wù)的體系結(jié)構(gòu)是當(dāng)前及未來應(yīng)用程序系統(tǒng)開發(fā)的重點(diǎn),面向服務(wù)的體系結(jié)構(gòu)本質(zhì)上來說是一種具有特殊性質(zhì)的體系結(jié)構(gòu),它由具有互操作性和位置透明的組件集成構(gòu)建并互連而成。基于SOA的企業(yè)系統(tǒng)架構(gòu)通常都是在現(xiàn)有系統(tǒng)架構(gòu)投資的基礎(chǔ)上發(fā)展起來的,我們并不需要徹底重新開發(fā)全部的子系統(tǒng);SOA可以通過利用當(dāng)前系統(tǒng)已有的資源(開發(fā)人員、軟件語言、硬件平臺、數(shù)據(jù)庫和應(yīng)用程序)來重復(fù)利用系統(tǒng)中現(xiàn)有的系統(tǒng)和資源。SOA是一種可適應(yīng)的、靈活的體系結(jié)構(gòu)類型,基于SOA構(gòu)建的系統(tǒng)架構(gòu)可以在系統(tǒng)的開發(fā)和維護(hù)中縮短產(chǎn)品上市時(shí)間,因而可以降低企業(yè)系統(tǒng)開發(fā)的成本和風(fēng)險(xiǎn)。因此,當(dāng)SOA架構(gòu)師遇到一個(gè)十分復(fù)雜的企業(yè)系統(tǒng)時(shí),首先考慮的應(yīng)該是如何重用已有的投資而不是替換遺留系統(tǒng),因?yàn)槿绻紤]到有限的預(yù)算,整體系統(tǒng)替換的成本是十分高昂的。

          當(dāng)SOA架構(gòu)師分析原有系統(tǒng)中的集成需求的時(shí)候,不應(yīng)該只限定為基于組件構(gòu)建的已有應(yīng)用程序的集成,真正的集成比這要寬泛得多。在分析和評估一個(gè)已有系統(tǒng)體系結(jié)構(gòu)的集成需求時(shí),我們必須考慮一些更加具體的集成的類型,這主要包括以下幾個(gè)方面:應(yīng)用程序集成的需求,終端用戶界面集成的需求,流程集成的需求以及已有系統(tǒng)信息集成的需求。當(dāng)SOA架構(gòu)師分析和評估現(xiàn)有系統(tǒng)中所有可能的集成需求的時(shí)候,我們可以發(fā)現(xiàn)實(shí)際上所有集成方式在任何種類的企業(yè)中都有一定程度的體現(xiàn)。針對不同的企業(yè)類型,這些集成方式可能是簡化的,或者沒有明確地進(jìn)行定義的。因而,SOA架構(gòu)師在著手設(shè)計(jì)新的體系結(jié)構(gòu)框架時(shí),必須要全面的考慮所有可能的集成需求。例如,在一些類型的企業(yè)系統(tǒng)環(huán)境中可能只有很少的數(shù)據(jù)源類型,因此,系統(tǒng)中對消息集成的需求就可能會很簡單,但在一些特定的系統(tǒng)中,例如航運(yùn)系統(tǒng)中的EDI(Electronic Data Interchange 電子數(shù)據(jù)交換)系統(tǒng),會有大量的電子數(shù)據(jù)交換處理的需求,因此也就會存在很多不同的數(shù)據(jù)源類型,在這種情況下整個(gè)系統(tǒng)對于消息數(shù)據(jù)的集成需求就會比較復(fù)雜。因此,如果SOA架構(gòu)師希望所構(gòu)建的系統(tǒng)架構(gòu)能夠隨著企業(yè)的成長和變化成功地繼續(xù)得以保持,則整個(gè)系統(tǒng)構(gòu)架中的集成功能就應(yīng)該由服務(wù)提供,而不是由特定的應(yīng)用程序來完成。

          3.2 服務(wù)粒度的控制以及無狀態(tài)服務(wù)的設(shè)計(jì)

          當(dāng)SOA架構(gòu)師構(gòu)建一個(gè)企業(yè)級的SOA系統(tǒng)架構(gòu)的時(shí)候,關(guān)于系統(tǒng)中最重要的元素,也就是SOA系統(tǒng)中的服務(wù)的構(gòu)建有兩點(diǎn)需要特別注意的地方:首先是對于服務(wù)粒度的控制,另外就是對于無狀態(tài)服務(wù)的設(shè)計(jì)。

          服務(wù)粒度的控制

          SOA系統(tǒng)中的服務(wù)粒度的控制是一項(xiàng)十分重要的設(shè)計(jì)任務(wù)。通常來說,對于將暴露在整個(gè)系統(tǒng)外部的服務(wù)推薦使用粗粒度的接口,而相對較細(xì)粒度的服務(wù)接口通常用于企業(yè)系統(tǒng)架構(gòu)的內(nèi)部。從技術(shù)上講,粗粒度的服務(wù)接口可能是一個(gè)特定服務(wù)的完整執(zhí)行,而細(xì)粒度的服務(wù)接口可能是實(shí)現(xiàn)這個(gè)粗粒度服務(wù)接口的具體的內(nèi)部操作。 舉個(gè)例子來說,對于一個(gè)基于SOA架構(gòu)的網(wǎng)上商店來說,粗粒度的服務(wù)可能就是暴露給外部用戶使用的提交購買表單的操作,而系統(tǒng)內(nèi)部的細(xì)粒度的服務(wù)可能就是實(shí)現(xiàn)這個(gè)提交購買表單服務(wù)的一系列的內(nèi)部服務(wù),比如說創(chuàng)建購買記錄,設(shè)置客戶地址,更新數(shù)據(jù)庫等一系列的操作。雖然細(xì)粒度的接口能為服務(wù)請求者提供了更加細(xì)化和更多的靈活性,但同時(shí)也意味著引入較難控制的交互模式易變性,也就是說服務(wù)的交互模式可能隨著不同的服務(wù)請求者而不同。如果我們暴露這些易于變化的服務(wù)接口給系統(tǒng)的外部用戶,就可能造成外部服務(wù)請求者難于支持不斷變化的服務(wù)提供者所暴露的細(xì)粒度服務(wù)接口。而粗粒度服務(wù)接口保證了服務(wù)請求者將以一致的方式使用系統(tǒng)中所暴露出的服務(wù)。雖然面向服務(wù)的體系結(jié)構(gòu)(SOA)并不強(qiáng)制要求一定要使用粗粒度的服務(wù)接口,但是建議使用它們作為外部集成的接口。通常架構(gòu)設(shè)計(jì)師可以使用BPEL來創(chuàng)建由細(xì)粒度操作組成的業(yè)務(wù)流程的粗粒度的服務(wù)接口。

          無狀態(tài)服務(wù)的設(shè)計(jì)

          SOA系統(tǒng)架構(gòu)中的具體服務(wù)應(yīng)該都是獨(dú)立的、自包含的請求,在實(shí)現(xiàn)這些服務(wù)的時(shí)候不需要前一個(gè)請求的狀態(tài),也就是說服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文和狀態(tài),即SOA架構(gòu)中的服務(wù)應(yīng)該是無狀態(tài)的服務(wù)。當(dāng)某一個(gè)服務(wù)需要依賴時(shí),我們最好把它定義成具體的業(yè)務(wù)流程(BPEL)。在服務(wù)的具體實(shí)現(xiàn)機(jī)制上,我們可以通過使用 EJB 組件來實(shí)現(xiàn)粗粒度的服務(wù)。我們通常會利用無狀態(tài)的Session Bean來實(shí)現(xiàn)具體的服務(wù),如果基于Web Service技術(shù),我們就可以將無狀態(tài)的Session Bean暴露為外部用戶可以調(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)用程序。客戶可以訪問用 JAX-RPC 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ù)來說一直都是一個(gè)問題,由于幾乎所有 EJB 容器都提供了對無狀態(tài)會話 Bean 群集的支持以及對無狀態(tài)Session Bean 池與資源管理的支持,因此當(dāng)負(fù)載增加時(shí),可以向群集中增加機(jī)器,Web 服務(wù)請求可以定向到這些不同的服務(wù)器,同時(shí)由于無狀態(tài)Session Bean 池改進(jìn)了資源利用和內(nèi)存管理,使 Web 服務(wù)能夠有效地響應(yīng)多個(gè)客戶請求。由此我們可以看到,通過把 Web 服務(wù)模型化為 EJB 端點(diǎn),可以使服務(wù)具有更強(qiáng)的可伸縮性,并增強(qiáng)了系統(tǒng)整體的可靠性。

          SOA 為企業(yè)級架構(gòu)設(shè)計(jì)帶來的影響,以及在構(gòu)建基于 SOA 架構(gòu)的企業(yè)系統(tǒng)時(shí)應(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)境的幾個(gè)特點(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ī)器直接或者間接的使用某個(gè)服務(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)用者來說都是位置透明的,也就是說每個(gè)服務(wù)的調(diào)用者只需要知道他們調(diào)用的是哪一個(gè)服務(wù),但并不需要知道所調(diào)用服務(wù)的物理位置在哪里;而協(xié)議無關(guān)性要求每一個(gè)服務(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)的級別來保證整個(gè)系統(tǒng)的松耦合性以及靈活性,這都為未來企業(yè)業(yè)務(wù)邏輯的擴(kuò)展打好了基礎(chǔ)。

          1.2 SOA 架構(gòu)的分層模型

          接下來簡要介紹一下 SOA 系統(tǒng)中的分層模型,整個(gè) SOA 架構(gòu)的分層模型如圖2所示。

          560)this.style.width=560;" border=0>

          在 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ù)是一個(gè)企業(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層都需要有一個(gè)集成的環(huán)境來支持它們的運(yùn)行,第6層中的企業(yè)服務(wù)總線(ESB)提供了這個(gè)功能。第7層主要為整個(gè) SOA 系統(tǒng)提供一些輔助的功能,例如服務(wù)質(zhì)量管理,安全管理這一類的輔助功能。

          2. SOA 架構(gòu)中的非功能性服務(wù)級別(service-level)需求

          除了系統(tǒng)的業(yè)務(wù)需求,架構(gòu)設(shè)計(jì)師還必須要保證構(gòu)建出來的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中的非功能性服務(wù)級別(service-level)需求以及服務(wù)質(zhì)量(QoS)方面的需求。在項(xiàng)目初始及細(xì)化階段,架構(gòu)設(shè)計(jì)師應(yīng)該與系統(tǒng)所有涉及方(Stakeholders)一起,為每一個(gè)服務(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)建整個(gè)企業(yè)系統(tǒng)架構(gòu)的過程中,需要充分重視各種服務(wù)級別需求,從而避免在系統(tǒng)開發(fā)和運(yùn)行的時(shí)候出現(xiàn)重大問題。一個(gè)企業(yè)級系統(tǒng)中的服務(wù)級別需求往往是十分錯(cuò)綜復(fù)雜的, SOA 架構(gòu)設(shè)計(jì)師需要憑借豐富的專業(yè)經(jīng)驗(yàn)和扎實(shí)的理論知識來分離和抽象系統(tǒng)中不同的服務(wù)級別需求,圖3展示了這種分析的過程。

          560)this.style.width=560;" border=0>

          圖3

          經(jīng)過 SOA 架構(gòu)設(shè)計(jì)師分析和抽象的服務(wù)級別需求主要分為以下幾類:

          性能是指系統(tǒng)提供的服務(wù)要滿足一定的性能衡量標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)可能包括系統(tǒng)反應(yīng)時(shí)間以及處理交易量的能力等;

          可升級性是指當(dāng)系統(tǒng)負(fù)荷加大時(shí),能夠確保所需的服務(wù)質(zhì)量,而不需要更改整個(gè)系統(tǒng)的架構(gòu);

          可靠性是指確保各應(yīng)用及其相關(guān)的所有交易的完整性和一致性的能力;

          可用性是指一個(gè)系統(tǒng)應(yīng)確保一項(xiàng)服務(wù)或者資源永遠(yuǎn)都可以被訪問到;

          可擴(kuò)展性是指在不影響現(xiàn)有系統(tǒng)功能的基礎(chǔ)上,為系統(tǒng)填加新的功能或修改現(xiàn)有功能的能力;

          可維護(hù)性是指在不影響系統(tǒng)其他部分的情況下修正現(xiàn)有功能中問題或缺陷,并對整個(gè)系統(tǒng)進(jìn)行維護(hù)的能力;

          可管理性是指管理系統(tǒng)以確保系統(tǒng)的可升級性、可靠性、可用性、性能和安全性的能力;

          安全性是指確保系統(tǒng)安全不會被危及的能力。

          1) 性能

          我們通常可以根據(jù)每個(gè)用戶訪問的系統(tǒng)響應(yīng)時(shí)間來衡量系統(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或者XML-RPC的分布式計(jì)算模型中,它們的服務(wù)提供都是通過函數(shù)調(diào)用的方式進(jìn)行的,一個(gè)功能的完成往往需要通過客戶端和服務(wù)器來回很多次的遠(yuǎn)程函數(shù)調(diào)用才能完成。在Intranet的環(huán)境下,這些調(diào)用給系統(tǒng)的響應(yīng)速度和穩(wěn)定性帶來的影響都可以忽略不計(jì),但如果我們在基于 SOA 的架構(gòu)中使用了很多Web Service來作為服務(wù)提供點(diǎn)的話,我們就需要考慮性能的影響,尤其是在Internet環(huán)境下,這些往往是決定整個(gè)系統(tǒng)是否能正常工作的一個(gè)關(guān)鍵決定因素。因此在基于 SOA 的系統(tǒng)中,推薦采用大數(shù)據(jù)量低頻率訪問模式,也就是以大數(shù)據(jù)量的方式一次性進(jìn)行信息交換。這樣做可以在一定程度上提高系統(tǒng)的整體性能。

          2) 可升級性

          可升級性是指當(dāng)系統(tǒng)負(fù)荷加大時(shí),仍能夠確保所需的服務(wù)質(zhì)量,而不需要更改整個(gè)系統(tǒng)的架構(gòu)。當(dāng)基于 SOA 的系統(tǒng)中負(fù)荷增大時(shí),如果系統(tǒng)的響應(yīng)時(shí)間仍能夠在可接受的限度內(nèi),那么我們就可以認(rèn)為這個(gè)系統(tǒng)是具有可升級性的。要想理解可升級性,我們必須首先了解系統(tǒng)容量或系統(tǒng)的承受能力,也就是一個(gè)系統(tǒng)在保證正常運(yùn)行質(zhì)量的同時(shí),所能夠處理的最大進(jìn)程數(shù)量或所能支持的最大用戶數(shù)量。如果系統(tǒng)運(yùn)轉(zhuǎn)時(shí)已經(jīng)不能在可接受時(shí)間范圍內(nèi)反應(yīng),那么這個(gè)系統(tǒng)已經(jīng)到達(dá)了它的最大可升級狀態(tài)。要想升級已達(dá)到最大負(fù)載能力的系統(tǒng),你必須增加新的硬件。新添加的硬件可以以垂直或水平的方式加入。垂直升級包括為現(xiàn)在的機(jī)器增加處理器、內(nèi)存或硬盤。水平升級包括在環(huán)境中添置新的機(jī)器,從而增加系統(tǒng)的整體處理能力。作為一個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)師所設(shè)計(jì)出來的架構(gòu)必須能夠處理對硬件的垂直或者水平升級。基于 SOA 的系統(tǒng)架構(gòu)可以很好地保證整體系統(tǒng)的可升級性,這主要是因?yàn)橄到y(tǒng)中的功能模塊已經(jīng)被抽象成不同的服務(wù),所有的硬件以及底層平臺的信息都被屏蔽在服務(wù)之下,因此不管是對已有系統(tǒng)的水平升級還是垂直升級,都不會影響到系統(tǒng)整體的架構(gòu)。

          3) 可靠性

          可靠性是指確保各應(yīng)用及其相關(guān)的所有交易的完整性和一致性的能力。當(dāng)系統(tǒng)負(fù)荷增加時(shí),你的系統(tǒng)必須能夠持續(xù)處理需求訪問,并確保系統(tǒng)能夠象負(fù)荷未增加以前一樣正確地處理各個(gè)進(jìn)程。可靠性可能會在一定程度上限制系統(tǒng)的可升級性。如果系統(tǒng)負(fù)荷增加時(shí),不能維持它的可靠性,那么實(shí)際上這個(gè)系統(tǒng)也并不具備可升級性。因此,一個(gè)真正可升級的系統(tǒng)必須是可靠的系統(tǒng)。在基于 SOA 來構(gòu)建系統(tǒng)架構(gòu)的時(shí)候,可靠性也是必須要著重考慮的問題。要在基于 SOA 架構(gòu)的系統(tǒng)中保證一定的系統(tǒng)可靠性,就必須要首先保證分布在系統(tǒng)中的不同服務(wù)的可靠性。而不同服務(wù)的可靠性一般可以由其部署的應(yīng)用服務(wù)器或Web服務(wù)器來保證。只有確保每一個(gè) SOA 系統(tǒng)中的服務(wù)都具有較高的可靠性,我們才能保證系統(tǒng)整體的可靠性能夠得以保障。

          4) 可用性

          可用性是指一個(gè)系統(tǒng)應(yīng)確保一項(xiàng)服務(wù)或者資源應(yīng)該總是可被訪問到的。可靠性可以增加系統(tǒng)的整體可用性,但即使系統(tǒng)部件出錯(cuò),有時(shí)卻并不一定會影響系統(tǒng)的可用性。通過在環(huán)境中設(shè)置冗余組件和錯(cuò)誤恢復(fù)機(jī)制,雖然一個(gè)單獨(dú)的組件的錯(cuò)誤會對系統(tǒng)的可靠性產(chǎn)生不良的影響,但由于系統(tǒng)冗余的存在,使得整個(gè)系統(tǒng)服務(wù)仍然可用。在基于 SOA 來構(gòu)建系統(tǒng)架構(gòu)的時(shí)候,對于關(guān)鍵性的服務(wù)需要更多地考慮其可用性需求,這可以由兩個(gè)層次的技術(shù)實(shí)現(xiàn)來支持,第一種是利用不同服務(wù)的具體內(nèi)部實(shí)現(xiàn)內(nèi)部所基于的框架的容錯(cuò)或者冗余機(jī)制來實(shí)現(xiàn)對服務(wù)可用性的支持;第二種是通過UDDI等動態(tài)查找匹配方式來支持系統(tǒng)整體的高可用性。在 SOA 架構(gòu)設(shè)計(jì)師構(gòu)建企業(yè)系統(tǒng)架構(gòu)的時(shí)候,應(yīng)該綜合考慮這兩個(gè)方面的內(nèi)容,盡量保證所構(gòu)建的 SOA 系統(tǒng)架構(gòu)中的關(guān)鍵性業(yè)務(wù)能具有較高的可用性。

          5) 可擴(kuò)展性

          可擴(kuò)展性是指在不影響現(xiàn)有系統(tǒng)功能的基礎(chǔ)上,為系統(tǒng)添加新的功能或修改現(xiàn)有功能的能力。當(dāng)系統(tǒng)剛配置好的時(shí)候,你很難衡量它的可擴(kuò)展性,直到第一次你必須去擴(kuò)展系統(tǒng)已有功能的時(shí)候,你才能真正去衡量和檢測整個(gè)系統(tǒng)的可擴(kuò)展性。任何一個(gè)架構(gòu)設(shè)計(jì)師在構(gòu)建系統(tǒng)架構(gòu)時(shí),為了確保架構(gòu)設(shè)計(jì)的可擴(kuò)展性,都應(yīng)該考慮下面幾個(gè)要素:低耦合,界面(interfaces)以及封裝。當(dāng)架構(gòu)設(shè)計(jì)師基于 SOA 來構(gòu)建企業(yè)系統(tǒng)架構(gòu)時(shí),就已經(jīng)隱含地解決了這幾個(gè)可擴(kuò)展性方面的要素。這是因?yàn)?SOA 架構(gòu)中的不同服務(wù)之間本身就保持了一種無依賴的低耦合關(guān)系;服務(wù)本身是通過統(tǒng)一的接口定義(可以是WSDL)語言來描述具體的服務(wù)內(nèi)容,并且很好地封裝了底層的具體實(shí)現(xiàn)。在這里我們也可以從一個(gè)方面看到基于 SOA 來構(gòu)架企業(yè)系統(tǒng)能為我們帶來的好處。

          6) 可維護(hù)性

          可維護(hù)性是指在不影響系統(tǒng)其他部分的情況下修改現(xiàn)有系統(tǒng)功能中問題或缺陷的能力。同系統(tǒng)的可擴(kuò)展性相同,當(dāng)系統(tǒng)剛被部署時(shí),你很難判斷一個(gè)系統(tǒng)是否已經(jīng)具備了很好的可維護(hù)性。當(dāng)創(chuàng)建和設(shè)計(jì)系統(tǒng)架構(gòu)時(shí),要想提高系統(tǒng)的可維護(hù)性,你必須考慮下面幾個(gè)要素:低耦合、模塊性以及系統(tǒng)文檔記錄。在企業(yè)系統(tǒng)可擴(kuò)展性中我們已經(jīng)提到了 SOA 架構(gòu)能為系統(tǒng)中暴露出來的各個(gè)子功能模塊也就是服務(wù)帶來低耦合性和很好的模塊性。關(guān)于系統(tǒng)文檔紀(jì)錄,除了底層子系統(tǒng)的相關(guān)文檔外,基于 SOA 的系統(tǒng)還會引用到許多系統(tǒng)外部的由第三方提供的服務(wù),因此如果人力資源準(zhǔn)許的話,應(yīng)該增加專職的文檔管理員來專門負(fù)責(zé)有關(guān)整個(gè)企業(yè)系統(tǒng)所涉及的所有外部服務(wù)相關(guān)文檔的收集、歸類和整理,這些相關(guān)的文檔可能涉及到第三方服務(wù)的接口(可以是WSDL)、服務(wù)的質(zhì)量和級別、具體性能測試結(jié)果等各種相關(guān)文檔。基于這些文檔,就可以為 SOA 架構(gòu)設(shè)計(jì)師構(gòu)建企業(yè) SOA 架構(gòu)提供很好的文檔參考和支持。

          7) 可管理性

          可管理性是指管理系統(tǒng)以確保整個(gè)系統(tǒng)的可升級性、可靠性、可用性、性能和安全性的能力。具有可管理性的系統(tǒng),應(yīng)具備對服務(wù)質(zhì)量需求(QoS)的系統(tǒng)監(jiān)控能力,通過改變系統(tǒng)的配置從而可以動態(tài)地改善服務(wù)質(zhì)量,而不用改變整體系統(tǒng)架構(gòu)。一個(gè)好的系統(tǒng)架構(gòu)必須能夠監(jiān)控整個(gè)系統(tǒng)的運(yùn)行情況并具備動態(tài)系統(tǒng)配置管理的功能。在對復(fù)雜系統(tǒng)進(jìn)行系統(tǒng)架構(gòu)建模時(shí), SOA 架構(gòu)設(shè)計(jì)師應(yīng)該盡量考慮利用將系統(tǒng)整體架構(gòu)構(gòu)建在已有的成熟的底層系統(tǒng)框架(Framework)上。對于 SOA 架構(gòu)設(shè)計(jì)師來說,可以選擇的底層系統(tǒng)框架有很多,可以選用基于MQ, MessageBorker,WebSphere Application Server等產(chǎn)品來構(gòu)建企業(yè)服務(wù)總線(Enterprise Service Bus)以支持企業(yè)的 SOA 系統(tǒng)架構(gòu),也可以選用較新的基于WebSphere Application Server 6中內(nèi)嵌的Sibus來構(gòu)建企業(yè)的ESB以支持 SOA 系統(tǒng)架構(gòu)。具體選擇哪種底層框架來實(shí)施 SOA 系統(tǒng)架構(gòu)要根據(jù)每個(gè)系統(tǒng)各自的特點(diǎn)來決定,但這些底層的框架都已經(jīng)提供了較高的系統(tǒng)可管理性。因此,分析并選擇不同的產(chǎn)品或底層框架來實(shí)現(xiàn)企業(yè)系統(tǒng)架構(gòu)也是架構(gòu)設(shè)計(jì)師的主要職責(zé)之一。有關(guān)于如何利用已有底層架構(gòu)來構(gòu)建 SOA 系統(tǒng),中國 SOA 設(shè)計(jì)中心已經(jīng)發(fā)表了一系列相關(guān)的文章,大家可以在DeveloperWorks中的 SOA 專欄看到它們。

          8) 安全性

          安全性是指確保系統(tǒng)安全不會被危及的能力。目前,安全性應(yīng)該說是最困難的系統(tǒng)質(zhì)量控制點(diǎn)。這是因?yàn)榘踩圆粌H要求確保系統(tǒng)的保密和完整性,而且還要防止影響可用性的服務(wù)拒絕(Denial-of-Service)攻擊。這就要求當(dāng) SOA 架構(gòu)設(shè)計(jì)師在構(gòu)建一個(gè)架構(gòu)時(shí),應(yīng)該把整體系統(tǒng)架構(gòu)盡可能地分割成各個(gè)子功能模塊,在將一些子功能模塊暴露為外部用戶可見的服務(wù)的時(shí)候,要圍繞各個(gè)子模塊構(gòu)建各自的安全區(qū),這樣更便于保證整體系統(tǒng)架構(gòu)的安全。如果一個(gè)子模塊受到了安全攻擊,也可以保證其他模塊相對安全。如果企業(yè) SOA 架構(gòu)中的一些服務(wù)是由Web Service實(shí)現(xiàn)的,在考慮這些服務(wù)安全性的時(shí)候也要同時(shí)考慮效率的問題,因?yàn)閃S-Security會為Web Service帶來一定的執(zhí)行效率損耗。

          3.結(jié)束語

          本系列兩部分介紹了有關(guān)架構(gòu)設(shè)計(jì)師以及 SOA 架構(gòu)的知識,分析了 SOA 架構(gòu)師在設(shè)計(jì) SOA 系統(tǒng)架構(gòu)時(shí)有哪些應(yīng)該特別注意的地方并在最后簡要介紹了在構(gòu)建基于 SOA 架構(gòu)的企業(yè)系統(tǒng)時(shí)應(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ù)等各個(gè)方面。本文的內(nèi)容只是涉及到了有關(guān)于架構(gòu)方面的一部分內(nèi)容,希望能對廣大的 SOA 系統(tǒng)開發(fā)設(shè)計(jì)人員起到一定的幫助作用。



          ---------------------------------------------------------------------------------------------------------------------------------
          說人之短,乃護(hù)己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
          http://www.aygfsteel.com/szhswl
          ------------------------------------------------------------------------------------------------------ ----------------- ---------
          posted on 2007-12-04 15:20 宋針還 閱讀(296) 評論(0)  編輯  收藏 所屬分類: SOA文章

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大渡口区| 大姚县| 景宁| 湖北省| 滨州市| 渝中区| 夹江县| 肇庆市| 普洱| 成武县| 定西市| 泰和县| 四会市| 肇庆市| 江川县| 三台县| 吴旗县| 镇安县| 吴堡县| 济南市| 景德镇市| 绥化市| 正镶白旗| 普兰店市| 晋中市| 东乌珠穆沁旗| 丰都县| 应城市| 东宁县| 安图县| 宁明县| 辛集市| 永德县| 连云港市| 五家渠市| 平顶山市| 吴忠市| 潢川县| 双流县| 普安县| 德化县|