【文章內(nèi)容簡(jiǎn)介】
次的遠(yuǎn)程函數(shù)調(diào)用才能完成。在Intranet的環(huán)境下,這些調(diào)用給系統(tǒng)的響應(yīng)速度和穩(wěn)定性帶來(lái)的影響都可以忽略不計(jì),但如果我們?cè)诨?SOA 的架構(gòu)中使用了很多Web Service來(lái)作為服務(wù)提供點(diǎn)的話,我們就需要考慮性能的影響,尤其是在Internet環(huán)境下,這些往往是決定整個(gè)系統(tǒng)是否能正常工作的一個(gè)關(guān)鍵決定因素。因此在基于 SOA 的系統(tǒng)中,推薦采用大數(shù)據(jù)量低頻率訪問(wèn)模式,也就是以大數(shù)據(jù)量的方式一次性進(jìn)行信息交換。這樣做可以在一定程度上提高系統(tǒng)的整體性能。2) 可升級(jí)性 可升級(jí)性是指當(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)是具有可升級(jí)性的。要想理解可升級(jí)性,我們必須首先了解系統(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á)了它的最大可升級(jí)狀態(tài)。要想升級(jí)已達(dá)到最大負(fù)載能力的系統(tǒng),你必須增加新的硬件。新添加的硬件可以以垂直或水平的方式加入。垂直升級(jí)包括為現(xiàn)在的機(jī)器增加處理器、內(nèi)存或硬盤(pán)。水平升級(jí)包括在環(huán)境中添置新的機(jī)器,從而增加系統(tǒng)的整體處理能力。作為一個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)師所設(shè)計(jì)出來(lái)的架構(gòu)必須能夠處理對(duì)硬件的垂直或者水平升級(jí)?;?SOA 的系統(tǒng)架構(gòu)可以很好地保證整體系統(tǒng)的可升級(jí)性,這主要是因?yàn)橄到y(tǒng)中的功能模塊已經(jīng)被抽象成不同的服務(wù),所有的硬件以及底層平臺(tái)的信息都被屏蔽在服務(wù)之下,因此不管是對(duì)已有系統(tǒng)的水平升級(jí)還是垂直升級(jí),都不會(huì)影響到系統(tǒng)整體的架構(gòu)。3) 可靠性 可靠性是指確保各應(yīng)用及其相關(guān)的所有交易的完整性和一致性的能力。當(dāng)系統(tǒng)負(fù)荷增加時(shí),你的系統(tǒng)必須能夠持續(xù)處理需求訪問(wèn),并確保系統(tǒng)能夠象負(fù)荷未增加以前一樣正確地處理各個(gè)進(jìn)程。可靠性可能會(huì)在一定程度上限制系統(tǒng)的可升級(jí)性。如果系統(tǒng)負(fù)荷增加時(shí),不能維持它的可靠性,那么實(shí)際上這個(gè)系統(tǒng)也并不具備可升級(jí)性。因此,一個(gè)真正可升級(jí)的系統(tǒng)必須是可靠的系統(tǒng)。在基于 SOA 來(lái)構(gòu)建系統(tǒng)架構(gòu)的時(shí)候,可靠性也是必須要著重考慮的問(wèn)題。要在基于 SOA 架構(gòu)的系統(tǒng)中保證一定的系統(tǒng)可靠性,就必須要首先保證分布在系統(tǒng)中的不同服務(wù)的可靠性。而不同服務(wù)的可靠性一般可以由其部署的應(yīng)用服務(wù)器或Web服務(wù)器來(lái)保證。只有確保每一個(gè) SOA 系統(tǒng)中的服務(wù)都具有較高的可靠性,我們才能保證系統(tǒng)整體的可靠性能夠得以保障。4) 可用性 可用性是指一個(gè)系統(tǒng)應(yīng)確保一項(xiàng)服務(wù)或者資源應(yīng)該總是可被訪問(wèn)到的。可靠性可以增加系統(tǒng)的整體可用性,但即使系統(tǒng)部件出錯(cuò),有時(shí)卻并不一定會(huì)影響系統(tǒng)的可用性。通過(guò)在環(huán)境中設(shè)置冗余組件和錯(cuò)誤恢復(fù)機(jī)制,雖然一個(gè)單獨(dú)的組件的錯(cuò)誤會(huì)對(duì)系統(tǒng)的可靠性產(chǎn)生不良的影響,但由于系統(tǒng)冗余的存在,使得整個(gè)系統(tǒng)服務(wù)仍然可用。在基于 SOA 來(lái)構(gòu)建系統(tǒng)架構(gòu)的時(shí)候,對(duì)于關(guān)鍵性的服務(wù)需要更多地考慮其可用性需求,這可以由兩個(gè)層次的技術(shù)實(shí)現(xiàn)來(lái)支持,第一種是利用不同服務(wù)的具體內(nèi)部實(shí)現(xiàn)內(nèi)部所基于的框架的容錯(cuò)或者冗余機(jī)制來(lái)實(shí)現(xiàn)對(duì)服務(wù)可用性的支持;第二種是通過(guò)UDDI等動(dòng)態(tài)查找匹配方式來(lá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í)候,你才能真正去衡量和檢測(cè)整個(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 來(lái)構(gòu)建企業(yè)系統(tǒng)架構(gòu)時(shí),就已經(jīng)隱含地解決了這幾個(gè)可擴(kuò)展性方面的要素。這是因?yàn)?SOA 架構(gòu)中的不同服務(wù)之間本身就保持了一種無(wú)依賴(lài)的低耦合關(guān)系;服務(wù)本身是通過(guò)統(tǒng)一的接口定義(可以是WSDL)語(yǔ)言來(lái)描述具體的服務(wù)內(nèi)容,并且很好地封裝了底層的具體實(shí)現(xiàn)。在這里我們也可以從一個(gè)方面看到基于 SOA 來(lái)構(gòu)架企業(yè)系統(tǒng)能為我們帶來(lái)的好處。6) 可維護(hù)性 可維護(hù)性是指在不影響系統(tǒng)其他部分的情況下修改現(xiàn)有系統(tǒng)功能中問(wèn)題或缺陷的能力。同系統(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)中暴露出來(lái)的各個(gè)子功能模塊也就是服務(wù)帶來(lái)低耦合性和很好的模塊性。關(guān)于系統(tǒng)文檔紀(jì)錄,除了底層子系統(tǒng)的相關(guān)文檔外,基于 SOA 的系統(tǒng)還會(huì)引用到許多系統(tǒng)外部的由第三方提供的服務(wù),因此如果人力資源準(zhǔn)許的話,應(yīng)該增加專(zhuān)職的文檔管理員來(lái)專(zhuān)門(mén)負(fù)責(zé)有關(guān)整個(gè)企業(yè)系統(tǒng)所涉及的所有外部服務(wù)相關(guān)文檔的收集、歸類(lèi)和整理,這些相關(guān)的文檔可能涉及到第三方服務(wù)的接口(可以是WSDL)、服務(wù)的質(zhì)量和級(jí)別、具體性能測(cè)試結(jié)果等各種相關(guān)文檔?;谶@些文檔,就可以為 SOA 架構(gòu)設(shè)計(jì)師構(gòu)建企業(yè) SOA 架構(gòu)提供很好的文檔參考和支持。7) 可管理性 可管理性是指管理系統(tǒng)以確保整個(gè)系統(tǒng)的可升級(jí)性、可靠性、可用性、性能和安全性的能力。具有可管理性的系統(tǒng),應(yīng)具備對(duì)服務(wù)質(zhì)量需求(QoS)的系統(tǒng)監(jiān)控能力,通過(guò)改變系統(tǒng)的配置從而可以動(dòng)態(tài)地改善服務(wù)質(zhì)量,而不用改變整體系統(tǒng)架構(gòu)。一個(gè)好的系統(tǒng)架構(gòu)必須能夠監(jiān)控整個(gè)系統(tǒng)的運(yùn)行情況并具備動(dòng)態(tài)系統(tǒng)配置管理的功能。在對(duì)復(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)上。對(duì)于 SOA 架構(gòu)設(shè)計(jì)師來(lái)說(shuō),可以選擇的底層系統(tǒng)框架有很多,可以選用基于MQ, MessageBorker,WebSphere Application Server等產(chǎn)品來(lái)構(gòu)建企業(yè)服務(wù)總線(Enterprise Service Bus)以支持企業(yè)的 SOA 系統(tǒng)架構(gòu),也可以選用較新的基于WebSphere Application Server 6中內(nèi)嵌的Sibus來(lái)構(gòu)建企業(yè)的ESB以支持 SOA 系統(tǒng)架構(gòu)。具體選擇哪種底層框架來(lái)實(shí)施 SOA 系統(tǒng)架構(gòu)要根據(jù)每個(gè)系統(tǒng)各自的特點(diǎn)來(lái)決定,但這些底層的框架都已經(jīng)提供了較高的系統(tǒng)可管理性。因此,分析并選擇不同的產(chǎn)品或底層框架來(lái)實(shí)現(xiàn)企業(yè)系統(tǒng)架構(gòu)也是架構(gòu)設(shè)計(jì)師的主要職責(zé)之一。有關(guān)于如何利用已有底層架構(gòu)來(lái)構(gòu)建 SOA 系統(tǒng),中國(guó) SOA 設(shè)計(jì)中心已經(jīng)發(fā)表了一系列相關(guān)的文章,大家可以在DeveloperWorks中的 SOA 專(zhuān)欄看到它們。8) 安全性 安全性是指確保系統(tǒng)安全不會(huì)被危及的能力。目前,安全性應(yīng)該說(shuō)是最困難的系統(tǒng)質(zhì)量控制點(diǎn)。這是因?yàn)榘踩圆粌H要求確保系統(tǒng)的保密和完整性,而且還要防止影響可用性的服務(wù)拒絕(DenialofService)攻擊。這就要求當(dāng) SOA 架構(gòu)設(shè)計(jì)師在構(gòu)建一個(gè)架構(gòu)時(shí),應(yīng)該把整體系統(tǒng)架構(gòu)盡可能地分割成各個(gè)子功能模塊,在將一些子功能模塊暴露為外部用戶可見(jiàn)的服務(wù)的時(shí)候,要圍繞各個(gè)子模塊構(gòu)建各自的安全區(qū),這樣更便于保證整體系統(tǒng)架構(gòu)的安全。如果一個(gè)子模塊受到了安全攻擊,也可以保證其他模塊相對(duì)安全。如果企業(yè) SOA 架構(gòu)中的一些服務(wù)是由Web Service實(shí)現(xiàn)的,在考慮這些服務(wù)安全性的時(shí)候也要同時(shí)考慮效率的問(wèn)題,因?yàn)閃SSecurity會(huì)為Web Service帶來(lái)一定的執(zhí)行效率損耗。3.結(jié)束語(yǔ)本系列兩部分介紹了有關(guān)架構(gòu)設(shè)計(jì)師以及 SOA 架構(gòu)的知識(shí),分析了 SOA 架構(gòu)師在設(shè)計(jì) SOA 系統(tǒng)架構(gòu)時(shí)有哪些應(yīng)該特別注意的地方并在最后簡(jiǎn)要介紹了在構(gòu)建基于 SOA 架構(gòu)的企業(yè)系統(tǒng)時(shí)應(yīng)該怎樣保證所構(gòu)建的系統(tǒng)架構(gòu)能夠滿足系統(tǒng)中不同的服務(wù)級(jí)別需求。從架構(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)容,希望能對(duì)廣大的 SOA 系統(tǒng)開(kāi)發(fā)設(shè)計(jì)人員起到一定的幫助作用。參考資料 1. Patterns: Serviceoriented Architecture and Web Services紅皮書(shū),SG24630300,2004 年 4 月,作者M(jìn)ark Endrei 等。 2. DeveloperWorks 的 SOA 和 Web 服務(wù)專(zhuān)區(qū)有大量專(zhuān)題文章以及關(guān)于開(kāi)發(fā) Web 服務(wù)應(yīng)用程序的入門(mén)級(jí)、中級(jí)和高級(jí)教程。 3. 有關(guān)隨需應(yīng)變商務(wù)的更多信息,請(qǐng)參閱 Developer resources for an on demand world Web site 4. Web 服務(wù)項(xiàng)目角色 描述了 Web 服務(wù)開(kāi)發(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)的基本知識(shí),ESB的技術(shù)沿革,以及ESB與 SOA 之間的關(guān)系。企業(yè)服務(wù)總線解決方案剖析,第 1 部分: 企業(yè)服務(wù)總線的基本概念李珉, 高級(jí)軟件工程師,技術(shù)經(jīng)理, IBM 中國(guó)軟件開(kāi)發(fā)實(shí)驗(yàn)室 SOA設(shè)計(jì)中心 案,第 1 部分(developerWorks,2003 年 12 月)作者 Rick Robinson。 Patterns: Implementing an SOA using an Enterprise Service Bus,SG24634600,作者 Martin Keen 等。 Enterprise service bus making SOA real作者 Beth Hutchison, Peter Lambros, Rob Phippen, MarcThoms Schimdt 關(guān)于作者IBM中國(guó)軟件開(kāi)發(fā)實(shí)驗(yàn)室SOA設(shè)計(jì)中心 是IBM全球四個(gè)SOA設(shè)計(jì)中心中最大的一個(gè),成立一年多來(lái),已經(jīng)取得了可喜的成就。我們已經(jīng)在全球范圍內(nèi)成功地實(shí)施了多個(gè) SOA 應(yīng)用項(xiàng)目,為多個(gè)行業(yè)的客戶成功地提供了 SOA 解決方案。我們正在實(shí)施的 SOA 項(xiàng)目涵蓋了很多的重要行業(yè),包括零售業(yè)、航運(yùn)業(yè)、電力、銀行、保險(xiǎn)等等。通過(guò)這些不斷增長(zhǎng)的成功案例,我們不僅深入地推廣了 SOA 的理念,樹(shù)立了 SOA 成功實(shí)施的范例,也為我們的隊(duì)伍積累了經(jīng)驗(yàn),培養(yǎng)了人才。與此同時(shí),我們還是 IBM 開(kāi)發(fā) SOA 的軟件平臺(tái) SOA Integration Framework 的主力軍。該產(chǎn)品