SOA(Service-Oriented Architecture)是面向服務(wù)的架構(gòu),它是一種粗粒度、松耦合服務(wù)架構(gòu),服務(wù)之間通過簡單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型,將應(yīng)用程序的不同功能單元(稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。
一、SOA是什么
SOA(Service-Oriented Architecture,面向服務(wù)的架構(gòu))是一種在計(jì)算機(jī)環(huán)境中設(shè)計(jì)、開發(fā)、部署和管理離散模型的方法。SOA不是一種新鮮事物,它是在企業(yè)內(nèi)部IT系統(tǒng)重復(fù)構(gòu)建以及效率低下的背景下提出的。在SOA模型中,所有的功能都被定義成了獨(dú)立的服務(wù),所有的服務(wù)通過服務(wù)總線(ESB)或流程管理器來連接。這種松散耦合的結(jié)構(gòu)使得能夠以最小的代價(jià)整合已經(jīng)存在的各種異構(gòu)系統(tǒng),當(dāng)然,由于需要實(shí)現(xiàn)對(duì)各種異構(gòu)系統(tǒng)的適配(通常使用ESB來完成不同系統(tǒng)之間的協(xié)議轉(zhuǎn)換及數(shù)據(jù)格式轉(zhuǎn)換),因此,其本身也會(huì)引入更多的復(fù)雜性。
二、SOA特征
- 可重用:一個(gè)服務(wù)創(chuàng)建后能用于多個(gè)應(yīng)用和業(yè)務(wù)流程。
- 松耦合:服務(wù)請(qǐng)求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。因此,服務(wù)請(qǐng)求者不需要知道服務(wù)提供者實(shí)現(xiàn)的技術(shù)細(xì)節(jié),例如程序語言、底層平臺(tái)等等。
- 明確定義的接口:服務(wù)交互必須是明確定義的。Web服務(wù)描述語言(Web Services Description Language,WSDL)是用于描述服務(wù)請(qǐng)求者所要求的綁定到服務(wù)提供者的細(xì)節(jié)。WSDL不包括服務(wù)實(shí)現(xiàn)的任何技術(shù)細(xì)節(jié)。服務(wù)請(qǐng)求者不知道也不關(guān)心服務(wù)究竟是由哪種程序設(shè)計(jì)語言編寫的。
- 無狀態(tài)的服務(wù)設(shè)計(jì):服務(wù)應(yīng)該是獨(dú)立的、自包含的請(qǐng)求,在實(shí)現(xiàn)時(shí)它不需要獲取從一個(gè)請(qǐng)求到另一個(gè)請(qǐng)求的信息或狀態(tài)。服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文和狀態(tài)。當(dāng)產(chǎn)生依賴時(shí),它們可以定義成通用業(yè)務(wù)流程、函數(shù)和數(shù)據(jù)模型。
- 基于開放標(biāo)準(zhǔn):當(dāng)前SOA的實(shí)現(xiàn)形式是Web服務(wù),基于的是公開的W3C及其他公認(rèn)標(biāo)準(zhǔn).采用第一代Web服務(wù)定義的SOAP、WSDL和UDDI以及第二代Web服務(wù)定義的WS-*來實(shí)現(xiàn)SOA。
三、SOA設(shè)計(jì)原則
- 明確的接口定義:接口需滿足穩(wěn)定、明確、封裝性等要求。
- 自包含與模塊化:實(shí)現(xiàn)服務(wù)的功能實(shí)體是完全獨(dú)立自主的,獨(dú)立進(jìn)行部署、版本控制、自我管理和恢復(fù)。
- 粗粒度:服務(wù)數(shù)量不應(yīng)太多,依靠消息交互而不是遠(yuǎn)程過程調(diào)用。
- 松耦合:減少各個(gè)服務(wù)間的相互依賴和影響,各個(gè)服務(wù)的位置、實(shí)現(xiàn)技術(shù)、當(dāng)前狀態(tài)以及私有數(shù)據(jù),對(duì)服務(wù)請(qǐng)求者不可見。
- 互操作性、兼容性和策略聲明。
四、SOA關(guān)鍵技術(shù)
與SOA緊密相關(guān)的技術(shù)主要有UDDI、WSDL、SOAP和REST等,這些技術(shù)都是以XML為基礎(chǔ)發(fā)展而來的。
UDDI
UDDI(Universal Description Discovery and Integration,統(tǒng)一描述、發(fā)現(xiàn)和集成)提供了一種服務(wù)發(fā)布、查找和定位的方法,是服務(wù)的信息注冊(cè)規(guī)范,以便該服務(wù)被發(fā)現(xiàn)和使用,同時(shí)它也定義了一種編程接口。該技術(shù)規(guī)范主要包括數(shù)據(jù)模型、API和注冊(cè)服務(wù)三部分。
WSDL
WSDL(Web Service Description Language,Web服務(wù)發(fā)現(xiàn)語言)是基于XML語法對(duì)服務(wù)進(jìn)行描述的語言,包括服務(wù)實(shí)現(xiàn)定義和服務(wù)接口定義。服務(wù)實(shí)現(xiàn)定義描述服務(wù)提供者如何實(shí)現(xiàn)特定的服務(wù)接口,包含服務(wù)和端口描述。服務(wù)接口定義是一種抽象的、可重用的定義,行業(yè)標(biāo)準(zhǔn)組織可以使用這種抽象的定義來規(guī)定一些標(biāo)準(zhǔn)的服務(wù)類型,服務(wù)實(shí)現(xiàn)者可以根據(jù)這些標(biāo)準(zhǔn)定義來實(shí)現(xiàn)具體的服務(wù)。
SOAP
SOAP(Simple Object Acess Protocol,簡單對(duì)象訪問協(xié)議)定義了服務(wù)請(qǐng)求者和服務(wù)提供者之間的消息傳輸規(guī)范,該協(xié)議通過HTTP承載XML格式化的消息。通過SOAP,應(yīng)用程序可以在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換和遠(yuǎn)程過程調(diào)用(RPC)。SOAP主要包括封裝、編碼規(guī)則、RPC表示和綁定四個(gè)部分。
REST
REST(Representational State Transfer,表達(dá)性狀態(tài)轉(zhuǎn)移)是一種針對(duì)Web服務(wù)的設(shè)計(jì)和開發(fā)方式,通常使用HTTP、XML、URI和html等流行協(xié)議或標(biāo)準(zhǔn),可以有效降低開發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。REST對(duì)信息的操作基本只支持POST、GET、PUT和DELETE,這些操作基于如下的設(shè)計(jì)理念:
- 網(wǎng)絡(luò)上的所有事物都被抽象為資源;
- 每個(gè)資源對(duì)應(yīng)一個(gè)唯一的資源標(biāo)識(shí);
- 通過通用的連接件接口對(duì)資源進(jìn)行操作;
- 對(duì)資源的各種操作不會(huì)改變資源標(biāo)識(shí);
- 所有操作都是無狀態(tài)的。
五、SOA優(yōu)勢(shì)
SOA以借助現(xiàn)有的應(yīng)用來組合產(chǎn)生新服務(wù)的敏捷方式,提供給企業(yè)更好的靈活性來構(gòu)建應(yīng)用程序和業(yè)務(wù)流程:
- SOA能夠在最新的和現(xiàn)有的應(yīng)用之上創(chuàng)建應(yīng)用;
- SOA能夠使客戶或服務(wù)消費(fèi)者免予服務(wù)實(shí)現(xiàn)的改變所帶來的影響;
- SOA能夠升級(jí)單個(gè)服務(wù)或服務(wù)消費(fèi)者而無需重寫整個(gè)應(yīng)用,也無需保留已經(jīng)不再適用于新需求的現(xiàn)有系統(tǒng)。
