對(duì)于SOA,感覺這個(gè)概念性的東西沒那么容易理解,看了各位大神的解釋感覺很多都說(shuō)的很抽象,所以想嘗試用自己的語(yǔ)言解釋下,僅做參考。
SOA粗暴理解:把系統(tǒng)按照實(shí)際業(yè)務(wù),拆分成剛剛好大小的、合適的、獨(dú)立部署的模塊,每個(gè)模塊之間相互獨(dú)立。
比如現(xiàn)我有一個(gè)數(shù)據(jù)庫(kù),一個(gè)JavaWeb(或者PHP等)的網(wǎng)站客戶端,一個(gè)安卓app客戶端,一個(gè)IOS客戶端。
現(xiàn)在我要從這個(gè)數(shù)據(jù)庫(kù)中獲取注冊(cè)用戶列表,如果不用SOA的設(shè)計(jì)思想,那么就會(huì)這樣:JavaWeb里面寫一個(gè)查詢方法從數(shù)據(jù)庫(kù)里面查數(shù)據(jù)然后在網(wǎng)頁(yè)顯示,安卓app里面寫一個(gè)查詢方法查詢后在app上顯示,IOS同樣如此。這里就會(huì)出現(xiàn)查詢方法重疊了,這樣的壞處很明顯了,三個(gè)地方都有相同的業(yè)務(wù)代碼,要改三個(gè)地方都要改,而且要改的一模一樣。當(dāng)然問(wèn)題不止這一個(gè)。
于是乎出現(xiàn)了這樣的設(shè)計(jì)思想,比如用Java(或者是其他語(yǔ)言皆可)單獨(dú)創(chuàng)建一個(gè)工程部署在一臺(tái)服務(wù)器上,并且寫一個(gè)方法(或稱函數(shù))執(zhí)行上述查詢操作,然后使其他人可以通過(guò)某種途徑(可以是http鏈接,或者是基于socket的RPC調(diào)用)訪問(wèn)這個(gè)方法得到返回?cái)?shù)據(jù),返回的數(shù)據(jù)類型是通用的json或者xml數(shù)據(jù),就是說(shuō)把這個(gè)操作封裝到一個(gè)工程中去,然后暴露訪問(wèn)的方式,形成“服務(wù)”。比如這里就是注冊(cè)用戶服務(wù),而關(guān)于注冊(cè)用戶的所有相關(guān)增刪改查操作這個(gè)服務(wù)都會(huì)提供方法。
這樣一來(lái),JavaWeb這邊可以訪問(wèn)這個(gè)服務(wù)然后得到數(shù)據(jù)使用,安卓和IOS這里也可以通過(guò)這個(gè)服務(wù)得到數(shù)據(jù)。而且最重要的是,要修改關(guān)于注冊(cè)用戶的業(yè)務(wù)方法只要改這個(gè)服務(wù)就好了,很好的解耦。同理,其他業(yè)務(wù)比如商品、廣告等業(yè)務(wù)都可以單獨(dú)形成服務(wù)部署在單獨(dú)服務(wù)器上。
還有就是一旦哪天突然有一堆人要注冊(cè),假設(shè)這堆人僅僅只是注冊(cè)而不做其他事情,其他業(yè)務(wù)比如商品、廣告服務(wù)等都不忙,唯獨(dú)注冊(cè)這個(gè)功能壓力很大,而原有的一臺(tái)部署了注冊(cè)服務(wù)的服務(wù)器已經(jīng)承受不了這么高的并發(fā),這時(shí)候就可以單獨(dú)集群部署這個(gè)注冊(cè)服務(wù),提供多幾臺(tái)服務(wù)器提供注冊(cè)服務(wù),而其他服務(wù)還不忙,那就維持原樣。
當(dāng)然,還有很多其他好處。
以上我所描述的都還不能完全稱為SOA,還不夠完整,因?yàn)樗倭朔?wù)治理這一環(huán)節(jié)。
什么是服務(wù)治理,就是當(dāng)服務(wù)越來(lái)越多,調(diào)用方也越來(lái)越多的時(shí)候,它們之間的關(guān)系就變得非常混亂,需要對(duì)這些關(guān)系進(jìn)行管理。舉例,還是上面的例子,假如我有一個(gè)用戶服務(wù),一開始有調(diào)用方1和調(diào)用方2來(lái)使用這個(gè)服務(wù),后來(lái)越來(lái)越多,將近上百個(gè)調(diào)用方,這個(gè)時(shí)候作為服務(wù)方,它只知道提供服務(wù),卻不知道具體為誰(shuí)提供了服務(wù)。而對(duì)于開發(fā)者來(lái)說(shuō),知道這N多調(diào)用方和N多服務(wù)方之間的關(guān)系是非常重要的。
所以這個(gè)時(shí)候就需要能進(jìn)行服務(wù)治理的框架,比如dubbo+zookeeper,比如SpringCloud,有了服務(wù)治理功能,我們就能清晰地看到服務(wù)被誰(shuí)誰(shuí)誰(shuí)調(diào)用,誰(shuí)誰(shuí)誰(shuí)調(diào)用了哪些服務(wù),哪些服務(wù)是熱點(diǎn)服務(wù)需要配置服務(wù)器集群,而對(duì)這個(gè)服務(wù)集群的負(fù)載均衡也是服務(wù)治理可以完成的重要功能之一。
這個(gè)時(shí)候就是更加完善一點(diǎn)的SOA了。
當(dāng)然,還可以更進(jìn)一步,加上服務(wù)監(jiān)控跟蹤等等等等之類的。
實(shí)際上SOA只是一種架構(gòu)設(shè)計(jì)模式,而SOAP、REST、RPC就是根據(jù)這種設(shè)計(jì)模式構(gòu)建出來(lái)的規(guī)范,其中SOAP通俗理解就是http+xml的形式,REST就是http+json的形式,RPC是基于socket的形式。上文提到的CXF就是典型的SOAP/REST框架,dubbo就是典型的RPC框架,而SpringCloud就是遵守REST規(guī)范的生態(tài)系統(tǒng)。
以上就是“什么是SOA架構(gòu)?”的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注木子天禾科技其它相關(guān)文章!