Python知識分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
46道Dubbo面試題含答案(很全)PDF 下載
發(fā)布于:2024-02-05 10:47:51
(假如點擊沒反應(yīng),多刷新兩次就OK!)

46道Dubbo面試題含答案(很全)PDF 下載  圖1

 

 

 

資料內(nèi)容:

 

 

6. Dubbo 服務(wù)器注冊與發(fā)現(xiàn)的流程?
 

服務(wù)容器Container負(fù)責(zé)啟動,加載,運行服務(wù)提供者。
服務(wù)提供者Provider在啟動時,向注冊中心注冊自己提供的服務(wù)。
服務(wù)消費者Consumer在啟動時,向注冊中心訂閱自己所需的服務(wù)。
注冊中心Registry返回服務(wù)提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)
據(jù)給消費者。
服務(wù)消費者Consumer,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺提供者進(jìn)行調(diào)用,如果調(diào)
用失敗,再選另一臺調(diào)用。
服務(wù)消費者Consumer和提供者Provider,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)
計數(shù)據(jù)到監(jiān)控中心Monitor。

 

7. Dubbo 的整體架構(gòu)設(shè)計有哪些分層?
 

接口服務(wù)層(Service):該層與業(yè)務(wù)邏輯相關(guān),根據(jù) provider 和 consumer 的業(yè)務(wù)設(shè)計對應(yīng)的接口和
實現(xiàn)
配置層(Config):對外配置接口,以 ServiceConfig 和 ReferenceConfig 為中心
服務(wù)代理層(Proxy):服務(wù)接口透明代理,生成服務(wù)的客戶端 Stub 和 服務(wù)端的 Skeleton,以
ServiceProxy 為中心,擴展接口為 ProxyFactory
服務(wù)注冊層(Registry):封裝服務(wù)地址的注冊和發(fā)現(xiàn),以服務(wù) URL 為中心,擴展接口為
RegistryFactory、Registry、RegistryService
路由層(Cluster):封裝多個提供者的路由和負(fù)載均衡,并橋接注冊中心,以Invoker 為中心,擴展接
口為 Cluster、Directory、Router 和 LoadBlancce
監(jiān)控層(Monitor):RPC 調(diào)用次數(shù)和調(diào)用時間監(jiān)控,以 Statistics 為中心,擴展接口為
MonitorFactory、Monitor 和 MonitorService
遠(yuǎn)程調(diào)用層(Protocal):封裝 RPC 調(diào)用,以 Invocation 和 Result 為中心,擴展接口為Protocal、
Invoker 和 Exporter
信息交換層(Exchange):封裝請求響應(yīng)模式,同步轉(zhuǎn)異步。以 Request 和Response 為中心,擴展
接口為 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer
網(wǎng)絡(luò) 傳輸 層(Transport):抽象 mina 和 netty 為統(tǒng)一接口,以 Message 為中心,擴展接口為
Channel、Transporter、Client、Server 和 Codec
數(shù)據(jù)序列化層(Serialize):可復(fù)用的一些工具,擴展接口為 Serialization、ObjectInput、
ObjectOutput 和 ThreadPool

 

8. Dubbo Monitor 實現(xiàn)原理?
 

Consumer 端在發(fā)起調(diào)用之前會先走 filter 鏈;provider 端在接收到請求時也是先走 filter 鏈,然后才進(jìn)行
真正的業(yè)務(wù)邏輯處理。默認(rèn)情況下,在 consumer 和 provider 的 filter 鏈中都會有Monitorfilter。
MonitorFilter 向 DubboMonitor 發(fā)送數(shù)據(jù)
DubboMonitor 將數(shù)據(jù)進(jìn)行聚合后(默認(rèn)聚合 1min 中的統(tǒng)計數(shù)據(jù))暫存到
ConcurrentMap<Statistics, AtomicReference> statisticsMap,然后使用一個含有 3 個線程(線程名
字:DubboMonitorSendTimer)的線程池每隔 1min 鐘,調(diào)用 SimpleMonitorService 遍歷發(fā)送
statisticsMap 中的統(tǒng)計數(shù)據(jù),每發(fā)送完畢一個,就重置當(dāng)前的 Statistics 的AtomicReference
SimpleMonitorService 將這些聚合數(shù)據(jù)塞入 BlockingQueue queue 中(隊列大寫為 100000)
SimpleMonitorService 使用一個后臺線程(線程名為:DubboMonitorAsyncWriteLogThread)將
queue 中的數(shù)據(jù)寫入文件(該線程以死循環(huán)的形式來寫)
SimpleMonitorService 還會使用一個含有 1 個線程(線程名字:DubboMonitorTimer)的線程池每隔
5min 鐘,將文件中的統(tǒng)計數(shù)據(jù)畫成圖表