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