日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

cgblib 代理接口原理_Java开发者你还不知道?告诉你Dubbo 的底层原理,面试不再怕...

發(fā)布時間:2023/12/10 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cgblib 代理接口原理_Java开发者你还不知道?告诉你Dubbo 的底层原理,面试不再怕... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

平常我們在構(gòu)建分布式系統(tǒng)的時候,一般都是基于 Dubbo 技術(shù)棧或者是SpringCloud 技術(shù)棧來做。早期其實最先比較流行的是Dubbo,我記得我們當時有個部分的老大就是用的是Dubbo 來構(gòu)建的一個系統(tǒng),到后面才出來的 SpringCloud,由于它是基于 Spring 生態(tài)建立起來的,提供了一整套微服務(wù)組件,功能齊全,大受中小型公司開發(fā)者的青睞。

但是現(xiàn)在還是有不少公司沒有換成 SpringCloud 來做微服務(wù)的東西,還是基于 Dubbo,面試的時候不管是 SpringCloud 也好,Dubbo 也罷,基本上都會提到這兩個框架的底層原理。你想嘗試一下高級的職位,基本上跑不脫這個問題。

OK,今兒我們就大概聊聊 Dubbo 的底層架構(gòu)原理吧。

服務(wù)注冊中心

分布式系統(tǒng)里面這個是必備的,服務(wù)提供者跟服務(wù)消費者都在啟動的時候都會注冊到服務(wù)注冊中心來。服務(wù)注冊中心會記錄。

動態(tài)代理層 Proxy

通常這些框架大多數(shù)采用的思想都是通過對你的方法,接口生成一個代理對象,然后在這個代理對象里面去寫它的功能。

所以這里我們需要每個服務(wù)都需要提供接口出來,在發(fā)起服務(wù)調(diào)用執(zhí)勤,會創(chuàng)建一個動態(tài)代理對象,在我們的消費者中只有一個接口,我們可以認為動態(tài)代理類相當于為這個接口動態(tài)的創(chuàng)建一個實體類出來,然后用動態(tài)帶來對象進行接口調(diào)用。

Cluster 集群層

我們準備好了要去調(diào)用了遠程服務(wù)的接口,那么現(xiàn)在問題是我們的服務(wù)提供者會部署多臺機器,那么我們到底去調(diào)用哪臺機器呢?怎么選擇?

此時動態(tài)代理對象回去找一個叫 Cluster 這層的東西,這層就負責具體要調(diào)用哪一臺機器。

那么 Cluster 層就必須得拿到有哪些機器對不對,不然怎么選呢。那么這個過程就叫做動態(tài)感知。

Cluster 里面有很多組件,比如 Directory、Router 還有LoadBalance ,此時就會使用負載均衡組件 LoadBlance 挑選一臺機器。到這里,機器就選好了。

protocol 協(xié)議層

這層主要就是選擇一種協(xié)議來組織我們的請求。

Dubbo支持的協(xié)議很多,包括:dubbo、rmi、hessian、http、webservice、thrift、memcached、redis等。默認使用dubbo 協(xié)議。

Exchange 信息交換層

這層最主要的目的就是把我們的請求數(shù)據(jù)包裝成 Request 或者 Response 。

Transport 網(wǎng)絡(luò)通信層

現(xiàn)在我們挑選好了機器,也把請求按照協(xié)議進行組織好了,并且封裝好了請求。那么這個請求怎么發(fā)送到服務(wù)提供者的哪臺機器呢?

此時我們就需要選擇一個網(wǎng)絡(luò)通信的框架。由他來負責把你的請求通過網(wǎng)絡(luò)發(fā)送過去。比如比較常見的 netty、mina 等。

在發(fā)送過去之前,還得對請求進行序列化。序列化有多種方式可以選擇,比如Json、Protobuf、Protostuff、Hessian、Kryo等、Java序列化等等。

服務(wù)消費者接受到請求后的處理

那么服務(wù)提供者怎么才能收到這個請求呢?此時服務(wù)提供者里面也得需要一個網(wǎng)絡(luò)通信框架,他去監(jiān)聽你開放的某個端口,比如就啟動一個 netty 去監(jiān)聽消費者發(fā)送過來的請求。

接受到請求過后,然后進行反序列化,然后,前面我們發(fā)過來的是 通過 Exchange 層包裝的 Request 請求,那么這里也需要 這層來對 請求進行解析。解析的時候,也需要根據(jù)一種協(xié)議來進行解析。

實際上 解析完成請求以后,還會創(chuàng)建一個動態(tài)代理對象,再去調(diào)用我們的服務(wù)提供者接口,最后返回數(shù)據(jù)。

整個調(diào)用流程圖

希望你在面試的時候,能夠給面試官畫出來這個圖。

參考資料

可能面試的時候還會有更多的細節(jié),那么根據(jù)上面大體的幾層,一層一層的了解各自的細節(jié)。這樣子可能會更有把握一些。

dubbo 中文文檔:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

Dubbo 實現(xiàn)原理及架構(gòu)詳解:http://crazyfzw.github.io/2018/06/10/dubbo-architecture/[1]

把上面的圖了解了,再去看官方的,我認為會更好一些。

關(guān)注我的頭條號并在后臺私信我:555,即可(獲取Java高級架構(gòu)資料)。

不知道怎么私信的朋友可以關(guān)注公眾號:Java耕耘者。(點擊小助理獲取)

總結(jié)

以上是生活随笔為你收集整理的cgblib 代理接口原理_Java开发者你还不知道?告诉你Dubbo 的底层原理,面试不再怕...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。