真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

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

具體,我來為大家詳解。

RPC和RPC框架

1.RPC(Remote Procedure Call)

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

2.RPC框架

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

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

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

Dubbo的發(fā)展由來

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ù)越來越多、子系統(tǒng)也越來越多時(shí)。比如:淘寶的交易系統(tǒng)、商品系統(tǒng)、用戶系統(tǒng)、評(píng)價(jià)系統(tǒng)...上百個(gè)系統(tǒng)的出現(xiàn)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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里就是序列化的過程

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

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

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

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

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

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

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

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

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

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

RPC框架涉及技術(shù)

1.建立通信

首先,要解決通訊的問題,主要是通過在客戶端和服務(wù)器之間建立TCP連接,遠(yuǎn)程過程調(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ǔ)了上面所說的服務(wù)信息。

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

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

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

可靠的尋址方式(主要是提供服務(wù)的發(fā)現(xiàn))是RPC的實(shí)現(xiàn)基石,比如可以zookeeper來實(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í)間未收到來自提供者的心跳后,認(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)用(通過代理Proxy)之后得到了返回值,此時(shí)還需要再把返回值發(fā)送回A機(jī)器,同樣也需要經(jīng)過序列化操作,然后再經(jīng)過網(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ù)庫分庫分表等高并發(fā)架構(gòu)設(shè)計(jì),關(guān)注我我會(huì)持續(xù)更新


文末彩蛋

針對(duì)于上面所涉及到的知識(shí)點(diǎn)我總結(jié)出了有1到5年開發(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í)間來學(xué)習(xí),也可以關(guān)注我一下以后會(huì)有更多干貨分享。

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

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

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(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)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


新聞名稱:阿里面試必問的Dubbo相關(guān)問題-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://weahome.cn/article/dioodg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部