SOA和RPC讲解
我們在學(xué)習(xí)Dubbo之前,需要先學(xué)習(xí)兩個概念,第一個概念SOA,什么叫SOA呢,他不是一個技術(shù),他是一種架構(gòu)設(shè)計模式,也就是在我們開發(fā)項(xiàng)目的時候,如何來設(shè)計項(xiàng)目的架構(gòu),也就是如何來設(shè)計項(xiàng)目能夠更加好,SOA他的中文名稱,我們來看英文名稱吧,面向服務(wù)架構(gòu),英文名稱Service-Oriented Architecture,中文名稱面向服務(wù)架構(gòu),SOA的定位,他不是一個技術(shù),也不是一個語言,它是一個如何設(shè)計在開發(fā)當(dāng)中的一個項(xiàng)目,如何設(shè)計項(xiàng)目,在開發(fā)時更有效率,他的優(yōu)點(diǎn)不光是這個,主要的是如何設(shè)計項(xiàng)目,重點(diǎn)在這兒,準(zhǔn)確來說,我來給他一個定位,它是一種思想,我們?nèi)ソ忉屢幌?我們從哪里引出一個SOA的概念比如我們在設(shè)計的時候
我們在做項(xiàng)目的時候,是怎么來設(shè)計的,回顧一下我們之前是怎么做的,有一個父項(xiàng)目,叫ego-parent,有一個前臺叫ego-portal,還有一個后臺叫ego-management,還有一個實(shí)體類,實(shí)際上實(shí)體類不是我們關(guān)注的重點(diǎn),那我們現(xiàn)在看,portal和management,他們兩個是不是都可以去訪問數(shù)據(jù)庫,都是直接訪問的數(shù)據(jù)庫,所以再往下畫一個柱狀圖,DB,這是我們昨天去設(shè)計的一個架構(gòu),他們都去訪問數(shù)據(jù)庫,我們在寫代碼的時候,有沒有感受到一個事情,哪塊重復(fù)了,主要是我們在寫的時候,ego-portal的mapper這塊,和ego-manager的mapper這塊,感覺他們優(yōu)點(diǎn)重復(fù)的感覺,其實(shí)在我們現(xiàn)在這種設(shè)計的時候,很多時候在公司的項(xiàng)目不允許所有的項(xiàng)目都訪問數(shù)據(jù)庫,知道為什么嗎,數(shù)據(jù)庫里面存的是數(shù)據(jù),數(shù)據(jù)是一個項(xiàng)目的核心,如果你要是能讓所有的項(xiàng)目都能訪問這里,那可能會導(dǎo)致數(shù)據(jù)的不安全,這是一個問題,第二個,在開發(fā)時,數(shù)據(jù)訪問層,他的代碼可能會出現(xiàn)一個冗余的問題,就是寫好多遍,相同的代碼都是select by id,根據(jù)id查詢,可能好多項(xiàng)目都會寫一遍,那SOA架構(gòu),這個架構(gòu)就是專門解決這類問題的,解決什么樣的問題呢
使用SOA架構(gòu)之后,他就有一個專門訪問數(shù)據(jù)庫的服務(wù),我們在這里稱之為服務(wù),實(shí)際上你可以理解為一個項(xiàng)目,你可以這么來去理解,專門取訪問數(shù)據(jù)庫的一個服務(wù),我們以后訪問數(shù)據(jù)庫的代碼,是不是都調(diào)這個服務(wù),都是調(diào)用這個服務(wù),所謂的面向服務(wù)的架構(gòu),面向服務(wù)架構(gòu),就是有一個專門提供服務(wù)的單元,其他單元都調(diào)用這個服務(wù),這個服務(wù)就像我們銀河系的太陽一樣,所有其他的人都圍繞著他來轉(zhuǎn),在我們這里也是的,數(shù)據(jù)庫DB,所有人你想走數(shù)據(jù)庫,必須先走我,然后之后,在往下做的時候,跟上面的一樣了,能看出和之前什么區(qū)別嗎,多了一層是吧,ego-portal,ego-management,實(shí)體我就不畫了,主要是沒有太大的作用,以后所有來進(jìn)行訪問的時候,都走服務(wù),也就是說,在我們現(xiàn)在這個項(xiàng)目中,portal他不具備數(shù)據(jù)庫訪問的能力,它是不具備直接訪問數(shù)據(jù)庫的能力,你看這個箭頭,他能直接到數(shù)據(jù)庫嗎,是不能,想訪問數(shù)據(jù)庫我必須得怎么樣,就必須走這個服務(wù),SOA架構(gòu)就是這樣的一個東西,面向服務(wù)架構(gòu),所謂的面向服務(wù)就是這樣的,有一個統(tǒng)一提供服務(wù)的項(xiàng)目,然后以后你想調(diào)數(shù)據(jù)庫,全走我,那這樣的話,其實(shí)我們在開發(fā)的時候,開發(fā)時我們可以實(shí)現(xiàn)數(shù)據(jù)訪問控制和代碼復(fù)用,什么叫數(shù)據(jù)訪問控制,是不是必須走服務(wù)才能走數(shù)據(jù)庫,然后代碼復(fù)用能感受到嗎,以前我們portal和management兩個是可以在這里慢慢寫,兩個都寫select by id,現(xiàn)在寫幾遍就行了,是不是在服務(wù)里寫一遍,所以這種架構(gòu),分布式項(xiàng)目基本上都是這種架構(gòu),SOA架構(gòu)非常重要的一個概念,那現(xiàn)在我們目前實(shí)現(xiàn)SOA架構(gòu)的話
實(shí)現(xiàn)SOA架構(gòu)時,幾種常用服務(wù),用的比較多的,就是dubbo作為服務(wù),這是咱們今天要講的dubbo,除了他以外,再有webservice,這是比較老的了,還有dubbo的升級版,都是阿里出的,還有的在用dubbox,是當(dāng)當(dāng)網(wǎng)出的,除了這些以外,有一種比較特殊的,服務(wù)方,這種就比較特殊了,沒有應(yīng)用其他第三方技術(shù),服務(wù)方其實(shí)就是一個web項(xiàng)目,我們是調(diào)用這個web項(xiàng)目的控制器,什么意思,這個服務(wù)其實(shí)就是個web項(xiàng)目,以后我想在ego-portal項(xiàng)目中調(diào)他的話,調(diào)用它的控制器,那通過一種特殊的技術(shù),我們在講電商的時候,HttpClient,這種技術(shù),調(diào)別人的控制器,那現(xiàn)在我們看,今天主要是來學(xué)習(xí)dubbo,剛才我們在說使用SOA架構(gòu)的時候,這個服務(wù)層能夠?qū)崿F(xiàn)數(shù)據(jù)訪問控制和代碼復(fù)用,那在這里面,數(shù)據(jù)一定是所有項(xiàng)目的一個核心,那這個數(shù)據(jù)訪問控制在訪問的時候,其他的ego-portal和ego-management他們兩個就不需要再寫mapper這兩個包了,挺清楚,不用寫mapper這個包了,為啥,mapper數(shù)據(jù)訪問的都在服務(wù)了,那service得寫還是得寫吧,service是項(xiàng)目的業(yè)務(wù),業(yè)務(wù)是該寫得寫的,只要調(diào)數(shù)據(jù)庫就都得調(diào)他,我們?yōu)榱吮WC服務(wù)方的一個安全性,我們下面需要再講一個概念
遠(yuǎn)程調(diào)用協(xié)議,RPC,Remote Procedure Call,這是他的英文名稱,中文名稱叫遠(yuǎn)程過程調(diào)用協(xié)議,什么意思啊,那我們現(xiàn)在說的RPC,我們聊天的時候都說,你們公司用什么RPC框架啊,都是這么聊天,就是用一個基于遠(yuǎn)程調(diào)用的一個框架,RPC指的是什么啊,我解釋一下RPC,客戶端A通過互聯(lián)網(wǎng)調(diào)用遠(yuǎn)程服務(wù)器,不知道遠(yuǎn)程服務(wù)器具體實(shí)現(xiàn),只知道遠(yuǎn)程服務(wù)器提供了什么功能,什么意思,我們畫圖,假設(shè)這里有一個客戶端,然后再有一個服務(wù)器,我調(diào)你的時候我能調(diào),但是我調(diào)的時候我知道,你有一個功能,或者你有一個方法,假設(shè)叫A方法,這個方法我調(diào)完之后,我就能查詢出A表中的數(shù)據(jù),但是你里面具體怎么寫的,我不知道,所謂的RPC就是這樣的,只有提供功能的列表,而沒有具體功能實(shí)現(xiàn),這樣有什么好處,你看他達(dá)到的效果是什么,你就只能調(diào)我,具體我怎么做的你是不知道的,那肯定是從一個安全性考慮,所以RPC一個最大的優(yōu)點(diǎn)啊,就是一個安全性,那現(xiàn)在有一個RPC的概念,有了RPC,有了Dubbo,和SOA,他兩是一個相關(guān)的概念,如果我這個服務(wù)使用一個RPC框架的話,會怎么樣,是不是別人你調(diào)我的時候,我知道我可以調(diào)什么東西,但是我不知道里面具體的實(shí)現(xiàn),那是不是安全性更高,而且我們訪問的是項(xiàng)目的核心數(shù)據(jù)庫,所以數(shù)據(jù)庫你就想唄,舉一個最簡單的例子,比如咱們手機(jī)上都有QQ,QQ有很多的軟件都是需要去授權(quán)一下,你授權(quán)干什么呢,獲取用戶數(shù)據(jù)呢,對吧,你說其他的一些軟件,我在獲取的時候,我只能獲取到的是一個狀態(tài),挺清楚,一旦授權(quán)之后我就能夠登陸,我能獲取到該用戶的用戶名什么的,這些東西基本能獲到,能不能直接顯示我的密碼是什么,不能,即使獲得的也絕對是一個加密的,所以SOA這個架構(gòu)的服務(wù),一定要設(shè)計好,怎么設(shè)計,使用RPC來保證數(shù)據(jù)的安全性
?
總結(jié)
- 上一篇: 测试并行回收报告
- 下一篇: Dubbo支持的注册中心