SOA 和微服務(wù)有何區(qū)別?
玩過 Dubbo 的小伙伴應(yīng)該都有聽說過一個(gè)概念叫做 SOA,每當(dāng)我們說起微服務(wù)的時(shí)候,很多人就會(huì)去糾結(jié)這和 SOA 有啥關(guān)系呀?感覺換湯不換藥呀。
今天松哥來稍微和小伙伴們討論下這個(gè)話題,我們一起來看看 SOA 和微服務(wù)到底有何異同。
1. SOA
SOA,英文全稱是 Service-Oriented Architecture (SOA) governance,單純從字面來看,是面向服務(wù)的架構(gòu)治理。但是小伙伴們?cè)诰W(wǎng)上應(yīng)該很難看到比較權(quán)威的關(guān)于 SOA 通俗易懂的解釋。我這里還是以 TienChin 項(xiàng)目為例,來和大家捋一捋 SOA。
假設(shè) TienChin 中有一個(gè)用戶注冊(cè)的功能,現(xiàn)在前端的注冊(cè)有三個(gè)端:
- 網(wǎng)頁(yè)
- 手機(jī) App
- 小程序
如果采用傳統(tǒng)的 JavaWeb 開發(fā)方式,那么我可能得寫三遍注冊(cè)功能,為三個(gè) Client 各自提供一個(gè)接口,然而小伙伴們稍微思考一下就會(huì)發(fā)現(xiàn),注冊(cè)邏輯其實(shí)都差不多,區(qū)別可能僅僅是接口返回的數(shù)據(jù)格式有差異而已。因此,我們可以將注冊(cè)功能抽取出來,寫成一個(gè)單獨(dú)的服務(wù),然后通過遠(yuǎn)程服務(wù)調(diào)用如 HTTP 或者 Socket 等,去調(diào)用這個(gè)注冊(cè)的功能模塊。這就是一個(gè)簡(jiǎn)單的 SOA 架構(gòu)設(shè)計(jì)。
然而看了這個(gè)很多小伙伴都懵了,這不就是微服務(wù)嗎?
接下來我們就來說說 SOA 和微服務(wù)到底哪里不一樣。
2. SOA PK 微服務(wù)
2.1 服務(wù)間通信
首先第一點(diǎn),就是服務(wù)之間的通信方式不同。
玩過 Dubbo 的小伙伴都知道,Dubbo 中常用的通信協(xié)議就是 Dubbo 協(xié)議,Dubbo 協(xié)議本質(zhì)上其實(shí)就是 socket 通信。在 SOA 中,服務(wù)之間的通信往往都是采用的重量級(jí)協(xié)議如 SOAP 等。
而我們常用的微服務(wù)框架 Spring Cloud,小伙伴們知道,這里的通信基本上都是 REST 這種輕量級(jí)協(xié)議,有時(shí)候我們甚至是基于消息來驅(qū)動(dòng)微服務(wù),無論哪一種,微服務(wù)中服務(wù)之間的通信協(xié)議都更加輕量級(jí)。
2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)
在 SOA 中,一般來說不太會(huì)進(jìn)行分庫(kù)設(shè)計(jì),也就是說整個(gè)系統(tǒng)還是使用的一個(gè)庫(kù),系統(tǒng)可能會(huì)分為不同的服務(wù),但是不同的服務(wù)操作的都是同一個(gè)庫(kù)。
微服務(wù)則不同,昨天的文章中,松哥畫的下面這張圖,基本上是每一個(gè)服務(wù)都有一個(gè)自己的庫(kù),每個(gè)服務(wù)都是操作自己的庫(kù),合同管理中需要調(diào)用用戶管理的數(shù)據(jù),不能直接調(diào)用庫(kù),得通過用戶管理提供的 REST 接口去調(diào)用。
2.3 服務(wù)規(guī)模
第三點(diǎn)就是服務(wù)的規(guī)模不同了。
SOA 中的每一個(gè)服務(wù),整體上來說還是一個(gè)比較大的單體項(xiàng)目,因?yàn)?SOA 一般不會(huì)分的很細(xì)。而微服務(wù)則不同,在微服務(wù)中,我們會(huì)將服務(wù)都劃分的很細(xì),每一個(gè)服務(wù)基本上都是只負(fù)責(zé)一個(gè)很小的功能模塊。
以前我們玩 SOA 的時(shí)候,基本上都還是傳統(tǒng)的 SSM 項(xiàng)目,小伙伴們知道,搭建一個(gè) SSM 項(xiàng)目就已經(jīng)很費(fèi)事了,所以能少搭建就少搭建。但是后來有了 Spring Boot 就不一樣了,利用 Spring Boot,我們可以非常方便快捷的創(chuàng)建一個(gè)項(xiàng)目,那么此時(shí)我們就有足夠的條件把服務(wù)劃分的比較細(xì)致了。
所以呢,整體上看,SOA 往往是幾個(gè)比較大型的服務(wù)組合在一起,而微服務(wù)則往往是幾十甚至上百個(gè)服務(wù)組成。
好啦,臨近放假,今天就聊點(diǎn)簡(jiǎn)單的不燒腦的哈哈~