那么什么是SOA,讓我們先從基本概念開(kāi)始講起。
什么是SOA?
SOA是一種架構模型,它可以根據需求通過(guò)網(wǎng)絡(luò )對松散耦合的粗粒度應用組件進(jìn)行分布式部署、組合和使用。服務(wù)層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴(lài)性。
SOA的關(guān)鍵是“服務(wù)”的概念,W3C將服務(wù)定義為:“服務(wù)提供者完成一組工作,為服務(wù)使用者交付所需的最終結果。最終結果通常會(huì )使使用者的狀態(tài)發(fā)生變化,但也可能使提供者的狀態(tài)改變,或者雙方都產(chǎn)生變化”。
Service-architecture.com將SOA定義為:“本質(zhì)上是服務(wù)的集合。服務(wù)間彼此通信,這種通信可能是簡(jiǎn)單的數據傳送,也可能是兩個(gè)或更多的服務(wù)協(xié)調進(jìn)行某些活動(dòng)。服務(wù)間需要某些方法進(jìn)行連接。所謂服務(wù)就是精確定義、封裝完善、獨立于其他服務(wù)所處環(huán)境和狀態(tài)的函數。”
Looselycoupled.com將SOA定義為:“按需連接資源的系統。在SOA中,資源被作為可通過(guò)標準方式訪(fǎng)問(wèn)的獨立服務(wù),提供給網(wǎng)絡(luò )中的其他成員。與傳統的系統結構相比,SOA規定了資源間更為靈活的松散耦合關(guān)系。”
Gartner則將SOA描述為:“客戶(hù)端/服務(wù)器的軟件設計方法,一項應用由軟件服務(wù)和軟件服務(wù)使用者組成……SOA與大多數通用的客戶(hù)端/服務(wù)器模型的不同之處,在于它著(zhù)重強調軟件組件的松散耦合,并使用獨立的標準接口。”
雖然不同廠(chǎng)商或個(gè)人對SOA有著(zhù)不同的理解,但是我們仍然可以從上述的定義中看到SOA的幾個(gè)關(guān)鍵特性:一種粗粒度、松耦合服務(wù)架構,服務(wù)之間通過(guò)簡(jiǎn)單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型。
需著(zhù)重注意的是,SOA并不是新生事物??大型IT組織成功構建和部署SOA應用已有多年的歷史??這要比現有的XML和Web服務(wù)長(cháng)很多。IBM CICS和BEA TUXEDO就是過(guò)去被用于構建SOA應用的兩種技術(shù)范例。
SOA要求開(kāi)發(fā)人員將應用設計為服務(wù)的集合。SOA要求開(kāi)發(fā)人員跳出應用本身進(jìn)行思考,考慮現有服務(wù)的重用,或思索他們的服務(wù)如何能夠被其他項目重用。“單獨的”、“獨立的”、“封裝完善的”服務(wù)所具有的一個(gè)關(guān)鍵的好處是,可以采用多種不同方法將它們組合成較大型的服務(wù),由此來(lái)實(shí)現重用。
SOA的基本特征
SOA的實(shí)施具有幾個(gè)鮮明的基本特征。實(shí)施SOA的關(guān)鍵目標是實(shí)現企業(yè)IT資產(chǎn)的最大化重用。要實(shí)現這一目標,就要在實(shí)施SOA的過(guò)程中牢記以下特征:
﹡ 可從企業(yè)外部訪(fǎng)問(wèn)
﹡ 隨時(shí)可用
﹡ 粗粒度的服務(wù)接口
﹡ 分級
﹡ 松散耦合
﹡ 可重用的服務(wù)
﹡ 服務(wù)接口設計管理
﹡ 標準化的服務(wù)接口
﹡ 支持各種消息模式
﹡ 精確定義的服務(wù)契約
我們現在開(kāi)始依次討論以上概念。
1 可從企業(yè)外部訪(fǎng)問(wèn)
除了B2B協(xié)議外,外部用戶(hù)還可以訪(fǎng)問(wèn)以Web服務(wù)方式提供的企業(yè)服務(wù)。
2 隨時(shí)可用
當有服務(wù)使用者請求服務(wù)時(shí),SOA要求必須有服務(wù)提供者能夠響應。大多數SOA都能夠為門(mén)戶(hù)應用之類(lèi)的同步應用和B2B之類(lèi)的異步應用提供服務(wù)。同步應用對于其所使用的服務(wù)具有很強的依賴(lài)性。
許多同步應用通常部署在前臺,其最終用戶(hù)很容易受到服務(wù)提供者短缺的影響。很多情況下,同步應用利用分布式服務(wù)提供者,這樣可以響應更多的用戶(hù)請求。但是,隨著(zhù)提供特定服務(wù)功能的服務(wù)器數量的增長(cháng),出現短缺的可能性也呈指數級上升。
當相比之下,異步應用要更為穩健,因為其采用隊列請求設計,因此可以容許出現服務(wù)提供者短缺或遲滯的情況。異步應用大多數情況下部署在后臺,用戶(hù)通常不會(huì )覺(jué)察到短暫的短缺。大部分情況下異步應用能夠穩健應對短時(shí)間短缺,但是長(cháng)時(shí)間短缺則會(huì )引發(fā)嚴重問(wèn)題。在服務(wù)短缺解決、隊列引擎將罕見(jiàn)的大量工作推到共享的應用資源中時(shí),可能會(huì )出現隊列溢出甚至服務(wù)死鎖。
服務(wù)使用者要求提供同步服務(wù)時(shí),通常是基于其自身理解或使用習慣。在多數情況下,采用異步模型可以達到同樣的效果,但更能夠體現SOA的最佳特性。
當然,并不是所有情況下都應當采用異步設計模式。但大多數情況下,異步消息可以確保系統在不同負荷下的伸縮性,在接口響應時(shí)間不是很短時(shí)尤其如此。
3 粗粒度服務(wù)接口
粗粒度服務(wù)提供一項特定的業(yè)務(wù)功能,而細粒度服務(wù)代表了技術(shù)組件方法。舉個(gè)例說(shuō)明最為清楚??向計費系統中添加一個(gè)客戶(hù)是典型的粗粒度服務(wù),而你可以使用幾個(gè)細粒度服務(wù)實(shí)現同一功能,如:將客戶(hù)名加入到計費系統中,添加詳細的客戶(hù)聯(lián)系方式、添加計費信息等等。
采用粗粒度服務(wù)接口的優(yōu)點(diǎn)在于使用者和服務(wù)層之間不必再進(jìn)行多次的往復,一次往復就足夠。Internet環(huán)境中有保障的TCP/IP會(huì )話(huà)已不再占據主導、建立連接的成本也過(guò)高,因此在該環(huán)境中進(jìn)行應用開(kāi)發(fā)時(shí)粗粒度服務(wù)接口的優(yōu)點(diǎn)更為明顯。
除去基本的往復效率,事務(wù)穩定性問(wèn)題也很重要。在一個(gè)單獨事務(wù)中包含的多段細粒度請求可能使事務(wù)處理時(shí)間過(guò)長(cháng)、導致后臺服務(wù)超時(shí),從而中止。與此相反,從事務(wù)的角度來(lái)看,向后臺服務(wù)請求大塊數據可能是獲取反饋的唯一途徑。
4 分級
一個(gè)關(guān)于粗粒度服務(wù)的爭論是此類(lèi)服務(wù)比細粒度服務(wù)的重用性差,因為粗粒度服務(wù)傾向于解決專(zhuān)門(mén)的業(yè)務(wù)問(wèn)題,因此通用性差、重用性設計困難。解決該爭論的方法之一就是允許采用不同的粗粒度等級來(lái)創(chuàng )建服務(wù)。這種服務(wù)分級包含了粒度較細、重用性較高的服務(wù),也包含粒度較粗、重用性較差的服務(wù)。
在服務(wù)分級方面,須注意服務(wù)層的公開(kāi)服務(wù)通常由后臺系統(BES's)或SOA平臺中現有的本地服務(wù)組成。因此允許在服務(wù)層創(chuàng )建私有服務(wù)是非常重要的。正確的文檔、配置管理和私有服務(wù)的重用對于IT部門(mén)在SOA服務(wù)層快速開(kāi)發(fā)新的公開(kāi)服務(wù)的能力具有重要影響。
5 松散耦合
SOA具有“松散耦合”組件服務(wù),這一點(diǎn)區別于大多數其他的組件架構。該方法旨在將服務(wù)使用者和服務(wù)提供者在服務(wù)實(shí)現和客戶(hù)如何使用服務(wù)方面隔離開(kāi)來(lái)。
服務(wù)提供者和服務(wù)使用者間松散耦合背后的關(guān)鍵點(diǎn)是服務(wù)接口作為與服務(wù)實(shí)現分離的實(shí)體而存在。這是服務(wù)實(shí)現能夠在完全不影響服務(wù)使用者的情況下進(jìn)行修改。
大多數松散耦合方法都依靠基于服務(wù)接口的消息?;谙⒌慕涌谀軌蚣嫒荻喾N傳輸方式(如HTTP、JMS、TCP/IP、MOM等)?;谙⒌慕涌诳梢圆捎猛胶彤惒絽f(xié)議實(shí)現,Web服務(wù)對于SOA服務(wù)接口來(lái)講是一個(gè)重要的標準。
當使用者調用一個(gè)Web服務(wù)時(shí),被調用的對象可以是CICS事務(wù)、DCOM或CORBA對象、J2EE EJB或TUXEDO服務(wù)等,但這與服務(wù)使用者無(wú)關(guān)。底層實(shí)現并不重要。
消息類(lèi)Web服務(wù)通常是松散耦合和文檔驅動(dòng)的,這要優(yōu)于與服務(wù)特定接口的連接。當客戶(hù)調用消息類(lèi)Web服務(wù)時(shí),客戶(hù)通常會(huì )發(fā)送的是一個(gè)完整的文檔(如采購訂單),而非一組離散的參數。Web服務(wù)接收整個(gè)文檔、進(jìn)行處理、而后可能或者不會(huì )返回結果信息。由于客戶(hù)和Web服務(wù)間不存在緊密耦合請求響應,消息類(lèi)Web服務(wù)在客戶(hù)和服務(wù)器間提供了更為松散的耦合。
6 可重用的服務(wù)及服務(wù)接口設計管理
如果完全按照可重用的原則設計服務(wù),SOA將可以使應用變得更為靈活??芍赜梅?wù)采用通用格式提供重要的業(yè)務(wù)功能,為開(kāi)發(fā)人員節約了大量時(shí)間。設計可重用服務(wù)是與數據庫設計或通用數據建模類(lèi)似的最有價(jià)值的工作。由于服務(wù)設計是成功的關(guān)鍵因此,因此SOA實(shí)施者應當尋找一種適當的方法進(jìn)行服務(wù)設計過(guò)程管理。
服務(wù)設計管理根本上講是服務(wù)設計問(wèn)題,服務(wù)設計需要在兩點(diǎn)間折衷??走捷徑的項目戰術(shù)與企業(yè)構建可重用通用服務(wù)的長(cháng)期目標。
超越項目短期目標進(jìn)行服務(wù)接口的開(kāi)發(fā)和評估是邁向精確定義服務(wù)接口的重要一步,同時(shí)還需要為接口文檔、服務(wù)實(shí)現文檔及所有重要的非功能性特征設立標準。
在大型組織中實(shí)現重用的一個(gè)先決條件是建立通用(設計階段)服務(wù)庫和開(kāi)發(fā)流程,以保證重用的正確性和通用性。此外,對記述服務(wù)設計和開(kāi)發(fā)的服務(wù)文檔進(jìn)行評估也是成功利用服務(wù)庫的關(guān)鍵。
簡(jiǎn)言之,不按規則編寫(xiě)服務(wù)將無(wú)法保證可提供重用性的SOA的成功實(shí)施。在執行規則的過(guò)程中會(huì )產(chǎn)生財務(wù)費用,需要在制定SOA實(shí)施計劃時(shí)加以考慮。
7 標準化的接口
Web服務(wù)使應用功能得以通過(guò)標準化接口(WSDL)提供,并可基于標準化傳輸方式(HTTP和JMS)、采用標準化協(xié)議(SOAP)進(jìn)行調用。例如,開(kāi)發(fā)人員可以采用最適于門(mén)戶(hù)開(kāi)發(fā)的工具輕松創(chuàng )建一個(gè)新的門(mén)戶(hù)應用,并可以重用ERP系統和定制化J2EE應用中的現有服務(wù),而完全無(wú)須了解這些應用的內部工作原理。采用XML,門(mén)戶(hù)開(kāi)發(fā)人員無(wú)須了解特定的數據表示格式,便能夠在這些應用間輕松地交換數據。
8 支持各種消息模式
SOA中可能存在以下消息模式。在一個(gè)SOA實(shí)現中,常會(huì )出現混合采用不同消息模式的服務(wù)。
﹡無(wú)狀態(tài)的消息。使用者向提供者發(fā)送的每條消息都必須包含提供者處理該消息所需的全部信息。這一限定使服務(wù)提供者無(wú)須存儲使用者的狀態(tài)信息,從而更易擴展。
﹡有狀態(tài)的消息。使用者與提供者共享使用者的特定環(huán)境信息,此信息包含在提供者和使用者交換的消息中。這一限定使提供者與使用者間的通信更加靈活,但由于服務(wù)提供者必須存儲每個(gè)使用者的共享環(huán)境信息,因此其整體可擴展性明顯減弱。該限定增強了服務(wù)提供者和使用者的耦合關(guān)系,提高了交換服務(wù)提供者的服務(wù)難度。
﹡等冪消息。向軟件代理發(fā)送多次重復消息的效果和發(fā)送單條消息相同。這一限定使提供者和消費者能夠在出現故障時(shí)簡(jiǎn)單的復制消息,從而改進(jìn)服務(wù)可靠性。
9 精確定義的服務(wù)接口
服務(wù)是由提供者和使用者間的契約定義的。契約規定了服務(wù)使用方法及使用者期望的最終結果。此外,還可以在其中規定服務(wù)質(zhì)量。此處需要注意的關(guān)鍵點(diǎn)是,服務(wù)契約必須進(jìn)行精確定義。
META將SOA定義為:“一種以通用為目的、可擴展、具有聯(lián)合協(xié)作性的架構,所有流程都被定義為服務(wù),服務(wù)通過(guò)基于類(lèi)封裝的服務(wù)接口委托給服務(wù)提供者,服務(wù)接口根據可擴展標識符、格式和協(xié)議單獨描述。”該定義的最后部分表明在服務(wù)接口和其實(shí)現之間有明確的分界。
SOA的優(yōu)點(diǎn)
了解了SOA的定義和基本特征,最后我們再來(lái)看看SOA潛在的優(yōu)點(diǎn):
﹡編碼靈活性
可基于模塊化的低層服務(wù)、采用不同組合方式創(chuàng )建高層服務(wù),從而實(shí)現重用,這些都體現了編碼的靈活性。此外,由于服務(wù)使用者不直接訪(fǎng)問(wèn)服務(wù)提供者,這種服務(wù)實(shí)現方式本身也可以靈活使用。
﹡明確開(kāi)發(fā)人員角色
例如,熟悉BES的開(kāi)發(fā)人員可以集中精力在重用訪(fǎng)問(wèn)層,協(xié)調層開(kāi)發(fā)人員則無(wú)須特別了解BES的實(shí)現,而將精力放在解決高價(jià)值的業(yè)務(wù)問(wèn)題上。
﹡支持多種客戶(hù)類(lèi)型
借助精確定義的服務(wù)接口和對XML、Web服務(wù)標準的支持,可以支持多種客戶(hù)類(lèi)型,包括PDA、手機等新型訪(fǎng)問(wèn)渠道。
﹡更易維護
服務(wù)提供者和服務(wù)使用者的松散耦合關(guān)系及對開(kāi)放標準的采用確保了該特性的實(shí)現。
﹡更好的伸縮性
依靠服務(wù)設計、開(kāi)發(fā)和部署所采用的架構模型實(shí)現伸縮性。服務(wù)提供者可以彼此獨立調整,以滿(mǎn)足服務(wù)需求。
﹡更高的可用性
該特性在服務(wù)提供者和服務(wù)使用者的松散耦合關(guān)系上得以體現。使用者無(wú)須了解提供者的實(shí)現細節,這樣服務(wù)提供者就可以在WebLogic集群環(huán)境中靈活部署,使用者可以被轉接到可用的例程上。
SOA可以看作是B/S模型、XML/Web Service技術(shù)之后的自然延伸。SOA將能夠幫助我們站在一個(gè)新的高度理解企業(yè)級架構中的各種組件的開(kāi)發(fā)、部署形式,它將幫助企業(yè)系統架構者以更迅速、更可靠、更具重用性架構整個(gè)業(yè)務(wù)系統。較之以往,以SOA架構的系統能夠更加從容地面對業(yè)務(wù)的急劇變化。
聯(lián)系客服