Dubbo 架構(gòu)(角色和特性)

參考

http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html

角色

Dubbo有5個(gè)參與者:其中Monitor、Registry不是必須的

  1. Provider 暴露服務(wù)的服務(wù)提供方
  2. Consumer 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方(負(fù)載均衡)
  3. Registry 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心(監(jiān)控、心跳、踢出、重入)
  4. Monitor 服務(wù)消費(fèi)者和提供者在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,主動(dòng)定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
  5. Container 服務(wù)運(yùn)行容器:遠(yuǎn)程調(diào)用、序列化

Provider

  1. Dubbo不像RocketMQ,并沒(méi)有堆積的功能,但是Dubbo的Provider有一個(gè) fixed Cache的線程池來(lái)緩存請(qǐng)求

注冊(cè)中心

  1. Dubbo注冊(cè)中心僅僅只負(fù)責(zé)Provider的注冊(cè)、Consumer的訂閱、以及心跳和通知。這和Rocketmq的nameServer不同,nameServer除了扮演注冊(cè)中心,還扮演路由器的功能。
  2. 注冊(cè)中心,服務(wù)提供者,服務(wù)消費(fèi)者三者之間均為長(zhǎng)連接,監(jiān)控中心除外
  3. 注冊(cè)中心和監(jiān)控中心全部宕機(jī),不影響已運(yùn)行的提供者和消費(fèi)者,消費(fèi)者在本地緩存了提供者列表
  4. 注冊(cè)中心和監(jiān)控中心都是可選的,服務(wù)消費(fèi)者可以直連服務(wù)提供者

注冊(cè)中心實(shí)現(xiàn)原理

http://dubbo.apache.org/zh-cn/docs/user/references/registry/zookeeper.html
http://dubbo.apache.org/zh-cn/docs/user/references/registry/redis.html
常見(jiàn)的zookeeper實(shí)現(xiàn)、Redis實(shí)現(xiàn),實(shí)現(xiàn)方式不一樣

  1. Zookeeper實(shí)現(xiàn)注冊(cè)中心


    image
  • 所有的Consumer監(jiān)測(cè) /dubbo/$service/providers 節(jié)點(diǎn),獲取到所有的Providers的信息,并且Watch 該結(jié)點(diǎn)的變動(dòng),如果新加入Provider或者某個(gè)Provider宕機(jī),會(huì)觸發(fā)事件。
  • 所有的Consumer自己也要注冊(cè)在 /dubbo/service/consumers下面,因?yàn)镸onitor要通過(guò)/dubbo/service,獲得提供者和消費(fèi)者 URL 地址。
  1. Redis實(shí)現(xiàn)注冊(cè)中心


    image

    使用 Redis 的 Publish/Subscribe 事件通知數(shù)據(jù)變更:

  • 通過(guò)事件的值區(qū)分事件類型:register, unregister, subscribe, unsubscribe
  • 普通消費(fèi)者直接訂閱指定服務(wù)提供者的 Key,只會(huì)收到指定服務(wù)的 register, unregister 事件
  • 監(jiān)控中心通過(guò) psubscribe 功能訂閱 /dubbo/*,會(huì)收到所有服務(wù)的所有變更事件

Dubbo不依賴注冊(cè)中心的配置

Dubbo繞開(kāi)注冊(cè)中心,直接使用Dubbo
Provider配置

    <dubbo:application name="hello-world-app-provider" />
    <dubbo:registry address="N/A"/>
    <dubbo:protocol name="dubbo" port="20880"/>     
    <dubbo:service interface="com.mor.server.dubbo.service.DemoServer" ref="demoService"  loadbalance="consistenthash"/>
    <bean id="demoService" class="com.mor.server.dubbo.service.DemoServerImpl"  />

Consumer配置,去除掉zk,但是要配置url

    <dubbo:application name="consumer-of-helloworld-app" />
    <dubbo:reference  id="demoService"  interface="com.mor.server.dubbo.service.DemoServer" url="dubbo://127.0.0.1:20880">
        <dubbo:method name="sayHello" loadbalance="consistenthash"/>
    </dubbo:reference>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容