這篇文章主要講解了“RPC概念是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“RPC概念是什么”吧!
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到安康網(wǎng)站設(shè)計(jì)與安康網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋安康地區(qū)。
Dubbo服務(wù)是一個(gè)RPC框架,那我們首先就要先理解什么叫做RPC, Remote Procedure Call 即遠(yuǎn)程過(guò)程調(diào)用。
遠(yuǎn)程過(guò)程調(diào)用相對(duì)的是本地過(guò)程調(diào)用,本地過(guò)程調(diào)用就不用說(shuō)了,簡(jiǎn)單理解成本地方法調(diào)用函數(shù)即可,而遠(yuǎn)程調(diào)用是指調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺(tái)機(jī)器上)的過(guò)程或函數(shù)。而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即程序員無(wú)論是調(diào)用本地的還是遠(yuǎn)程的函數(shù),本質(zhì)上編寫(xiě)的調(diào)用代碼基本相同。
RPC的基本架構(gòu)圖如下:
RPC框架就是圖中的client stub 和說(shuō)server stub,服務(wù)間要相互調(diào)用,需要先建立連接。當(dāng)客戶(hù)端調(diào)用client stub,可能需要傳遞參數(shù),而在網(wǎng)絡(luò)間傳遞,需要進(jìn)行序列化,序列化完全后將需要調(diào)用的消息發(fā)送給server stub,服務(wù)端收到信息后,先反序列化,然后再調(diào)用本地服務(wù),調(diào)用完本地服務(wù)后,返回處理結(jié)果,結(jié)果也需要進(jìn)行序列化,序列化完成之后再返回消息,而client stub 收到消息,也需要再次反序列化,再轉(zhuǎn)換成調(diào)用結(jié)果,這就是一個(gè)完整的RPC過(guò)程,如圖所示:
RPC 框架就是要實(shí)現(xiàn)像那小助手一樣的東西,目的就是讓我們使用遠(yuǎn)程調(diào)用像本地調(diào)用一樣簡(jiǎn)單方便,并且解決一些遠(yuǎn)程調(diào)用會(huì)發(fā)生的一些問(wèn)題,對(duì)于我們來(lái)說(shuō)是無(wú)感知的。
在示例圖中我們也可以看出,RPC的核心模塊就是通訊,序列化。
那如果讓我們來(lái)設(shè)計(jì)一個(gè)RPC框架,我們的設(shè)計(jì)思路應(yīng)該是怎么樣的呢?
首先從服務(wù)調(diào)用者開(kāi)始,這是一個(gè)消費(fèi)方,我們要消費(fèi)一個(gè)服務(wù),那么這種服務(wù)應(yīng)該是一個(gè)接口形式的,這個(gè)接口一般是一個(gè)公用jar包來(lái)定義,當(dāng)我知道需要調(diào)用什么接口時(shí),具體的實(shí)現(xiàn)不需要清楚,這些都應(yīng)該是框架代理來(lái)做的,我只需要帶接口和參數(shù)即可。
消費(fèi)方不需要知道其中細(xì)節(jié),不需要知道要調(diào)用那臺(tái)服務(wù)器上的服務(wù),這個(gè)時(shí)候應(yīng)該有一個(gè)注冊(cè)中心,這個(gè)注冊(cè)中心有點(diǎn)類(lèi)似公司大樓的前臺(tái)物業(yè),他負(fù)責(zé)指引來(lái)客人找到找入駐本棟大樓的公司,每個(gè)公司類(lèi)似服務(wù)提供者,公司入駐大大樓后,將自己的樓層和門(mén)牌號(hào)告訴前臺(tái),前臺(tái)把公司的情況貼在前臺(tái)指引,那么當(dāng)有人要找到公司提供服務(wù)時(shí),可以直接通過(guò)門(mén)牌找到想要去的公司,而這個(gè)公司搬走后,前臺(tái)物業(yè)又將此公司去掉,消費(fèi)者需要的服務(wù)器是可以直接找到對(duì)應(yīng)公司。
當(dāng)然,如果你直接告訴了客戶(hù)你的具體位置,那么客戶(hù)可以不需要去注冊(cè)中心找你,也就是注冊(cè)中心可以不需要。
那作為服務(wù)提供者,你要告訴別人你公司能提供的服務(wù)器,去實(shí)現(xiàn)對(duì)應(yīng)的接口,然后暴露出去,也就是去向注冊(cè)中心注冊(cè)自己,暴露自己所能提供的服務(wù)。 然后有消費(fèi)者請(qǐng)求過(guò)來(lái)需要處理,提供者需要用和消費(fèi)者協(xié)商好的協(xié)議來(lái)處理這個(gè)請(qǐng)求,然后做反序列化。
面對(duì)眾多的服務(wù),精細(xì)化的監(jiān)控和方便的運(yùn)維必不可少。 這個(gè)時(shí)候我們需要監(jiān)控運(yùn)維,也就是監(jiān)控中心,當(dāng)然如果你要這么莽,就是不需要監(jiān)控,當(dāng)然也是可以的。
到此,我們能想到的架構(gòu)就是如此,接下里我們就來(lái)看看dubbo設(shè)計(jì)(當(dāng)然,我是通過(guò)實(shí)際架構(gòu)反推出來(lái),手動(dòng)狗頭)
Dubbo 是阿里巴巴 2011年開(kāi)源的一個(gè)基于 Java 的 RPC 框架,中間沉寂了一段時(shí)間,不過(guò)其他一些企業(yè)還在用 Dubbo 并自己做了擴(kuò)展,比如當(dāng)當(dāng)網(wǎng)的 Dubbox,還有網(wǎng)易考拉的 Dubbok。
在 2018 年和 Dubbox 進(jìn)行了合并,并且進(jìn)入 Apache 孵化器,在 2019 年正式成為 Apache 頂級(jí)項(xiàng)目。
學(xué)習(xí)一門(mén)技術(shù),如果有官網(wǎng)的話我們盡量從官網(wǎng)上學(xué)習(xí):首先我們要知道Dubbo有哪些特性:
面向接口代理的高性能RPC調(diào)用: 提供高性能的基于代理的遠(yuǎn)程調(diào)用能力,服務(wù)以接口為粒度,為開(kāi)發(fā)者屏蔽遠(yuǎn)程調(diào)用底層細(xì)節(jié)。
智能負(fù)載均衡: 內(nèi)置多種負(fù)載均衡策略,智能感知下游節(jié)點(diǎn)健康狀況,顯著減少調(diào)用延遲,提高系統(tǒng)吞吐量。
服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn): 支持多種注冊(cè)中心服務(wù),服務(wù)實(shí)例上下線實(shí)時(shí)感知。
高度可擴(kuò)展能力: 遵循微內(nèi)核+插件的設(shè)計(jì)原則,所有核心能力如Protocol、Transport、Ser.........
感謝各位的閱讀,以上就是“RPC概念是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)RPC概念是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!