dubbo原理和機(jī)制這個(gè)不少小伙伴們不清楚,很多小伙伴們想要知道這個(gè)原理和機(jī)制的,就讓小編給大家詳細(xì)的講講,一起來(lái)看看這個(gè)原理機(jī)制的小伙伴們吧。
dubbo原理和機(jī)制
Dubbo是Alibaba開源的分布式服務(wù)框架,它最大的特點(diǎn)是按照分層的方式來(lái)架構(gòu),使用這種方式可以使各個(gè)層之間解耦合(或者最大限度地松耦合)。從服務(wù)模型的角度來(lái)看,
Dubbo采用的是一種非常簡(jiǎn)單的模型,要么是提供方提供服務(wù),要么是消費(fèi)方消費(fèi)服務(wù),所以基于這一點(diǎn)可以抽象出服務(wù)提供方(Provider)和服務(wù)消費(fèi)方(Consumer)兩個(gè)角色。關(guān)于注冊(cè)中心、協(xié)議支持、服務(wù)監(jiān)控等內(nèi)容,詳見后面描述。 Webservice也是一種服務(wù)框架,但是webservice并不是分布式的服務(wù)框架,他需要結(jié)合F5實(shí)現(xiàn)負(fù)載均衡。因此,dubbo除了可以提供服務(wù)之外,還可以實(shí)現(xiàn)軟負(fù)載均衡。它還提供了兩個(gè)功能Monitor 監(jiān)控中心和調(diào)用中心。這兩個(gè)是可選的,需要單獨(dú)配置。
Dubbo :是一個(gè)rpc框架,soa框架
作為RPC:支持各種傳輸協(xié)議,如dubbo,hession,json,fastjson,底層采用mina,netty長(zhǎng)連接進(jìn)行傳輸!典型的provider和cusomer模式!
作為SOA:具有服務(wù)治理功能,提供服務(wù)的注冊(cè)和發(fā)現(xiàn)!用zookeeper實(shí)現(xiàn)注冊(cè)中心!啟動(dòng)時(shí)候服務(wù)端會(huì)把所有接口注冊(cè)到注冊(cè)中心,并且訂閱configurators,服務(wù)消費(fèi)端訂閱provide,configurators,routers,訂閱變更時(shí),zk會(huì)推送providers,configuators,routers,啟動(dòng)時(shí)注冊(cè)長(zhǎng)連接,進(jìn)行通訊!proveider和provider啟動(dòng)后,后臺(tái)啟動(dòng)定時(shí)器,發(fā)送統(tǒng)計(jì)數(shù)據(jù)到monitor!提供各種容錯(cuò)機(jī)制和負(fù)載均衡策略!!
描述一個(gè)服務(wù)從發(fā)布到被消費(fèi)的詳細(xì)過(guò)程:
一個(gè)服務(wù)的發(fā)布暴露過(guò)程:
首先設(shè)置一個(gè)項(xiàng)目的別名,然后是定義注冊(cè)中心和設(shè)定傳輸協(xié)議,之后定義服務(wù)名!服務(wù)接口以jar形式導(dǎo)入到provider!
一個(gè)服務(wù)發(fā)布暴露首先由spring的spacehander 把相關(guān)的xml或者注解全部轉(zhuǎn)化為springBean,之后通過(guò)ServiceConfig.exerp()方法把bean傳化為傳輸所需的url和參數(shù)注冊(cè)到注冊(cè)中心,發(fā)布后provder端的ref(helloImpl)通過(guò)protocl(傳輸協(xié)議,如dubboprotocl,hessionprotocl)轉(zhuǎn)化為Invoker對(duì)象,即調(diào)用信息,包括類,方法,參數(shù)等等,再通過(guò)proxy操作(代理)如jdkproxy代理轉(zhuǎn)為為Exporter對(duì)象,這就是整個(gè)的服務(wù)暴露過(guò)程!
消費(fèi)過(guò)程:
一個(gè)Renfence類,通過(guò)RenfenceConfig的init 調(diào)用proxy的refer方法生產(chǎn)一個(gè)invoker,invoker再通過(guò)proctol轉(zhuǎn)化成具體的ref(hello),進(jìn)行消費(fèi)
首先 ReferenceConfig 類的 init 方法調(diào)用 Protocol 的 refer 方法生成 Invoker 實(shí)例,這是服務(wù)消費(fèi)的關(guān)鍵。接下來(lái)把 Invoker 轉(zhuǎn)換為客戶端需要的接口(如:HelloWorld)
Dubbo的實(shí)現(xiàn)
Dubbo協(xié)議的Invoker轉(zhuǎn)為Exporter發(fā)生在DubboProtocol類的export方法,它主要是打開socket偵聽服務(wù),并接收客戶端發(fā)來(lái)的各種請(qǐng)求,通訊細(xì)節(jié)由Dubbo自己實(shí)現(xiàn)。