SOA架构简介
一、 什么是SOA 架構(gòu)
SOA是一種架構(gòu)模型,它可以根據(jù)需求通過(guò)網(wǎng)絡(luò)對(duì)松散耦合的粗粒度應(yīng)用組件進(jìn)行分布式部署、組合和使用。服務(wù)層是SOA的基礎(chǔ),可以直接被應(yīng)用調(diào)用,從而有效控制系統(tǒng)中與軟件代理交互的人為依賴性。
SOA的關(guān)鍵是“服務(wù)”的概念 。 它是 作為一種面向服務(wù)的架構(gòu),是一種軟件架構(gòu)設(shè)計(jì)的模型和方法論。從業(yè)務(wù)角度來(lái)看,一切以最大化“服務(wù)”的價(jià)值為出發(fā)點(diǎn),SOA利用企業(yè)現(xiàn)有的各種軟件體系,重新整合并構(gòu)建起一套新的軟件架構(gòu)。這套軟件架構(gòu)能夠隨著業(yè)務(wù)的變化,隨時(shí)靈活地結(jié)合現(xiàn)有服務(wù),組成新軟件,共同服務(wù)于整個(gè)企業(yè)的業(yè)務(wù)體系。簡(jiǎn)單的理解,我們可以把SOA看作是模塊化的組件,每個(gè)模塊都可以實(shí)現(xiàn)獨(dú)立功能,而不同模塊之間的結(jié)合則可以提供不同的服務(wù),模塊之間的接口遵循統(tǒng)一標(biāo)準(zhǔn),可以實(shí)現(xiàn)低成本的重構(gòu)和重組。在SOA的技術(shù)框架下,可以把雜亂無(wú)章的龐大系統(tǒng)整合成一個(gè)全面有序的系統(tǒng),從而增加企業(yè)在業(yè)務(wù)發(fā)展過(guò)程中應(yīng)用系統(tǒng)的靈活性,實(shí)現(xiàn)最大的IT資產(chǎn)利用率。
雖然 ,目前 不同廠商或個(gè)人對(duì)SOA有著不同的理解,但是 對(duì)于 SOA的幾個(gè)關(guān)鍵特性 的認(rèn)識(shí)卻是一致的 :一種粗粒度、松耦合服務(wù)架構(gòu),服務(wù)之間通過(guò)簡(jiǎn)單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型。
需著重注意的是,SOA并不是新生事物 。 大型IT組織成功構(gòu)建和部署SOA應(yīng)用已有多年的歷史 。但 SOA并不是一種現(xiàn)成的技術(shù),而是一種架構(gòu)和組織IT基礎(chǔ)結(jié)構(gòu)及業(yè)務(wù)功能的方法。SOA 這 種開(kāi)發(fā)方法 , 具有 較好的 管理上的優(yōu)點(diǎn)。
二、 SOA 架構(gòu)的基本特征
SOA的實(shí)施具有幾個(gè)鮮明的基本特征。實(shí)施SOA的關(guān)鍵目標(biāo)是實(shí)現(xiàn)企業(yè)IT資產(chǎn)的最大化重用。要實(shí)現(xiàn)這一目標(biāo),就要在實(shí)施SOA的過(guò)程中牢記以下特征:
①? 可從企業(yè)外部訪問(wèn)和時(shí)可用
業(yè)務(wù)伙伴 采用先進(jìn)的B2B協(xié)議(ebXML或RosettaNet )相互合。當(dāng)業(yè)務(wù)伙伴基于業(yè)務(wù)目的交換業(yè)務(wù)信息時(shí),他們通過(guò) B2B協(xié)議 創(chuàng)建會(huì)話來(lái)完成。而外部用戶則通過(guò)web服務(wù)方式提供企業(yè)服務(wù)。
當(dāng)有服務(wù)使用者請(qǐng)求服務(wù)時(shí),SOA要求必須有服務(wù)提供者能夠響應(yīng)。大多數(shù)SOA都能夠?yàn)殚T(mén)戶應(yīng)用之類(lèi)的同步應(yīng)用和B2B之類(lèi)的異步應(yīng)用提供服務(wù)。
②? 粗粒度的服務(wù)接口
粗粒度服務(wù)提供一項(xiàng)特定的業(yè)務(wù)功能,而細(xì)粒度服務(wù)代表了技術(shù)組件方法。采用粗粒度服務(wù)接口的優(yōu)點(diǎn)在于使用者和服務(wù)層之間不必再進(jìn)行多次的往復(fù),一次往復(fù)就足夠。
③? 分級(jí)
一個(gè)關(guān)于粗粒度服務(wù)的爭(zhēng)論是此類(lèi)服務(wù)比細(xì)粒度服務(wù)的重用性差,因?yàn)榇至6确?wù)傾向于解決專門(mén)的業(yè)務(wù)問(wèn)題,因此通用性差、重用性設(shè)計(jì)困難。解決該爭(zhēng)論的方法之一就是允許采用不同的粗粒度等級(jí)來(lái)創(chuàng)建服務(wù)。這種服務(wù)分級(jí)包含了粒度較細(xì)、重用性較高的服務(wù),也包含粒度較粗、重用性較差的服務(wù)。
在服務(wù)分級(jí)方面,須注意服務(wù)層的公開(kāi)服務(wù)通常由后臺(tái)系統(tǒng)(BES's)或SOA平臺(tái)中現(xiàn)有的本地服務(wù)組成。因此允許在服務(wù)層創(chuàng)建私有服務(wù)是非常重要的。正確的文檔、配置管理和私有服務(wù)的重用對(duì)于IT部門(mén)在SOA服務(wù)層快速開(kāi)發(fā)新的公開(kāi)服務(wù)的能力具有重要影響。
④? 松散耦合
SOA具有“松散耦合”組件服務(wù),這一點(diǎn)區(qū)別于大多數(shù)其他的組件架構(gòu)。該方法旨在將服務(wù)使用者和服務(wù)提供者在服務(wù)實(shí)現(xiàn)和客戶如何使用服務(wù)方面隔離開(kāi)來(lái)。 其關(guān)鍵 是服務(wù)接口作為與服務(wù)實(shí)現(xiàn)分離的實(shí)體而存在 , 這 使得 服務(wù)實(shí)現(xiàn)能夠在完全不影響服務(wù)使用者的情況下進(jìn)行修改。
多數(shù)松散耦合方法都依靠基于服務(wù)接口的消息?;谙⒌慕涌谀軌蚣嫒荻喾N傳輸方式 ,并可采用多種傳輸方式。 松散耦合和文檔驅(qū)動(dòng)的Web服務(wù)對(duì)于SOA服務(wù)接口來(lái)講是一個(gè)重要的標(biāo)準(zhǔn)。
當(dāng)客戶調(diào)用消息類(lèi)Web服務(wù)時(shí),客戶通常會(huì)發(fā)送的是一個(gè)完整的文檔(如采購(gòu)訂單),而非一組離散的參數(shù)。Web服務(wù)接收整個(gè)文檔、進(jìn)行處理、而后可能或者不會(huì)返回結(jié)果信息。由于客戶和Web服務(wù)間不存在緊密耦合請(qǐng)求響應(yīng),消息類(lèi)Web服務(wù)在客戶和服務(wù)器間提供了更為松散的耦合。
⑤? 可重用的服務(wù)
如果完全按照可重用的原則設(shè)計(jì)服務(wù),SOA將可以使應(yīng)用變得更為靈活。可重用服務(wù)采用通用格式提供重要的業(yè)務(wù)功能,為開(kāi)發(fā)人員節(jié)約了大量時(shí)間。設(shè)計(jì)可重用服務(wù)是與數(shù)據(jù)庫(kù)設(shè)計(jì)或通用數(shù)據(jù)建模類(lèi)似的最有價(jià)值的工作。由于服務(wù)設(shè)計(jì)是成功的關(guān)鍵因此,因此SOA實(shí)施者應(yīng)當(dāng)尋找一種適當(dāng)?shù)姆椒ㄟM(jìn)行服務(wù)設(shè)計(jì)過(guò)程管理。
服務(wù)設(shè)計(jì)管理根本上講是服務(wù)設(shè)計(jì)問(wèn)題,服務(wù)設(shè)計(jì)需要在兩點(diǎn)間折衷 。 走捷徑的項(xiàng)目戰(zhàn)術(shù)與企業(yè)構(gòu)建可重用通用服務(wù)的長(zhǎng)期目標(biāo)。
超越項(xiàng)目短期目標(biāo)進(jìn)行服務(wù)接口的開(kāi)發(fā)和評(píng)估是邁向精確定義服務(wù)接口的重要一步,同時(shí)還需要為接口文檔、服務(wù)實(shí)現(xiàn)文檔及所有重要的非功能性特征設(shè)立標(biāo)準(zhǔn)。
在大型組織中實(shí)現(xiàn)重用的一個(gè)先決條件是建立通用(設(shè)計(jì)階段)服務(wù)庫(kù)和開(kāi)發(fā)流程,以保證重用的正確性和通用性。此外,對(duì)記述服務(wù)設(shè)計(jì)和開(kāi)發(fā)的服務(wù)文檔進(jìn)行評(píng)估也是成功利用服務(wù)庫(kù)的關(guān)鍵。
簡(jiǎn)言之,不按規(guī)則編寫(xiě)服務(wù)將無(wú)法保證可提供重用性的SOA的成功實(shí)施。在執(zhí)行規(guī)則的過(guò)程中會(huì)產(chǎn)生財(cái)務(wù)費(fèi)用,需要在制定SOA實(shí)施計(jì)劃時(shí)加以考慮。
⑥? 服務(wù)接口設(shè)計(jì)管理
Web服務(wù)使應(yīng)用功能得以通過(guò)標(biāo)準(zhǔn)化接口(WSDL)提供,并可基于標(biāo)準(zhǔn)化傳輸方式(HTTP和JMS)、采用標(biāo)準(zhǔn)化協(xié)議(SOAP)進(jìn)行調(diào)用。 而 采用Web服務(wù)或XML來(lái)創(chuàng)建SOA應(yīng)用, 這會(huì)使其具有更好的通用性。
⑦? 標(biāo)準(zhǔn)化的服務(wù)接口
SOA中可能存在以下消息模式。在一個(gè)SOA實(shí)現(xiàn)中,常會(huì)出現(xiàn)混合采用不同消息模式的服務(wù)。
﹡無(wú)狀態(tài)的消息。使用者向提供者發(fā)送的每條消息都必須包含提供者處理該消息所需的全部信息。這一限定使服務(wù)提供者無(wú)須存儲(chǔ)使用者的狀態(tài)信息,從而更易擴(kuò)展。
﹡有狀態(tài)的消息。使用者與提供者共享使用者的特定環(huán)境信息,此信息包含在提供者和使用者交換的消息中。這一限定使提供者與使用者間的通信更加靈活,但由于服務(wù)提供者必須存儲(chǔ)每個(gè)使用者的共享環(huán)境信息,因此其整體可擴(kuò)展性明顯減弱。該限定增強(qiáng)了服務(wù)提供者和使用者的耦合關(guān)系,提高了交換服務(wù)提供者的服務(wù)難度。
﹡等冪消息。向軟件代理發(fā)送多次重復(fù)消息的效果和發(fā)送單條消息相同。這一限定使提供者和消費(fèi)者能夠在出現(xiàn)故障時(shí)簡(jiǎn)單的復(fù)制消息,從而改進(jìn)服務(wù)可靠性。
⑧? 支持各種消息模式
服務(wù)是由提供者和使用者間的契約定義的。契約規(guī)定了服務(wù)使用方法及使用者期望的最終結(jié)果。此外,還可以在其中規(guī)定服務(wù)質(zhì)量。此處需要注意的關(guān)鍵點(diǎn)是,服務(wù)契約必須進(jìn)行精確定義。
三、可以使用SOA做什么?
對(duì) SOA 的需要來(lái)源于需要使業(yè)務(wù)IT系統(tǒng)變得更加靈活,以適應(yīng)業(yè)務(wù)中的改變。通過(guò)允許強(qiáng)定義的關(guān)系和依然靈活的特定實(shí)現(xiàn),IT系統(tǒng)既可以利用現(xiàn)有系統(tǒng)的功能,又可以準(zhǔn)備在以后做一些改變來(lái)滿足它們之間交互的需要。
下面舉一個(gè)具體的例子。一個(gè)服裝零售組織擁有500家國(guó)際連鎖店,它們常常需要更改設(shè)計(jì)來(lái)趕上時(shí)尚的潮流。這可能意味著不僅需要更改樣式和顏色,甚至還可能需要更換布料、制造商和可交付的產(chǎn)品。如果零售商和制造商之間的系統(tǒng)不兼容,那么從一個(gè)供應(yīng)商到另一個(gè)供應(yīng)商的更換可能就是一個(gè)非常復(fù)雜的軟件流程。通過(guò)利用WSDL接口在操作方面的靈活性,每個(gè)公司都可以將它們的現(xiàn)有系統(tǒng)保持現(xiàn)狀,而僅僅匹配WSDL接口并制訂新的服務(wù)級(jí)協(xié)定,這樣就不必完全重構(gòu)它們的軟件系統(tǒng)了。這是業(yè)務(wù)的水平改變,也就是說(shuō),它們改變的是合作伙伴,而所有的業(yè)務(wù)操作基本上都保持不變。這里,業(yè)務(wù)接口可以作少許改變,而內(nèi)部操作卻不需要改變,之所以這樣做,僅僅是為了能夠與外部合作伙伴一起工作。
另一種形式是內(nèi)部改變,在這種改變中,零售組織現(xiàn)在決定它還將把連鎖零售商店內(nèi)的一些地方出租給專賣(mài)流行衣服的小商店,這可以看作是采用店中店( store-in-store )的業(yè)務(wù)模型。這里,雖然公司的大多數(shù)業(yè)務(wù)操作都保持不變,但是它們現(xiàn)在需要新的內(nèi)部軟件來(lái)處理這樣的出租安排。盡管在內(nèi)部軟件系統(tǒng)可以承受全面的檢修,但是它們需要在這樣做的同時(shí)不會(huì)對(duì)與現(xiàn)有的供應(yīng)商系統(tǒng)的交互產(chǎn)生大的影響。在這種情況下,SOA 模型保持原封不動(dòng),而內(nèi)部實(shí)現(xiàn)卻發(fā)生了變化。雖然可以將新的方面添加到 SOA 模型中來(lái)加入新的出租安排的職責(zé),但是正常的零售管理系統(tǒng)繼續(xù)如往常一樣。
為了延續(xù)內(nèi)部改變的觀念,IT經(jīng)理可能會(huì)發(fā)現(xiàn),軟件的新配置還可以以另外的一種方式加以使用,比如出租粘貼海報(bào)的地方以供廣告之用。這里,新的業(yè)務(wù)提議是通過(guò)在新的設(shè)計(jì)中重用靈活的SOA模型得出的。這是來(lái)自SOA? 模型的新成果,并且還是一個(gè)新的機(jī)會(huì),而這樣的新機(jī)會(huì)在以前可能是不會(huì)有的。
垂直改變也是可能的,在這種改變中,零售商從銷(xiāo)售他們自己的服裝完全轉(zhuǎn)變到專門(mén)通過(guò)店中店模型出租地方。如果垂直改變完全從最底層開(kāi)始的話,就會(huì)帶來(lái)SOA模型結(jié)構(gòu)的顯著改變,與之一起改變的還可能有新的系統(tǒng)、軟件、流程以及關(guān)系。在這種情況下,SOA模型的好處是它從業(yè)務(wù)操作和流程的角度考慮問(wèn)題而不是從應(yīng)用程序和程序的角度考慮問(wèn)題,這使得業(yè)務(wù)管理可以根據(jù)業(yè)務(wù)的操作清楚地確定什么需要添加、修改或刪除。然后可以將軟件系統(tǒng)構(gòu)造為適合業(yè)務(wù)處理的方式,而不是在許多現(xiàn)有的軟件平臺(tái)上常常看到的其他方式。
在這里,改變和 SOA系統(tǒng)適應(yīng)改變的能力是最重要的部分。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),這樣的改變無(wú)論是在他們工作的范圍之內(nèi)還是在他們工作的范圍之外都有可能發(fā)生,這取決于是否有改變需要知道接口是如何定義的以及它們相互之間如何進(jìn)行交互。與開(kāi)發(fā)人員不同的是,架構(gòu)師的作用就是引起對(duì)SOA模型大的改變。這種分工,就是讓開(kāi)發(fā)人員集中精力于創(chuàng)建作為服務(wù)定義的功能單元,而讓架構(gòu)師和建模人員集中精力于如何將這些單元適當(dāng)?shù)亟M織在一起,它已經(jīng)有十多年的歷史了,通常用統(tǒng)一建模語(yǔ)言(Universal Modeling Language ,UML),并且描述成模型驅(qū)動(dòng)的體系結(jié)構(gòu)(Model-Driven Architecture,MDA)。
對(duì)于面向同步和異步應(yīng)用的,基于請(qǐng)求/響應(yīng)模式的分布式計(jì)算來(lái)說(shuō), SOA 是一場(chǎng)革命。一個(gè)應(yīng)用程序的業(yè)務(wù)邏輯( business logic )或某些單獨(dú)的功能被模塊化并作為服務(wù)呈現(xiàn)給消費(fèi)者或客戶端。這些服務(wù)的關(guān)鍵是他們的松耦合特性。例如,服務(wù)的接口和實(shí)現(xiàn)相獨(dú)立。應(yīng)用開(kāi)發(fā)人員或者系統(tǒng)集成者可以通過(guò)組合一個(gè)或多個(gè)服務(wù)來(lái)構(gòu)建應(yīng)用,而無(wú)須理解服務(wù)的底層實(shí)現(xiàn)。舉例來(lái)說(shuō),一個(gè)服務(wù)可以用。NET 或 J2EE來(lái)實(shí)現(xiàn),而使用該服務(wù)的應(yīng)用程序可以在不同的平臺(tái)之上,使用的語(yǔ)言也可以不同。
四、SOA架構(gòu)的目的和意義
軟件產(chǎn)品設(shè)計(jì)成SOA架構(gòu)及目的或者現(xiàn)實(shí)的意義是:保全或保護(hù)企業(yè)原來(lái)遺留下來(lái)的軟件系統(tǒng)(數(shù)據(jù)),實(shí)現(xiàn)軟件數(shù)據(jù)的無(wú)縫接軌,避免企業(yè)原有投資打水漂、數(shù)據(jù)需重復(fù)錄入。由此,可以縮短軟件產(chǎn)品的實(shí)施推廣期??梢栽趯?shí)施推廣期間,快速調(diào)整以最大程度的滿足客戶的需求。在客戶應(yīng)用業(yè)務(wù)發(fā)生改變,必須進(jìn)行新的投入、改造時(shí),產(chǎn)品可以進(jìn)行新的快速擴(kuò)展或直接第三方設(shè)備(軟、硬件)兼容。從而避免產(chǎn)品本身的僵化,成為使用者的遺留系統(tǒng)。SOA架構(gòu)可以看作是B/S模型、XML/Web Service技術(shù)之后的自然延伸。 它 將能夠幫助我們站在一個(gè)新的高度理解企業(yè)級(jí)架構(gòu)中的各種組件的開(kāi)發(fā)、部署形式,它將幫助企業(yè)系統(tǒng)架構(gòu)者以更迅速、更可靠、更具重用性架構(gòu)整個(gè)業(yè)務(wù)系統(tǒng)。較之以往,以SOA 架構(gòu)的系統(tǒng)能夠更加從容地面對(duì)業(yè)務(wù)的急劇變化,具有更強(qiáng)的適應(yīng)性。
轉(zhuǎn)載于:https://www.cnblogs.com/qilin20/p/10964288.html
總結(jié)
- 上一篇: bzoj4316: 小C的独立集
- 下一篇: 数据段、代码段、堆栈段、BSS段的区别