Service-Oriented Architecture,SOA(转)
http://blog.csdn.net/WOOSHN/article/details/8036910
介紹:
???? IT體系結(jié)構(gòu)已非常成熟,它是一種成功處理典型IT問(wèn)題的方法。體系結(jié)構(gòu)中一個(gè)受到很大重視且相對(duì)較新的分支是面向服務(wù)的體系結(jié)構(gòu)(SOA)。SOA經(jīng)常被吹捧為企業(yè)用于解決應(yīng)用程序靈活性和高維護(hù)成本問(wèn)題的萬(wàn)能藥,常常被視為幫助企業(yè)提高其IT投資回報(bào)(Return On Investment,ROI)的方法。SOA是用于進(jìn)行IT系統(tǒng)設(shè)計(jì)以確保業(yè)務(wù)目標(biāo)與IT一致的主要體系結(jié)構(gòu)樣式,允許構(gòu)建具有彈性的IT系統(tǒng)來(lái)滿足新的和不斷變化的業(yè)務(wù)需求。
???? SOA是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過(guò)這些服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。
???? 在企業(yè)傳統(tǒng)的系統(tǒng)開(kāi)發(fā)中,企業(yè)往往在設(shè)計(jì)架構(gòu)的時(shí)候都是采用了緊耦合形式,這是封閉的,自成一體的。這種架構(gòu)下的的MRP、ERP、OA等產(chǎn)品很難適應(yīng)或快速響應(yīng)市場(chǎng)或客戶靈活多變的需求,以及后續(xù)的擴(kuò)展。在這樣的市場(chǎng)、及客戶需求下,從而催生了軟件產(chǎn)品一種新的設(shè)計(jì)或架構(gòu)的理念:面向服務(wù)架構(gòu)。
???? SOA架構(gòu),是一種粗粒度、開(kāi)放式、松耦合的服務(wù)結(jié)構(gòu),要求軟件產(chǎn)品在開(kāi)發(fā)過(guò)程中,按照相關(guān)的標(biāo)準(zhǔn)或協(xié)議,進(jìn)行分層開(kāi)發(fā)。通過(guò)這種分層設(shè)計(jì)或架構(gòu)體系可以使軟件產(chǎn)品變得更加彈性和靈活,且盡可能的與第三方軟件產(chǎn)品互補(bǔ)兼容,以達(dá)到快速擴(kuò)展,滿足或響應(yīng)市場(chǎng)或客戶需求的多樣化、多變性。
觀點(diǎn):
????SOA架構(gòu)帶來(lái)的主要觀點(diǎn)是業(yè)務(wù)驅(qū)動(dòng)IT,即業(yè)務(wù)驅(qū)動(dòng)和業(yè)務(wù)更加緊密地聯(lián)系在一起。以粗粒度的業(yè)務(wù)服務(wù)作為基礎(chǔ)來(lái)對(duì)公司業(yè)務(wù)進(jìn)行建模,這樣就可以產(chǎn)生簡(jiǎn)潔的業(yè)務(wù)和系統(tǒng)視圖;以業(yè)務(wù)服務(wù)為基礎(chǔ)來(lái)實(shí)現(xiàn)的IT系統(tǒng)更靈活、更易于重用、也更快地應(yīng)對(duì)企業(yè)業(yè)務(wù)需求的變化;以業(yè)務(wù)服務(wù)為基礎(chǔ),通過(guò)顯式地方式來(lái)定義、描述、實(shí)現(xiàn)和管理業(yè)務(wù)層次的粗粒度服務(wù)(包括業(yè)務(wù)流程),提供了業(yè)務(wù)服務(wù)模型和相關(guān)IT業(yè)務(wù)之間提供了更好的"可追溯性",縮小了它們之間的差距,使得業(yè)務(wù)服務(wù)的變化更容易傳遞到IT。另外,SOA的一條重要的基本原則是,它能跨各種異類功能和基礎(chǔ)設(shè)施環(huán)境提供服務(wù)互操作性。SOA 是基于業(yè)務(wù)需求定義的,他依賴于業(yè)務(wù)原則而不依賴于軟件設(shè)計(jì),具有突出的互操作性和靈活的服務(wù)即插即用功能。
?
優(yōu)點(diǎn):
? 1、更易維護(hù):業(yè)務(wù)服務(wù)提供者和業(yè)務(wù)服務(wù)使用者的松散耦合關(guān)系及對(duì)開(kāi)放標(biāo)準(zhǔn)的采用確保了該特性的實(shí)現(xiàn)。建立在以 SOA基礎(chǔ)上的信息系統(tǒng),當(dāng)需求發(fā)生變化的時(shí)候,不需要修改提供業(yè)務(wù)服務(wù)的接口,只需要調(diào)整業(yè)務(wù)服務(wù)流程或者修改操作即可,整個(gè)應(yīng)用系統(tǒng)也更容易被維護(hù)。
? 2、更高的可用性:該特點(diǎn)是在于服務(wù)提供者和服務(wù)使用者的松散耦合關(guān)系上得以發(fā)揮與體現(xiàn)。使用者無(wú)須了解提供者的具休實(shí)現(xiàn)細(xì)節(jié)。
3、更好的伸縮性:依靠業(yè)務(wù)服務(wù)設(shè)計(jì)、開(kāi)發(fā)和部署等所采用的架構(gòu)模型實(shí)現(xiàn)伸縮性。使得服務(wù)提供者可以互相彼此獨(dú)立地進(jìn)行調(diào)整,以滿足新的服務(wù)需求。
?
缺點(diǎn):
??? 1、安全問(wèn)題:
??? (1)SOA做為一種基于服務(wù)的架構(gòu),其面向的是流程。這樣,當(dāng)企業(yè)真正實(shí)施基于SOA的應(yīng)用軟件以后,表面看來(lái),企業(yè)的業(yè)務(wù)流程得到了梳理,內(nèi)控的能力提高了,但SOA架構(gòu)要求必須有一個(gè)類似于流程管理的程序,來(lái)統(tǒng)一管理這些流程。這就帶來(lái)一個(gè)問(wèn)題,如果這個(gè)架構(gòu)出現(xiàn)問(wèn)題,那么將導(dǎo)致所有的業(yè)務(wù)癱瘓。而現(xiàn)在企業(yè)信息化的發(fā)展趨勢(shì)是IT和業(yè)務(wù)結(jié)合得越來(lái)越緊密,或者可以說(shuō)業(yè)務(wù)對(duì)IT的依賴程度越來(lái)越高,相信如果SOA不能很好地解決安全問(wèn)題,將會(huì)極大地限制其發(fā)展。
???? (2)SOA強(qiáng)調(diào)機(jī)器與機(jī)器的交互,而大多數(shù)IT安全性都是基于人與機(jī)器的交互:身份驗(yàn)證和授權(quán)在這個(gè)環(huán)境中變得更加富于挑戰(zhàn)性。在未受保護(hù)的SOA中,想要阻止Web服務(wù)的未授權(quán)使用實(shí)際上是不可能的。未授權(quán)用戶可以非常輕松地訪問(wèn)Web服務(wù),而Web服務(wù)往往不具備跟蹤誰(shuí)在使用它們或者誰(shuí)被允許使用它們的固有功能。傳統(tǒng)的安全防御對(duì)象主要是針對(duì)人,而SOA更多地強(qiáng)調(diào)了機(jī)器與機(jī)器的交互,即所謂服務(wù)的互操作性,如何應(yīng)對(duì)來(lái)自合作伙伴或第三方服務(wù)交互請(qǐng)求的威脅(大多數(shù)情況下,這些請(qǐng)求被人惡意利用和操縱)將是SOA安全防御的一項(xiàng)重要課題。
???? (3)XML通信協(xié)議消耗大量帶寬,引發(fā)安全問(wèn)題:與傳統(tǒng)的二進(jìn)制通信協(xié)議相比,XML最高可以消耗高達(dá)50倍的帶寬,這不僅會(huì)導(dǎo)致交互系統(tǒng)性能下降,而且會(huì)為分布式拒絕服務(wù)攻擊提供可趁之機(jī)。因此,未經(jīng)優(yōu)化的XML通信將導(dǎo)致嚴(yán)重的安全問(wèn)題。由于SOA架構(gòu)的開(kāi)放性本質(zhì),您很難控制SOA中未知的第三方,比如您的合作伙伴,它們可以間接訪問(wèn)未受保護(hù)的Web服務(wù)。因此,未受保護(hù)的Web服務(wù)很容易超負(fù)荷運(yùn)轉(zhuǎn),如果沒(méi)有訪問(wèn)控制,未受保護(hù)的Web服務(wù)很容易被來(lái)自黑客的大量SOAP消息所“淹沒(méi)”,結(jié)果可能導(dǎo)致拒絕式攻擊從而損害系統(tǒng)的正常功能。(為了解決這類問(wèn)題,市場(chǎng)上已出現(xiàn)了專門(mén)的XML加速器。利用基于64位平臺(tái)架構(gòu)的語(yǔ)法分析器,該設(shè)備可以用來(lái)加速XML/SOAP的解析、XML模式的確認(rèn)、XPath的處理以及 XSLT的功能轉(zhuǎn)換。據(jù)公開(kāi)的產(chǎn)品測(cè)試報(bào)告稱,這種XML加速器能夠達(dá)到每秒處理1萬(wàn)多條XML消息的能力。)
??? (4)基于XML的服務(wù)間通信易受到監(jiān)聽(tīng)和竊取:由于XML的純文本的本質(zhì),未經(jīng)保護(hù)的XML在互聯(lián)網(wǎng)傳輸過(guò)程中很容易被監(jiān)聽(tīng)和竊取。為了保障基于XML的通信安全,我們需要從傳輸層和消息層兩個(gè)層面進(jìn)行保護(hù)。通過(guò)傳輸安全,可以保證只允許授權(quán)用戶可以訪問(wèn)基于XML的Web服務(wù),目前可擴(kuò)展訪問(wèn)控制標(biāo)記語(yǔ)言(Extensible Access Control Markup Language,XACML)和Web服務(wù)策略(WS-Policy)是專門(mén)用來(lái)解決這個(gè)問(wèn)題的兩個(gè)標(biāo)準(zhǔn);通過(guò)消息安全,可以保證Web服務(wù)環(huán)境中交換的XML消息的完整性和保密性,Web服務(wù)安全(Web Service Security,WSS)和安全聲明標(biāo)記語(yǔ)言(Security Assertion Markup Language,SAML)則用來(lái)解決這方面的問(wèn)題。
2、個(gè)性化問(wèn)題。SOA通過(guò)所謂粗粒度服務(wù)接口和分級(jí),確實(shí)提高了效率。實(shí)現(xiàn)流程化以后,也確實(shí)簡(jiǎn)化了開(kāi)發(fā)難度。如果這個(gè)流程不適合我這個(gè)企業(yè)的實(shí)際情況,我還是需要個(gè)性化開(kāi)發(fā)。國(guó)內(nèi)的中小企業(yè)占到了企業(yè)總量的70%,他們的需求很具個(gè)性化,而且比較在意價(jià)格的因素。實(shí)際上這和SOA高度集成的性質(zhì)是不相符的。
?
使用: ??
?一些公司把SOA簡(jiǎn)單地當(dāng)作一種連接具體的應(yīng)用程序和創(chuàng)建服務(wù)庫(kù)的技術(shù),而不是使用SOA開(kāi)發(fā)一個(gè)基于軟件的相關(guān)的業(yè)務(wù)能力組合。如果你把SOA本身當(dāng)作一種具體的技術(shù)解決方案,而不是當(dāng)作改善你的業(yè)務(wù)的一種方法,你就不會(huì)實(shí)現(xiàn)SOA的好處。
??? SOA的真正價(jià)值和實(shí)現(xiàn)是:流程。我們將那些隨著時(shí)間推移在不斷發(fā)生變化的業(yè)務(wù)放在BPM層中,使得核心業(yè)務(wù)流程的變更變得更加簡(jiǎn)單。比如說(shuō),企業(yè)增加一條新產(chǎn)品線可能會(huì)導(dǎo)致公司定義銷(xiāo)售稅的改變,我們可以通過(guò)流程,將這樣的業(yè)務(wù)流程變更轉(zhuǎn)變?yōu)槲覀儗?duì)流程的配置,這種架構(gòu)能夠更好地支持業(yè)務(wù)變更,為IT帶來(lái)敏捷的價(jià)值。
??? 盡管大多數(shù)人認(rèn)為SOA的賣(mài)點(diǎn)是重用,或在多個(gè)系統(tǒng)間重用服務(wù)的能力,但是隨著時(shí)間的推移我們會(huì)漸漸發(fā)現(xiàn),SOA的真正價(jià)值是提供了無(wú)需一連串重新開(kāi)發(fā)、測(cè)試和部署,就能改變核心業(yè)務(wù)流程的能力,我認(rèn)為這一點(diǎn)才是最重要的,即SOA的價(jià)值定位應(yīng)該是它促進(jìn)架構(gòu)敏捷的能力,或是支持架構(gòu)變更的能力。
??? 敏捷的價(jià)值能夠帶來(lái)戰(zhàn)略上的優(yōu)勢(shì)。SOA的最終價(jià)值來(lái)自于它在更大的前景目標(biāo)中扮演的角色SOA 是從傳統(tǒng)的業(yè)務(wù)豎井向新的業(yè)務(wù)技術(shù)過(guò)渡的一個(gè)關(guān)鍵的部分。許多技術(shù)趨勢(shì)(從云計(jì)算和虛擬化到業(yè)務(wù)服務(wù)管理、商務(wù)智能和文件管理)都使用或者支持SOA,或者是與SOA的業(yè)務(wù)設(shè)計(jì)重點(diǎn)協(xié)調(diào)設(shè)計(jì)的。SOA應(yīng)該是一個(gè)更大的前景目標(biāo)的基礎(chǔ),如Forrester公司的數(shù)字業(yè)務(wù)架構(gòu)。這個(gè)數(shù)字業(yè)務(wù)架構(gòu)包括你的所有的技術(shù)計(jì)劃,代表了你的業(yè)務(wù)能力并且指導(dǎo)你的架構(gòu)和架構(gòu)戰(zhàn)略的向前發(fā)展。
??? 另外, 在中間件領(lǐng)域,SOA架構(gòu)日益成為中間件軟件供應(yīng)商爭(zhēng)奪的新焦點(diǎn)。誰(shuí)都希望自己能夠先于競(jìng)爭(zhēng)對(duì)手提供最優(yōu)的SOA技術(shù)實(shí)現(xiàn)平臺(tái)。從技術(shù)上來(lái)說(shuō),Web服務(wù)、組件技術(shù)的采用將有助于SOA的進(jìn)一步普及,從業(yè)務(wù)上來(lái)說(shuō),企業(yè)用戶要求性價(jià)比更高的應(yīng)用系統(tǒng),SOA恰恰適應(yīng)了這樣的趨勢(shì)。
?
誤區(qū):
?? 1、忽略遺留系統(tǒng)的技術(shù)限制:
???? 大量?SOA?工作都非常依賴駐留在遺留系統(tǒng)內(nèi)的現(xiàn)有數(shù)據(jù)和應(yīng)用程序。遺留系統(tǒng)的某些功能通常并不能適應(yīng)基于?SOA?的應(yīng)用程序中的實(shí)時(shí)特性。這種問(wèn)題的一個(gè)典型例子就是單線程遺留應(yīng)用程序,在此類應(yīng)用程序中,業(yè)務(wù)功能的實(shí)現(xiàn)僅允許進(jìn)行單線程訪問(wèn)。遺留系統(tǒng)限制的另一個(gè)例子是僅在固定時(shí)間運(yùn)行的計(jì)劃批處理。
???? 決定將遺留應(yīng)用程序或數(shù)據(jù)作為?SOA?系統(tǒng)的一部分時(shí),務(wù)必理解這可能會(huì)給整個(gè)SOA帶來(lái)的限制。如剛剛提到的,遺留應(yīng)用程序的單線程特性就是遺留系統(tǒng)技術(shù)限制的一個(gè)例子?,F(xiàn)代企業(yè)的業(yè)務(wù)功能經(jīng)??杀WC提供遠(yuǎn)遠(yuǎn)超過(guò)現(xiàn)有系統(tǒng)的功能之外的基礎(chǔ)設(shè)施事務(wù)功能。在此類情況下,可以構(gòu)建以現(xiàn)代基礎(chǔ)設(shè)施組合為基礎(chǔ)的基于?SOA?的解決方案來(lái)逐步淘汰遺留系統(tǒng)。為此,組織需要選擇對(duì)業(yè)務(wù)最重要的功能,并使用基于技術(shù)先進(jìn)的基礎(chǔ)設(shè)施的解決方案來(lái)替換其現(xiàn)有遺留實(shí)現(xiàn)。完成此階段工作后,可以隨后對(duì)其他業(yè)務(wù)功能進(jìn)行現(xiàn)代化。此方法提供了用于逐步淘汰遺留系統(tǒng)的可行選擇。
? 2、將SOA?與Web服務(wù)劃等號(hào):
?? 將Web服務(wù)實(shí)現(xiàn)等同于SOA?是一個(gè)典型的SOA反模式,這種情況通常發(fā)生在企業(yè)希望快速實(shí)現(xiàn)SOA?但并未評(píng)估其IT系統(tǒng)(包括應(yīng)用程序和基礎(chǔ)設(shè)施)的成熟度時(shí)。此類企業(yè)會(huì)將所有內(nèi)容都作為Web服務(wù)實(shí)現(xiàn)。IDE的發(fā)展已確保進(jìn)行Web服務(wù)創(chuàng)建的技術(shù)部分得到無(wú)縫支持,并不要求進(jìn)行大量的學(xué)習(xí),從而使得IT部門(mén)能非常方便地創(chuàng)Web服務(wù),而不會(huì)過(guò)多考慮是否與企業(yè)的業(yè)務(wù)目標(biāo)一致。Web?服務(wù)的大量增加帶來(lái)了管理困難,并為基礎(chǔ)設(shè)施操作帶來(lái)了不必要的成本。因此,如果企業(yè)的遠(yuǎn)景僅是實(shí)現(xiàn)一組?Web?服務(wù),然后嘗試獲得SOA所帶來(lái)的好處的話,最好后退一步,重新對(duì)此進(jìn)行考慮。如果企業(yè)希望充分利用SOA,則需要徹底了解體系結(jié)構(gòu)和實(shí)現(xiàn)之間的差異,并對(duì)這一事實(shí)加以尊重。Web?服務(wù)是用于實(shí)現(xiàn)?SOA?的最流行的實(shí)現(xiàn),SOA?是一種體系結(jié)構(gòu)樣式,允許?IT?服務(wù)與業(yè)務(wù)需求保持一致,從而確保IT的業(yè)務(wù)價(jià)值。為了獲得SOA的好處,企業(yè)IT團(tuán)隊(duì)需要完全了解SOA和Web服務(wù)間的區(qū)別。即,IT團(tuán)隊(duì)需要認(rèn)識(shí)到,SOA是一個(gè)體系結(jié)構(gòu)規(guī)程,而Web服務(wù)是目前最流行的SOA實(shí)現(xiàn)技術(shù)。
?? 建模和設(shè)計(jì)SOA時(shí),強(qiáng)烈建議IT團(tuán)隊(duì)采用標(biāo)準(zhǔn)方法。IBM?的面向服務(wù)的建模和體系結(jié)構(gòu)(Service-Oriented?Modeling?and?Architecture,SOMA)提供了用于進(jìn)行建模和設(shè)計(jì)的規(guī)定性詳細(xì)方法。從最高的抽象級(jí)別而言,SOMA?提供了包含三個(gè)步驟的流程,用于進(jìn)行服務(wù)標(biāo)識(shí)、規(guī)范制訂和實(shí)現(xiàn),可幫助創(chuàng)建能用于?SOA?實(shí)現(xiàn)的輸出。另外,還建議在設(shè)計(jì)?SOA?前對(duì)各個(gè)領(lǐng)域(如業(yè)務(wù)角度、組織、應(yīng)用程序、體系結(jié)構(gòu))的企業(yè)服務(wù)集成成熟度進(jìn)行評(píng)估。通過(guò)評(píng)估這些領(lǐng)域的成熟度水平,可對(duì)企業(yè)的當(dāng)前狀態(tài)進(jìn)行評(píng)估;您可以隨后創(chuàng)建增量轉(zhuǎn)換路線圖,以達(dá)到更高的服務(wù)集成成熟度水平。為了幫助您完成此任務(wù),IBM?提供了稱為服務(wù)集成成熟度模型(Service?Integration?Maturity?Model,SIMM)技術(shù)。
??3、細(xì)粒度服務(wù):
? 甚至在開(kāi)始?SOA?活動(dòng)前,業(yè)務(wù)信息(數(shù)據(jù))和應(yīng)用程序功能也通常存在于當(dāng)前的企業(yè)?IT?投資組合中。這些傳統(tǒng)的企業(yè)應(yīng)用程序通常是基于API的。用于訪問(wèn)客戶信息的典型API?的示例有g(shù)etFirstName()、getLastName()?或?getCelPhone()。這些?API?本質(zhì)上通常是非常細(xì)粒度的。???
??一個(gè)常見(jiàn)的?SOA?錯(cuò)誤做法是,使用服務(wù)接口包裝這種細(xì)粒度API,并將其通過(guò)Web服務(wù)描述語(yǔ)言(Web?Services?Description?Language,WSDL)定義對(duì)外公開(kāi)。這會(huì)導(dǎo)致錯(cuò)誤地將服務(wù)概念看作不過(guò)是“使用昂貴的服務(wù)Facade包裝的漂亮API”。不僅得到的“服務(wù)”僅傳遞很少的業(yè)務(wù)數(shù)據(jù),而且這種做法也會(huì)導(dǎo)致服務(wù)數(shù)量劇增。從而導(dǎo)致使用者要負(fù)責(zé)按照正確的順序聚合服務(wù),以便實(shí)現(xiàn)任何高級(jí)業(yè)務(wù)功能。請(qǐng)記住,服務(wù)并不是免費(fèi)的:對(duì)于調(diào)用每個(gè)服務(wù),應(yīng)用程序都將以損失一定性能為代價(jià)。剛剛提到的失誤將導(dǎo)致服務(wù)間頻繁通信,從而導(dǎo)致系統(tǒng)開(kāi)銷(xiāo)增加,所帶來(lái)的性能損失將對(duì)SOA采用造成極大的阻礙。
?? 正如我們多次提到的,服務(wù)必須與業(yè)務(wù)保持一致,并能為企業(yè)提供真正的收益潛力(無(wú)論通過(guò)減少成本和節(jié)約,還是通過(guò)產(chǎn)生收入)。創(chuàng)建僅模擬API實(shí)現(xiàn)的細(xì)粒度服務(wù)將不能為SOA或企業(yè)提供任何幫助。?
?? 服務(wù)可以通過(guò)聚合多個(gè)低級(jí)細(xì)粒度?API?實(shí)現(xiàn)的功能來(lái)實(shí)現(xiàn)。不要將每個(gè)細(xì)粒度API都作為服務(wù)公開(kāi);應(yīng)該從API抽象出粗粒度的、與業(yè)務(wù)一致的接口,然后將此接口作為服務(wù)公開(kāi)。這不僅能減少網(wǎng)絡(luò)開(kāi)銷(xiāo)和各個(gè)應(yīng)用程序?qū)哟伍g的通信量,而且還向與業(yè)務(wù)保持一致的服務(wù)接口邁進(jìn)了一大步。?
??? 4、點(diǎn)到點(diǎn)調(diào)用:
????? 服務(wù)提供者和服務(wù)使用者的概念對(duì)SOA非常重要。使用者對(duì)服務(wù)的使用可以通過(guò)多種方法實(shí)現(xiàn)。在此領(lǐng)域最常見(jiàn)的失誤是采用點(diǎn)到點(diǎn)調(diào)用。這種方法會(huì)導(dǎo)致公開(kāi)SOA系統(tǒng)中服務(wù)使用者和提供者間的連接(糟糕的n*n)。或許您可以讓此類系統(tǒng)投入運(yùn)行,但又如何長(zhǎng)期對(duì)其進(jìn)行維護(hù),并同時(shí)跟蹤所有連接,而且在其中任意一個(gè)服務(wù)或應(yīng)用程序被替換或重寫(xiě)時(shí)進(jìn)行必要的更改呢??
???? 當(dāng)企業(yè)在應(yīng)用程序間采用復(fù)雜的緊密耦合時(shí)(特別在投資組合中存在大量應(yīng)用程序時(shí)),需要配備恰當(dāng)?shù)姆?wù)調(diào)用體系結(jié)構(gòu)。IT系統(tǒng)設(shè)計(jì)需要?jiǎng)?chuàng)建邏輯體系結(jié)構(gòu)層,以封裝和執(zhí)行(數(shù)據(jù))轉(zhuǎn)換、(服務(wù)調(diào)用)路由和(可能的不同服務(wù)的異類實(shí)現(xiàn)間的)協(xié)議中介。通過(guò)這樣進(jìn)行分解,可以在服務(wù)提供者和使用者間實(shí)現(xiàn)松散耦合。即,一個(gè)這樣的邏輯體系結(jié)構(gòu),其中的服務(wù)提供者和服務(wù)使用者通過(guò)邏輯總線進(jìn)行通信。
???? 服務(wù)使用者通過(guò)中間層同服務(wù)提供者分離。使用者與邏輯總線進(jìn)行通信,而后者跟蹤來(lái)自提供者的可用服務(wù),并負(fù)責(zé)調(diào)用恰當(dāng)?shù)奶峁┱?。這就減少了具有大量服務(wù)的系統(tǒng)中的點(diǎn)到點(diǎn)通信導(dǎo)致的問(wèn)題。在進(jìn)行服務(wù)實(shí)現(xiàn)前,如果尚未定義,應(yīng)該對(duì)服務(wù)總線的體系結(jié)構(gòu)進(jìn)行概念化。這個(gè)規(guī)則特別適用于包含大量需要面向服務(wù)和進(jìn)行集成的應(yīng)用程序和遺留系統(tǒng)的企業(yè)。?
?? 5、不遵循標(biāo)準(zhǔn):
???? 采用SOA時(shí),務(wù)必遵循開(kāi)放標(biāo)準(zhǔn),而不要嘗試忽略這些標(biāo)準(zhǔn)或自己創(chuàng)建替代解決方案。例如,最好創(chuàng)建企業(yè)基礎(chǔ)設(shè)施來(lái)使用統(tǒng)一描述、發(fā)現(xiàn)和集成(Universal?Description,?Discovery?and?Integration,UDDI)作為將來(lái)的聯(lián)合注冊(cè)中心生態(tài)系統(tǒng),而不要使用服務(wù)發(fā)現(xiàn)標(biāo)準(zhǔn)或構(gòu)建服務(wù)發(fā)現(xiàn)自定義解決方案(如使用服務(wù)名稱與URL數(shù)據(jù)庫(kù))。?
??? 在?SOA?中的服務(wù)規(guī)范制訂期間,尤為重要的是,要遵循行業(yè)特定的標(biāo)準(zhǔn)XML規(guī)范。此類行業(yè)特定標(biāo)準(zhǔn)定義消息的格式和業(yè)務(wù)實(shí)體,必須將其作為定義構(gòu)建服務(wù)時(shí)使用的消息格式和數(shù)據(jù)類型的基礎(chǔ)使用。?現(xiàn)在亟待針對(duì)整個(gè)行業(yè)提出XML規(guī)范來(lái)定義企業(yè)信息模型及用于與模型一起使用的一組標(biāo)準(zhǔn)服務(wù)操作。很多垂直行業(yè)正在朝著這個(gè)目標(biāo)快速發(fā)展。例如,Agent-Company?Organization?for?Research?and?Development?(ACORD)?是針對(duì)保險(xiǎn)行業(yè)的基XML的標(biāo)準(zhǔn),Justice?XML?Data?Dictionary?(JXDD)?是針對(duì)美國(guó)國(guó)土安全部使用的事故管理規(guī)程的基XML的標(biāo)準(zhǔn),Open?Network?Video?Interface?Forum(ONVIF)是視頻監(jiān)控領(lǐng)域國(guó)際標(biāo)準(zhǔn),而OpenTravel?Alliance?(OTA)?則是旅行和運(yùn)輸行業(yè)的標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)均已作為穩(wěn)定規(guī)范發(fā)布,越來(lái)越多的基于SOA的工作正在采用這些標(biāo)準(zhǔn)。?
??? 通過(guò)遵循公共消息格式詞匯進(jìn)行消息交換來(lái)采用并遵循此類標(biāo)準(zhǔn),可以使得SOA足夠靈活,能在生態(tài)系統(tǒng)中的合作伙伴之間進(jìn)行共享。它還允許對(duì)符合并實(shí)現(xiàn)這些標(biāo)準(zhǔn)的供應(yīng)商SOA產(chǎn)品進(jìn)行即插即用。此靈活性是定義和結(jié)構(gòu)設(shè)計(jì)良好的SOA的關(guān)鍵元素之一,可支持成功創(chuàng)建大型?SOA?生態(tài)系統(tǒng)。?
??? 在沒(méi)有此類意識(shí)且不進(jìn)行專門(mén)的行業(yè)標(biāo)準(zhǔn)分析和采用工作的企業(yè)中,開(kāi)發(fā)團(tuán)隊(duì)需要考慮標(biāo)準(zhǔn)的重要性,并將其制度化。恰當(dāng)?shù)目刂瓶蚣茉谙蛏姹娬f(shuō)明此消息時(shí)將非常有用,可幫助確保遵從性和成功采用。在對(duì)標(biāo)準(zhǔn)沒(méi)有足夠重視但仍然需要SOA的情況下,組織將不能得到SOA的很多主要好處。?
?????6、使用冗余數(shù)據(jù)存儲(chǔ):
????? 在包含具有多年應(yīng)用程序處理經(jīng)驗(yàn)的IT部門(mén)的典型大型企業(yè)中,經(jīng)常會(huì)發(fā)現(xiàn)包含重復(fù)信息的多個(gè)數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)庫(kù)系統(tǒng)。之所以這樣做的主要原因是采用了典型的豎井方法,在這種方法中,應(yīng)用程序必須分離,各個(gè)應(yīng)用程序的重點(diǎn)都是企業(yè)內(nèi)的單個(gè)組織單位。?
???? 當(dāng)企業(yè)開(kāi)始向SOA過(guò)渡時(shí),拋開(kāi)所有現(xiàn)有系統(tǒng)并重新從頭構(gòu)建所有內(nèi)容的做法并不實(shí)際。不過(guò),在此類環(huán)境中,針對(duì)不同數(shù)據(jù)源(即使這些數(shù)據(jù)源中包含完全相同的數(shù)據(jù))構(gòu)建IT服務(wù)的做法并不少見(jiàn)。?更為有效的方法是對(duì)數(shù)據(jù)進(jìn)行整合,以便異類數(shù)據(jù)系統(tǒng)能形成單個(gè)數(shù)據(jù)視圖(例如,創(chuàng)建單個(gè)經(jīng)過(guò)整合的數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)客戶信息)。處理此問(wèn)題的另一個(gè)方法是創(chuàng)建虛擬數(shù)據(jù)服務(wù),以將數(shù)據(jù)冗余封裝在企業(yè)信息系統(tǒng)中,并通過(guò)高級(jí)服務(wù)或業(yè)務(wù)流程使用此數(shù)據(jù)服務(wù)。?為每個(gè)數(shù)據(jù)系統(tǒng)分別創(chuàng)建服務(wù)并不是使用SOA對(duì)企業(yè)信息系統(tǒng)的信息進(jìn)行聚合的好方法,因此必須避免這樣做。?
?? 7、“大爆炸”式SOA:
?? SOA的定義并不完全相同,具體取決于您在組織中的角色。對(duì)于業(yè)務(wù)執(zhí)行人員,SOA創(chuàng)建了企業(yè)希望向其客戶和合作伙伴或組織的其他部分公開(kāi)的一組服務(wù)。對(duì)于架構(gòu)師,SOA?是一種體系結(jié)構(gòu)樣式,此樣式至少需要有服務(wù)提供者、請(qǐng)求者和服務(wù)描述。對(duì)于程序員,SOA?是一個(gè)由標(biāo)準(zhǔn)、工具和?Web?服務(wù)等技術(shù)加以補(bǔ)充的編程模型。要理解和認(rèn)識(shí)SOA過(guò)渡是整個(gè)企業(yè)(涉及IT和業(yè)務(wù)部門(mén)一直到相關(guān)涉眾)的范式轉(zhuǎn)換并不難。此類范式轉(zhuǎn)換最好通過(guò)迭代模型實(shí)現(xiàn),在此類模型中,將標(biāo)識(shí)一組對(duì)業(yè)務(wù)非常關(guān)鍵且價(jià)值高的功能來(lái)進(jìn)行服務(wù)支持工作。此模型可隨后供后續(xù)服務(wù)支持項(xiàng)目和活動(dòng)使用。如果采用“大爆炸”方法,計(jì)劃一次性對(duì)整個(gè)企業(yè)投資組合全面啟用服務(wù),將給整個(gè)組織帶來(lái)太多的業(yè)務(wù)風(fēng)險(xiǎn)。?
??SOA?與其他體系結(jié)構(gòu)不同,因?yàn)樗@式地處理了企業(yè)很多的非技術(shù)約束。其中一個(gè)約束就是,大型組織往往采用增量方式逐步發(fā)展。組織的IT基礎(chǔ)設(shè)施應(yīng)該支持類似的發(fā)展方式。這樣的迭代式發(fā)展路線可解決以下問(wèn)題:?
? (1)故障風(fēng)險(xiǎn):IT正逐漸被視為現(xiàn)代企業(yè)的心臟。任何大型的IT故障都可能給公司帶來(lái)嚴(yán)重的財(cái)務(wù)和操作后果。因此,開(kāi)展和執(zhí)行IT項(xiàng)目時(shí)必須非常小心。迭代式發(fā)展可通過(guò)允許組織逐步進(jìn)行現(xiàn)代化工作,從而減少出現(xiàn)故障的風(fēng)險(xiǎn)。?
??(2)反對(duì)更改:任何組織接受和容納更改的能力都是有限的。更改將影響涉及手動(dòng)和自動(dòng)業(yè)務(wù)流程的企業(yè)日常操作。發(fā)展的方法可確保引入新的流程和系統(tǒng)帶來(lái)的更改非常適應(yīng)企業(yè)的容量,且不會(huì)在其人員中引起大的混亂。?
??(3)可行性:?新功能的大小應(yīng)該是影響其實(shí)現(xiàn)在整個(gè)企業(yè)內(nèi)的可行性的一個(gè)因素。在?SOA?中,新功能并不一定總是僅受單個(gè)業(yè)務(wù)部門(mén)(Line?Of?Business,LOB)的約束,需要考慮很多跨組織的依賴關(guān)系。
?由于?SOA?具有兩個(gè)重要的特征,因此非常適合采用迭代方式逐步過(guò)渡到其最終狀態(tài):?
?(1).?SOA?允許將大型功能片段分解為更易于管理的、經(jīng)過(guò)了大幅度分解的組件。在將SOA的原則應(yīng)用到處理企業(yè)的特定功能領(lǐng)域的子項(xiàng)目時(shí),可以很容易克服本身就有風(fēng)險(xiǎn)的“大爆炸”方法。這可確保平穩(wěn)過(guò)渡到最終狀態(tài),還能確保單個(gè)故障(如果出現(xiàn)了)并不會(huì)讓整個(gè)企業(yè)陷入崩潰狀態(tài)。?
?(2).?SOA?在很大程度上與技術(shù)無(wú)關(guān),因此可以將業(yè)務(wù)方面和技術(shù)方面分離,將其作為能夠以獨(dú)立方式進(jìn)行修改的獨(dú)立實(shí)體。SOA能以靈活的方式將業(yè)務(wù)功能及需求與IT功能聯(lián)系起來(lái),因此業(yè)務(wù)或?yàn)槠涮峁┲С值腎T都不會(huì)受到另一方的影響。?
? 想進(jìn)行“大爆炸”式過(guò)渡的企業(yè)可能并不適合使用SOA,更不用說(shuō)實(shí)現(xiàn)?SOA?的真正好處了。
? 8、忽視服務(wù)所有關(guān)系:
?? 業(yè)務(wù)服務(wù)的需求在部門(mén)或組織級(jí)別標(biāo)識(shí),其中的每個(gè)業(yè)務(wù)部門(mén)都具有特定的業(yè)務(wù)功能需求。其中一些業(yè)務(wù)功能直接與企業(yè)的業(yè)務(wù)目標(biāo)保持一致,而這意味著可能會(huì)將其作為通過(guò)外部化服務(wù)定義說(shuō)明的服務(wù)接口公開(kāi)。?沒(méi)有恰當(dāng)?shù)刂该鞣?wù)所有關(guān)系模型時(shí),會(huì)出現(xiàn)一個(gè)問(wèn)題。很多企業(yè)強(qiáng)調(diào)提供大量服務(wù),將這些服務(wù)用于進(jìn)行組合。而這些服務(wù)的所有關(guān)系需求通常卻被忽略了。?
?? 每個(gè)業(yè)務(wù)服務(wù)必須具有其所屬的、進(jìn)行了恰當(dāng)記錄并被一致認(rèn)可的LOB。伴隨所有關(guān)系的是滿足服務(wù)的非功能要求(NonFunctional?Requirement,NFR)和負(fù)責(zé)處理不遵從情況的責(zé)任。孤立業(yè)務(wù)服務(wù)的一個(gè)典型結(jié)果是不遵從服務(wù)SLA,而這可能使得服務(wù)成為企業(yè)級(jí)服務(wù)組合中最弱的聯(lián)系。這個(gè)最弱的聯(lián)系甚至可能會(huì)破壞此孤立服務(wù)參與的業(yè)務(wù)流程的總體SLA?要求,從而造成企業(yè)級(jí)的負(fù)面影響。?
?? 雖然對(duì)給定服務(wù)的LOB所有者而言,此類要求可能很高,但LOB所有者可以提供服務(wù)來(lái)創(chuàng)建積極的影響。假定LOB所有者將向其他部門(mén)的服務(wù)使用者收取一小筆費(fèi)用。反過(guò)來(lái),她將嚴(yán)格遵循指定的服務(wù)水平?SLA和NFR。這可以幫助她所在的業(yè)務(wù)單位補(bǔ)償服務(wù)的開(kāi)發(fā)成本。?
?? 業(yè)務(wù)域所有關(guān)系也同樣重要,因?yàn)槠髽I(yè)服務(wù)投資組合不應(yīng)該交給IT部門(mén)進(jìn)行開(kāi)發(fā)和維護(hù)工作。如果IT驅(qū)動(dòng)企業(yè)的SOA開(kāi)發(fā),他們通常會(huì)首先以最方便開(kāi)發(fā)服務(wù)為目標(biāo)(這也是可以理解的),而不會(huì)太多注意服務(wù)的業(yè)務(wù)價(jià)值。這個(gè)方法將導(dǎo)致業(yè)務(wù)目標(biāo)和所開(kāi)發(fā)的服務(wù)間的不一致。在這種情況下,SOA?的好處就不能實(shí)現(xiàn)。?
??服務(wù)的業(yè)務(wù)單位所有關(guān)系對(duì)企業(yè)SOA活動(dòng)的成功至關(guān)重要。當(dāng)未實(shí)現(xiàn)業(yè)務(wù)所有關(guān)系模型時(shí),SOA?可能成為企業(yè)SOA成功的拌腳石。?
??9、忽視SOA治理:
? 治理是一個(gè)決策權(quán)限和管理框架,可確保在正確時(shí)間由經(jīng)過(guò)授權(quán)的正確人員進(jìn)行正確處理。?
??企業(yè)進(jìn)行SOA轉(zhuǎn)換時(shí),由于服務(wù)所有關(guān)系通常分布在各個(gè)LOB中,因此需要認(rèn)真對(duì)待治理問(wèn)題。由于企業(yè)內(nèi)外各個(gè)組織進(jìn)行維護(hù)的移動(dòng)部件正在快速地增加,這使得有必要進(jìn)行相應(yīng)的治理。當(dāng)且僅當(dāng)服務(wù)得到有效的治理,嚴(yán)格遵循SLA和NFR(如安全性、可靠性、性能等方面)時(shí),業(yè)務(wù)服務(wù)的這種跨組織特性和潛在的跨組織邊界的服務(wù)組合才能正確而有效地發(fā)揮作用。?
?? 為了標(biāo)識(shí)、指定、創(chuàng)建和部署企業(yè)服務(wù),需要通過(guò)能夠監(jiān)督企業(yè)的服務(wù)投資組合的整個(gè)服務(wù)生命周期的強(qiáng)大而有效的組織進(jìn)行有效的面向服務(wù)的治理。為了保證策略規(guī)則和決策及其執(zhí)行和組織良好的服務(wù)生命周期管理要求,需要將SOA治理的實(shí)現(xiàn)作為企業(yè)SOA轉(zhuǎn)換的策略和計(jì)劃階段的一部分,而不是一個(gè)事后再添加的東西。?
?? 在SOA的早期,治理僅是一個(gè)不錯(cuò)的可選規(guī)程。但隨著在具有復(fù)雜、集成的價(jià)值鏈的實(shí)際企業(yè)中SOA實(shí)現(xiàn)的不斷成熟和復(fù)雜性的不斷提高,SOA治理如今在整個(gè)SOA過(guò)渡策略中扮演著不可或缺的角色。?
?? 未認(rèn)識(shí)到有效治理結(jié)構(gòu)的重要性的企業(yè)可能不會(huì)從SOA得到太多的好處。事實(shí)上,此類企業(yè)中的SOA實(shí)現(xiàn)會(huì)被證明實(shí)際上具有破壞性,而且缺乏正確的組織結(jié)構(gòu)來(lái)有效地遵循恰當(dāng)?shù)腟OA原則和獲得其好處。
?10、其他注意事項(xiàng)(轉(zhuǎn)SOA前三思):
?? 企業(yè)應(yīng)該避免為了創(chuàng)建軟件組件、基礎(chǔ)設(shè)施解決方案和服務(wù)來(lái)解決單個(gè)具體業(yè)務(wù)問(wèn)題而購(gòu)買(mǎi)中間件產(chǎn)品、數(shù)據(jù)庫(kù)系統(tǒng)和管理解決方案。此類具體的一對(duì)一的產(chǎn)品到解決方案映射可能會(huì)帶來(lái)冗余,或被證明成本太高,不適合SOA實(shí)現(xiàn)。相反,應(yīng)該將重點(diǎn)放在確定問(wèn)題間的共性,然后將這些共性反映到技術(shù)解決方案中。?
?? 不應(yīng)強(qiáng)制要求在SOA開(kāi)發(fā)的過(guò)程中進(jìn)行問(wèn)題域間的過(guò)度分離。細(xì)粒度問(wèn)題空間之間的此類過(guò)度分離可能導(dǎo)致基于服務(wù)的總體解決方案過(guò)度零碎。這樣可能會(huì)導(dǎo)致解決方案非常低效,特別在延遲和性能非常關(guān)鍵的情況下更是如此。?
?? 如果沒(méi)有恰當(dāng)?shù)腟OA遠(yuǎn)景,SOA設(shè)計(jì)人員和實(shí)現(xiàn)人員將無(wú)法確定企業(yè)應(yīng)該達(dá)到的最終狀態(tài)。服務(wù)必須能追溯到一個(gè)或多個(gè)業(yè)務(wù)目標(biāo),以證明其存在的必要性。如果無(wú)法根據(jù)某種業(yè)務(wù)度量標(biāo)準(zhǔn)測(cè)定?SOA?的好處,則SOA過(guò)渡的整個(gè)目的就值得商榷了。顯然,在沒(méi)有恰當(dāng)標(biāo)識(shí)、定義和記錄SOA遠(yuǎn)景、業(yè)務(wù)目標(biāo)和業(yè)務(wù)靈活性度量標(biāo)準(zhǔn)的情況下就著手進(jìn)行SOA活動(dòng)并不明智。?
?? 最后,企業(yè)需要了解自己對(duì)靈活性的需求。每個(gè)企業(yè)的業(yè)務(wù)靈活性需求并不相同。它們是由競(jìng)爭(zhēng)和差異化策略、上市時(shí)間及各種其他因素驅(qū)動(dòng)的。靈活性需要通過(guò)SOA實(shí)際實(shí)現(xiàn);靈活性的總體工程工作可能會(huì)影響企業(yè)的IT系統(tǒng)性能。?
最后:
?? SOA無(wú)論如何都不是魔術(shù),無(wú)法立即解決每個(gè)企業(yè)IT體系結(jié)構(gòu)的問(wèn)題。采用SOA時(shí),企業(yè)應(yīng)該充分了解各方面的信息,采取注重實(shí)效的方法,從而使得SOA的業(yè)務(wù)價(jià)值主張理論能與其實(shí)現(xiàn)的實(shí)際復(fù)雜性相符。不過(guò),如果正確實(shí)現(xiàn),且能避免此處討論的種種失誤,您將發(fā)現(xiàn)采用SOA的很多優(yōu)勢(shì)。?
后記:跟web服務(wù)打交道也有一段時(shí)間了,一直沒(méi)有時(shí)間好好整理一下,故將之前的一些資料和自己的一些見(jiàn)解整合了一下,陸續(xù)更新中。。。
?
轉(zhuǎn)載于:https://www.cnblogs.com/herizai/p/7144386.html
總結(jié)
以上是生活随笔為你收集整理的Service-Oriented Architecture,SOA(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sqlserver 存储过程 增加
- 下一篇: Linux初学:(二)Shell环境与命