成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

阿里面試必問(wèn)的Dubbo相關(guān)問(wèn)題-創(chuàng)新互聯(lián)

在過(guò)去持續(xù)分享的幾十期阿里Java面試題中,幾乎每次都會(huì)問(wèn)到Dubbo相關(guān)問(wèn)題,比如:“如何從0到1設(shè)計(jì)一個(gè)Dubbo的RPC框架”,這個(gè)問(wèn)題主要考察以下幾個(gè)方面:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了鄒平免費(fèi)建站歡迎大家使用!

你對(duì)RPC框架的底層原理掌握程度。

以及考驗(yàn)?zāi)愕恼wRPC框架系統(tǒng)設(shè)計(jì)能力。

具體,我來(lái)為大家詳解。

RPC和RPC框架

1.RPC(Remote Procedure Call)

即遠(yuǎn)程過(guò)程調(diào)用, 主要解決遠(yuǎn)程通信間的問(wèn)題,不需要了解底層網(wǎng)絡(luò)的通信機(jī)制。

2.RPC框架

RPC框架負(fù)責(zé)屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式、以及通信細(xì)節(jié)。

實(shí)際使用中,并不需要關(guān)心底層通信細(xì)節(jié)和調(diào)用過(guò)程,讓業(yè)務(wù)端專(zhuān)注于業(yè)務(wù)代碼的實(shí)現(xiàn)。

國(guó)內(nèi)大家熟知的PRC框架,阿里的HSF和Dubbo(開(kāi)源)。

Dubbo的發(fā)展由來(lái)

1. 業(yè)務(wù)規(guī)模小

比如早期一個(gè)應(yīng)用Java War包,將所有功能都打包,部署在一個(gè)單機(jī)服務(wù)器,調(diào)用接口也比較方便,不涉及到任何分布式場(chǎng)景。

2.業(yè)務(wù)規(guī)模變大

隨著業(yè)務(wù)的快速發(fā)展,業(yè)務(wù)越來(lái)越多、子系統(tǒng)也越來(lái)越多時(shí)。比如:淘寶的交易系統(tǒng)、商品系統(tǒng)、用戶(hù)系統(tǒng)、評(píng)價(jià)系統(tǒng)...上百個(gè)系統(tǒng)的出現(xiàn)。

系統(tǒng)變得越來(lái)越復(fù)雜,業(yè)務(wù)代碼依然耦合在一起。比如最早期的淘寶denali工程,包含所有業(yè)務(wù)系統(tǒng)的代碼,就僅打包部署都需要很長(zhǎng)的時(shí)間。

并且,隨著每個(gè)業(yè)務(wù)線的快速發(fā)展,業(yè)務(wù)代碼耦合在一起,上線后出現(xiàn)問(wèn)題急需要回滾代碼,拉分支、大量的代碼merge工作,這個(gè)過(guò)程極其痛苦。

這個(gè)時(shí)候,你會(huì)發(fā)現(xiàn)技術(shù)已經(jīng)成了業(yè)務(wù)的瓶頸,急需把業(yè)務(wù)單獨(dú)抽離出來(lái),各自單獨(dú)部署。

3.Dubbo和HSF的出現(xiàn)

應(yīng)用系統(tǒng)一旦涉及到拆分部署,問(wèn)題就來(lái)了,急需一種高效的應(yīng)用程序間的通訊手段來(lái)完成這種需求,這就會(huì)涉及到分布式遠(yuǎn)程調(diào)用。

于是,淘寶就把denali按照業(yè)務(wù)為單位拆分成了類(lèi)似這樣的系統(tǒng):UM(UserManger)、SM(ShopManager)..等等幾十個(gè)工程代碼。

再按照業(yè)務(wù)為單位,把所有調(diào)用相關(guān)的接口以業(yè)務(wù)為單元進(jìn)行拆分:UIC(用戶(hù)中心服務(wù))、SIC(店鋪中心服務(wù))...等等以業(yè)務(wù)為單位集群部署,按照業(yè)務(wù)提供服務(wù)。

所以,RPC的框架來(lái)了,阿里內(nèi)部使用HSF,以及開(kāi)源的RPC 框架:Dubbo。

RPC框架的核心設(shè)計(jì)
前面提到了RPC的核心目標(biāo):主要是解決分布式系統(tǒng)中服務(wù)之間的調(diào)用問(wèn)題。

其實(shí),走到這一步涉及的知識(shí)體系非常的多:要求對(duì)通信、遠(yuǎn)程調(diào)用、消息機(jī)制等有深入的理解和掌握,要求的都是從理論、硬件級(jí)、操作系統(tǒng)級(jí)以及所采用的語(yǔ)言的實(shí)現(xiàn)都有清楚的理解。

1.RPC框架三個(gè)核心角色

1)服務(wù)提供者(Server)

對(duì)外提供后臺(tái)服務(wù),將自己的服務(wù)信息,注冊(cè)到注冊(cè)中心。

2)注冊(cè)中心(Registry)

用于服務(wù)端注冊(cè)遠(yuǎn)程服務(wù)以及客戶(hù)端發(fā)現(xiàn)服務(wù)。

目前主要的注冊(cè)中心可以借由 zookeeper,eureka,consul,etcd 等開(kāi)源框架實(shí)現(xiàn)。

比如:阿里的Dubbo就是采用zookeeper實(shí)現(xiàn)注冊(cè)中心。

3)服務(wù)消費(fèi)者(Client)

從注冊(cè)中心獲取遠(yuǎn)程服務(wù)的注冊(cè)信息,然后進(jìn)行遠(yuǎn)程過(guò)程調(diào)用。

2.RPC遠(yuǎn)程調(diào)用過(guò)程

1)服務(wù)調(diào)用方(client)調(diào)用以本地調(diào)用方式調(diào)用服務(wù);

2)client stub接收到調(diào)用后負(fù)責(zé)將方法、參數(shù)等組裝成能夠進(jìn)行網(wǎng)絡(luò)傳輸?shù)南Ⅲw;在Java里就是序列化的過(guò)程

3)client stub找到服務(wù)地址,并將消息通過(guò)網(wǎng)絡(luò)發(fā)送到服務(wù)端;

4)server stub收到消息后進(jìn)行解碼,在Java里就是反序列化的過(guò)程;

5)server stub根據(jù)解碼結(jié)果調(diào)用本地的服務(wù);

6)本地服務(wù)執(zhí)行處理邏輯;

7)本地服務(wù)將結(jié)果返回給server stub;

8)server stub將返回結(jié)果打包成消息,Java里的序列化;

9)server stub將打包后的消息通過(guò)網(wǎng)絡(luò)并發(fā)送至消費(fèi)方

10)client stub接收到消息,并進(jìn)行解碼, Java里的反序列化;

11)服務(wù)調(diào)用方(client)得到最終結(jié)果。

RPC框架的目標(biāo)就是要2~10這些步驟都封裝起來(lái)。

RPC框架涉及技術(shù)

1.建立通信

首先,要解決通訊的問(wèn)題,主要是通過(guò)在客戶(hù)端和服務(wù)器之間建立TCP連接,遠(yuǎn)程過(guò)程調(diào)用的所有交換的數(shù)據(jù)都在這個(gè)連接里傳輸。

2.服務(wù)尋址

1)服務(wù)注冊(cè)

首先需要把服務(wù)注冊(cè)到服務(wù)中心。其實(shí)就是在注冊(cè)中心進(jìn)行一個(gè)登記,注冊(cè)中心存儲(chǔ)了該服務(wù)的IP、端口、調(diào)用方式(協(xié)議、序列化方式)等。在zookeeper中,進(jìn)行服務(wù)注冊(cè),實(shí)際上就是在zookeeper中創(chuàng)建了一個(gè)znode節(jié)點(diǎn),該節(jié)點(diǎn)存儲(chǔ)了上面所說(shuō)的服務(wù)信息。

2)服務(wù)發(fā)現(xiàn)

服務(wù)消費(fèi)者在第一次調(diào)用服務(wù)時(shí),會(huì)通過(guò)注冊(cè)中心找到相應(yīng)的服務(wù)的IP地址列表,并緩存到本地,以供后續(xù)使用。當(dāng)消費(fèi)者調(diào)用服務(wù)時(shí),不會(huì)再去請(qǐng)求注冊(cè)中心,而是直接通過(guò)負(fù)載均衡算法從IP列表中取一個(gè)服務(wù)提供者的服務(wù)器調(diào)用服務(wù)。

3)注冊(cè)服務(wù)

可靠的尋址方式(主要是提供服務(wù)的發(fā)現(xiàn))是RPC的實(shí)現(xiàn)基石,比如可以zookeeper來(lái)實(shí)現(xiàn)注冊(cè)服務(wù)等等。

服務(wù)提供者啟動(dòng)后主動(dòng)向服務(wù)(注冊(cè))中心注冊(cè)機(jī)器ip、端口以及提供的服務(wù)列表。

服務(wù)消費(fèi)者啟動(dòng)時(shí)向服務(wù)(注冊(cè))中心獲取服務(wù)提供方地址列表,可實(shí)現(xiàn)軟負(fù)載均衡和Failover。

提供者需要定時(shí)向注冊(cè)中心發(fā)送心跳,一段時(shí)間未收到來(lái)自提供者的心跳后,認(rèn)為提供者已經(jīng)停止服務(wù),從注冊(cè)中心上摘取掉對(duì)應(yīng)的服務(wù)等等。

3.網(wǎng)絡(luò)傳輸

數(shù)據(jù)傳輸采用什么協(xié)議,數(shù)據(jù)該如何序列化和反序列化。

4.NIO通信

當(dāng)前很多RPC框架都直接基于netty這一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推薦使用Netty 作為底層通信框架。

5.服務(wù)調(diào)用

比如:B機(jī)器進(jìn)行本地調(diào)用(通過(guò)代理Proxy)之后得到了返回值,此時(shí)還需要再把返回值發(fā)送回A機(jī)器,同樣也需要經(jīng)過(guò)序列化操作,然后再經(jīng)過(guò)網(wǎng)絡(luò)傳輸將二進(jìn)制數(shù)據(jù)發(fā)送回A機(jī)器,而當(dāng)A機(jī)器接收到這些返回值之后,則再次進(jìn)行反序列化操作

總之,要實(shí)現(xiàn)一個(gè)RPC不算難,難的是實(shí)現(xiàn)一個(gè)高性能高可靠的RPC框架,后續(xù)將結(jié)合Dubbo的實(shí)現(xiàn)一起再探討。

以上就是RPC的介紹,更多Redis、Spring Cloud、MySQL數(shù)據(jù)庫(kù)分庫(kù)分表等高并發(fā)架構(gòu)設(shè)計(jì),關(guān)注我我會(huì)持續(xù)更新


文末彩蛋

針對(duì)于上面所涉及到的知識(shí)點(diǎn)我總結(jié)出了有1到5年開(kāi)發(fā)經(jīng)驗(yàn)的程序員在面試中涉及到的絕大部分架構(gòu)面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù)資料),希望能幫助到您面試前的復(fù)習(xí)且找到一個(gè)好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時(shí)間來(lái)學(xué)習(xí),也可以關(guān)注我一下以后會(huì)有更多干貨分享。

資料獲取方式 QQ群搜索“708-701-457” 備注“51CTO” 即可免費(fèi)領(lǐng)取

阿里面試必問(wèn)的Dubbo相關(guān)問(wèn)題
阿里面試必問(wèn)的Dubbo相關(guān)問(wèn)題

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

名稱(chēng)欄目:阿里面試必問(wèn)的Dubbo相關(guān)問(wèn)題-創(chuàng)新互聯(lián)
鏈接地址:http://jinyejixie.com/article16/dioodg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作Google、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷(xiāo)、建站公司、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
青浦区| 珠海市| 云梦县| 高碑店市| 泰宁县| 溆浦县| 郁南县| 成安县| 枣强县| 新河县| 呼和浩特市| 宁晋县| 高密市| 麻阳| 嵩明县| 福清市| 长治县| 韩城市| 潮安县| 万州区| 武功县| 阿拉善左旗| 威宁| 东源县| 新和县| 永泰县| 宁南县| 察哈| 柘荣县| 禹州市| 永福县| 青铜峡市| 阿尔山市| 西丰县| 娱乐| 博客| 铜川市| 辰溪县| 邵阳市| 山东省| 松阳县|