SOA(Service-OrientedArchitecture,面向服務(wù)的架構(gòu))是一種高層級(jí)的架構(gòu)設(shè)計(jì)理念,可通過(guò)在網(wǎng)絡(luò)上使用基于通用通信語(yǔ)言的服務(wù)接口,讓軟件組件可重復(fù)使用。
那么什么是服務(wù)呢?
所有業(yè)務(wù)功能都可以定義為一項(xiàng)服務(wù),服務(wù)就意味著要對(duì)外提供***的能力,當(dāng)其他系統(tǒng)需要使用這項(xiàng)功能時(shí),無(wú)須定制化開發(fā)。
服務(wù)可大可小,可簡(jiǎn)單也可復(fù)雜。例如,商品管理可以是一項(xiàng)服務(wù),包括商品基本信息管理、供應(yīng)商管理、入庫(kù)管理等功能;而商品基本信息管理也可以作為一項(xiàng)獨(dú)立的服務(wù),供應(yīng)商管理也可以作為一項(xiàng)獨(dú)立的服務(wù)。到底是劃分為粗粒度的服務(wù),還是劃分為細(xì)粒度的服務(wù),需要根據(jù)企業(yè)的實(shí)際情況進(jìn)行判斷。
SOA集成了獨(dú)立部署和維護(hù)的服務(wù),并允許它們相互通信和協(xié)同工作,以構(gòu)建一個(gè)跨不同系統(tǒng)的軟件應(yīng)用。
那么它們是如何通信和協(xié)同工作的呢?
ESB(EnterpriseServiceBus,企業(yè)服務(wù)總線)把企業(yè)中各個(gè)不同的服務(wù)連接在一起。就像計(jì)算機(jī)總線一樣,把計(jì)算機(jī)的各個(gè)不同的設(shè)備連接在一起。
因?yàn)椴煌姆?wù)是使用不同的技術(shù)實(shí)現(xiàn)的,各個(gè)獨(dú)立的服務(wù)是異構(gòu)的,如果沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),則各個(gè)異構(gòu)系統(tǒng)對(duì)外提供的接口是各式各樣的。SOA使用ESB來(lái)屏蔽異構(gòu)系統(tǒng)對(duì)外提供各種不同的接口方式,以此來(lái)達(dá)到服務(wù)間高效的互聯(lián)互通。ESB通過(guò)使用標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議(如SOAP、XML、JSON、MQ)來(lái)***服務(wù)以發(fā)送請(qǐng)求或訪問(wèn)數(shù)據(jù),實(shí)現(xiàn)與各種系統(tǒng)間的協(xié)議轉(zhuǎn)換、數(shù)據(jù)轉(zhuǎn)換、透明的動(dòng)態(tài)路由等功能,消除了開發(fā)人員必須從頭開始進(jìn)行集成的困擾。
采用SOA架構(gòu)后,各個(gè)服務(wù)是相互獨(dú)立運(yùn)行的,甚至都不清楚某個(gè)服務(wù)到底有多少對(duì)其他服務(wù)的依賴,減少各個(gè)服務(wù)間的依賴和互相影響,做到了松耦合。如果做不到松耦合,某個(gè)服務(wù)一升級(jí),依賴它的其他服務(wù)全部故障,這樣肯定是無(wú)法滿足業(yè)務(wù)需求的。
微服務(wù)微服務(wù)(Microservices)是一種軟件架構(gòu)風(fēng)格,它是以專注于單一責(zé)任與功能的小型功能區(qū)塊(SmallBuildingBlocks)為基礎(chǔ),利用模塊化的方式組合出復(fù)雜的大型應(yīng)用程序,各功能區(qū)塊使用與語(yǔ)言無(wú)關(guān)(Language-Independent/Languageagnostic)的API集相互通信。
微服務(wù)的起源是由PeterRodgers博士于2005年度云計(jì)算博覽會(huì)提出的微Web服務(wù)(Micro-Web-Service)開始,JuvalL?wy則是與他有類似的前導(dǎo)想法,將類別變成細(xì)粒服務(wù)(granularservices),以作為微軟下一階段的軟件架構(gòu),其核心想法是讓服務(wù)是由類似Unix管道的訪問(wèn)方式使用,而且復(fù)雜的服務(wù)背后是使用簡(jiǎn)單URI來(lái)***接口,任何服務(wù),任何細(xì)粒都能被***(exposed)。這個(gè)設(shè)計(jì)在HP的實(shí)驗(yàn)室被實(shí)現(xiàn),具有改變復(fù)雜軟件系統(tǒng)的強(qiáng)大力量。
2014年,MartinFowler與JamesLewis共同提出了微服務(wù)的概念,定義了微服務(wù)是由以單一應(yīng)用程序構(gòu)成的小服務(wù),自己擁有自己的進(jìn)程與輕量化處理,服務(wù)依業(yè)務(wù)功能設(shè)計(jì),以全自動(dòng)的方式部署,與其他服務(wù)使用HTTPAPI通信。同時(shí)服務(wù)會(huì)使用最小的規(guī)模的集中管理(例如Docker)能力,服務(wù)可以用不同的編程語(yǔ)言與數(shù)據(jù)庫(kù)等組件實(shí)現(xiàn)。
SOA與微服務(wù)的對(duì)比服務(wù)粒度SOA的服務(wù)粒度要粗一些,而微服務(wù)的服務(wù)粒度要細(xì)一些。例如,對(duì)一個(gè)電商企業(yè)來(lái)說(shuō),商品管理系統(tǒng)是一個(gè)SOA架構(gòu)中的服務(wù);而如果采用微服務(wù)架構(gòu),則商品管理系統(tǒng)會(huì)被拆分為更多的服務(wù),比如商品基本信息管理、供應(yīng)商管理、入庫(kù)管理等更多服務(wù)。
服務(wù)通信SOA采用了ESB作為服務(wù)間通信的關(guān)鍵組件,負(fù)責(zé)服務(wù)定義、服務(wù)路由、消息轉(zhuǎn)換、消息傳遞,一般情況下都是重量級(jí)的實(shí)現(xiàn)。微服務(wù)則使用統(tǒng)一的協(xié)議和格式,例如:HTTPRESTful協(xié)議、TCPRPC協(xié)議,不需要ESB這樣的重量級(jí)實(shí)現(xiàn)。
服務(wù)交付SOA對(duì)服務(wù)的交付沒(méi)有特殊要求,因?yàn)镾OA更多考慮的是兼容已有的系統(tǒng);微服務(wù)的架構(gòu)理念則要求快速交付,相應(yīng)地要求采取自動(dòng)化測(cè)試、持續(xù)集成、自動(dòng)化部署、自動(dòng)化運(yùn)維等的最佳實(shí)踐。
應(yīng)用場(chǎng)景SOA更加適合于龐大、復(fù)雜、異構(gòu)的企業(yè)級(jí)系統(tǒng)。這類系統(tǒng)的典型特征就是很多系統(tǒng)已經(jīng)發(fā)展多年,各個(gè)服務(wù)具有異構(gòu)性,比如:采用不同的企業(yè)級(jí)技術(shù)、有的是內(nèi)部開發(fā)的、有的是外部購(gòu)買的,無(wú)法完全推倒重來(lái)或者進(jìn)行大規(guī)模的優(yōu)化和重構(gòu)。因?yàn)槌杀竞陀绊懱?,只能采用兼容的方式進(jìn)行處理,而承擔(dān)兼容任務(wù)的就是ESB。
微服務(wù)更加適合于快速、輕量級(jí)、基于Web的互聯(lián)網(wǎng)系統(tǒng),這類系統(tǒng)業(yè)務(wù)變化快,需要快速嘗試、快速交付;同時(shí)基本都是基于Web,雖然開發(fā)技術(shù)可能差異很大(例如,Java、.NET、PHP等),但對(duì)外接口基本都是提供HTTPRESTful風(fēng)格的接口,無(wú)須考慮在接口層進(jìn)行類似SOA的ESB那樣的處理。
還有一些不同,為了方便理解記憶,匯總成如下表格:
SOA
微服務(wù)
服務(wù)粒度
粗粒度
細(xì)粒度
業(yè)務(wù)劃分方式
水平多層
縱向業(yè)務(wù)劃分
部署方式
整體部署
獨(dú)立部署
通信方式
使用重量級(jí)通信方式,ESB充當(dāng)服務(wù)之間通信的角色
使用輕量級(jí)通信方式,如HTTPRESTful
服務(wù)交付
交付慢
交付塊
應(yīng)用場(chǎng)景
龐大、復(fù)雜、異構(gòu)的企業(yè)級(jí)系統(tǒng)
快速、輕量級(jí)、基于Web的互聯(lián)網(wǎng)系統(tǒng)
竟然已經(jīng)看到這里了,你我定是有緣人,留下你的點(diǎn)贊和關(guān)注,他日必成大器。
原文地址:https://www.cnblogs.com/heihaozi/p/15937441.html