面試官靈魂三問:什么是SOA?什么是微服務(wù)?SOA和微服務(wù)有什么區(qū)別?

SOA

SOA(Service-Oriented Architecture,面向服務(wù)的架構(gòu))是一種高層級(jí)的架構(gòu)設(shè)計(jì)理念,可通過在網(wǎng)絡(luò)上使用基于通用通信語言的服務(wù)接口,讓軟件組件可重復(fù)使用。

那么什么是服務(wù)呢?

所有業(yè)務(wù)功能都可以定義為一項(xiàng)服務(wù),服務(wù)就意味著要對(duì)外提供開放的能力,當(dāng)其他系統(tǒng)需要使用這項(xiàng)功能時(shí),無須定制化開發(fā)。

服務(wù)可大可小,可簡(jiǎn)單也可復(fù)雜。例如,商品管理可以是一項(xiàng)服務(wù),包括商品基本信息管理、供應(yīng)商管理、入庫管理等功能;而商品基本信息管理也可以作為一項(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(Enterprise Service Bus,企業(yè)服務(wù)總線)把企業(yè)中各個(gè)不同的服務(wù)連接在一起。就像計(jì)算機(jī)總線一樣,把計(jì)算機(jī)的各個(gè)不同的設(shè)備連接在一起。

因?yàn)椴煌姆?wù)是使用不同的技術(shù)實(shí)現(xiàn)的,各個(gè)獨(dú)立的服務(wù)是異構(gòu)的,如果沒有統(tǒng)一的標(biāo)準(zhǔn),則各個(gè)異構(gòu)系統(tǒng)對(duì)外提供的接口是各式各樣的。SOA 使用 ESB 來屏蔽異構(gòu)系統(tǒng)對(duì)外提供各種不同的接口方式,以此來達(dá)到服務(wù)間高效的互聯(lián)互通。ESB通過使用標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議(如 SOAP、XML、JSON、MQ )來開放服務(wù)以發(fā)送請(qǐng)求或訪問數(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ù)全部故障,這樣肯定是無法滿足業(yè)務(wù)需求的。

微服務(wù)

微服務(wù)(Microservices)是一種軟件架構(gòu)風(fēng)格,它是以專注于單一責(zé)任與功能的小型功能區(qū)塊 (Small Building Blocks) 為基礎(chǔ),利用模塊化的方式組合出復(fù)雜的大型應(yīng)用程序,各功能區(qū)塊使用與語言無關(guān) (Language-Independent/Language agnostic)的API集相互通信。

微服務(wù)的起源是由 Peter Rodgers 博士于 2005 年度云計(jì)算博覽會(huì)提出的微 Web 服務(wù)(Micro-Web-Service)開始,Juval L?wy 則是與他有類似的前導(dǎo)想法,將類別變成細(xì)粒服務(wù)(granular services),以作為微軟下一階段的軟件架構(gòu),其核心想法是讓服務(wù)是由類似 Unix 管道的訪問方式使用,而且復(fù)雜的服務(wù)背后是使用簡(jiǎn)單 URI 來開放接口,任何服務(wù),任何細(xì)粒都能被開放(exposed)。這個(gè)設(shè)計(jì)在 HP 的實(shí)驗(yàn)室被實(shí)現(xiàn),具有改變復(fù)雜軟件系統(tǒng)的強(qiáng)大力量。

2014年,Martin Fowler 與 James Lewis 共同提出了微服務(wù)的概念,定義了微服務(wù)是由以單一應(yīng)用程序構(gòu)成的小服務(wù),自己擁有自己的進(jìn)程與輕量化處理,服務(wù)依業(yè)務(wù)功能設(shè)計(jì),以全自動(dòng)的方式部署,與其他服務(wù)使用HTTP API通信。同時(shí)服務(wù)會(huì)使用最小的規(guī)模的集中管理 (例如 Docker) 能力,服務(wù)可以用不同的編程語言與數(shù)據(jù)庫等組件實(shí)現(xiàn)。

SOA與微服務(wù)的對(duì)比

服務(wù)粒度

SOA 的服務(wù)粒度要粗一些,而微服務(wù)的服務(wù)粒度要細(xì)一些。例如,對(duì)一個(gè)電商企業(yè)來說,商品管理系統(tǒng)是一個(gè) SOA 架構(gòu)中的服務(wù);而如果采用微服務(wù)架構(gòu),則商品管理系統(tǒng)會(huì)被拆分為更多的服務(wù),比如商品基本信息管理、供應(yīng)商管理、入庫管理等更多服務(wù)。

服務(wù)通信

SOA 采用了 ESB 作為服務(wù)間通信的關(guān)鍵組件,負(fù)責(zé)服務(wù)定義、服務(wù)路由、消息轉(zhuǎn)換、消息傳遞,一般情況下都是重量級(jí)的實(shí)現(xiàn)。微服務(wù)則使用統(tǒng)一的協(xié)議和格式,例如:HTTP RESTful 協(xié)議、TCP RPC 協(xié)議,不需要 ESB 這樣的重量級(jí)實(shí)現(xiàn)。

服務(wù)交付

SOA 對(duì)服務(wù)的交付沒有特殊要求,因?yàn)?SOA 更多考慮的是兼容已有的系統(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ā)的、有的是外部購買的,無法完全推倒重來或者進(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ì)外接口基本都是提供 HTTP RESTful 風(fēng)格的接口,無須考慮在接口層進(jìn)行類似 SOA 的 ESB 那樣的處理。

還有一些不同,為了方便理解記憶,匯總成如下表格:

SOA 微服務(wù)
服務(wù)粒度 粗粒度 細(xì)粒度
業(yè)務(wù)劃分方式 水平多層 縱向業(yè)務(wù)劃分
部署方式 整體部署 獨(dú)立部署
通信方式 使用重量級(jí)通信方式,ESB充當(dāng)服務(wù)之間通信的角色 使用輕量級(jí)通信方式,如HTTP RESTful
服務(wù)交付 交付慢 交付塊
應(yīng)用場(chǎng)景 龐大、復(fù)雜、異構(gòu)的企業(yè)級(jí)系統(tǒng) 快速、輕量級(jí)、基于 Web 的互聯(lián)網(wǎng)系統(tǒng)

最后,謝謝你這么帥,還給我點(diǎn)贊關(guān)注。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容