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