Dubbo使用

Dubbo中文文檔地址

https://dubbo.gitbooks.io/dubbo-user-book/content/

Dubbo背景

image.png
  • 單一應(yīng)用架構(gòu)
    當(dāng)網(wǎng)站流量很小時(shí)厉萝,只需一個(gè)應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本瓤鼻。
    此時(shí),用于簡(jiǎn)化增刪改查工作量的 數(shù)據(jù)訪問(wèn)框架(ORM) 是關(guān)鍵亡鼠。
  • 垂直應(yīng)用架構(gòu)
    當(dāng)訪問(wèn)量逐漸增大,單一應(yīng)用增加機(jī)器帶來(lái)的加速度越來(lái)越小错维,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效 率橄唬。此時(shí)赋焕,用于加速前端頁(yè)面開(kāi)發(fā)的 Web框架(MVC) 是關(guān)鍵。
  • 分布式應(yīng)用架構(gòu)
    當(dāng)垂直應(yīng)用越來(lái)越多仰楚,應(yīng)用之間交互不可避免隆判,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù)僧界,逐漸形成穩(wěn)定的服務(wù) 中心侨嘀,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。此時(shí)捂襟,用于提高業(yè)務(wù)復(fù)用及整合的 分布式服務(wù)框架(RPC)是關(guān)鍵咬腕。
  • 流動(dòng)計(jì)算架構(gòu)
    當(dāng)服務(wù)越來(lái)越多,容量的評(píng)估笆豁,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn)郎汪,此時(shí)需增加一個(gè)調(diào)度中心基于訪問(wèn)壓力實(shí)時(shí)管理集群容量,提高集群利用率闯狱。此時(shí)煞赢,用于提高機(jī)器利用率的 資源調(diào)度和治理中心(SOA) 是關(guān)鍵。

Dubbo

Dubbo快速搭建(結(jié)合SpringBoot):http://start.dubbo.io/哄孤,快速生成消費(fèi)者和提供者項(xiàng)目

  • <dubbo:service/> 服務(wù)配置照筑,用于暴露一個(gè)服務(wù),定義服務(wù)的元信息瘦陈,一個(gè)服務(wù)可以用多個(gè)協(xié)議暴露凝危,一個(gè)服務(wù)也可以注冊(cè)到多個(gè)注冊(cè)中心。
  • <dubbo:reference/> 引用配置晨逝,用于創(chuàng)建一個(gè)遠(yuǎn)程服務(wù)代理蛾默,一個(gè)引用可以指向多個(gè)注冊(cè)中心。
  • <dubbo:protocol/> 協(xié)議配置捉貌,用于配置提供服務(wù)的協(xié)議信息支鸡,協(xié)議由提供方指定,消費(fèi)方被動(dòng)接受趁窃。
  • <dubbo:application/> 應(yīng)用配置牧挣,用于配置當(dāng)前應(yīng)用信息,不管該應(yīng)用是提供者還是消費(fèi)者醒陆。
  • <dubbo:module/> 模塊配置瀑构,用于配置當(dāng)前模塊信息,可選刨摩。
  • <dubbo:registry/> 注冊(cè)中心配置寺晌,用于配置連接注冊(cè)中心相關(guān)信息世吨。
  • <dubbo:monitor/> 監(jiān)控中心配置,用于配置連接監(jiān)控中心相關(guān)信息呻征,可選另假。
  • <dubbo:provider/> 提供方的缺省值,當(dāng)ProtocolConfig和ServiceConfig某屬性沒(méi)有配置時(shí)怕犁,采用此缺省值边篮,可選。
  • <dubbo:consumer/> 消費(fèi)方缺省配置奏甫,當(dāng)ReferenceConfig某屬性沒(méi)有配置時(shí)戈轿,采用此缺省值,可選阵子。
  • <dubbo:method/> 方法配置思杯,用于ServiceConfig和ReferenceConfig指定方法級(jí)的配置信息。
  • <dubbo:argument/> 用于指定方法參數(shù)配置挠进。

Dubbo的Pom文件配置

        <!-- dubbo 需要的jar start -->
        <dependency>
            <groupId>org.jboss.netty</groupId>
            <artifactId>netty</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <!-- dubbo 需要的jar end -->

Dubbo基本使用

服務(wù)提供者和消費(fèi)者都需要引入公用接口相關(guān)的jar包

服務(wù)提供者

     <!-- 提供方應(yīng)用信息色乾,用于計(jì)算依賴關(guān)系 -->
    <dubbo:application name="gw-service-user"/>

    <!-- 使用zookeeper注冊(cè)中心暴露服務(wù)地址
    <dubbo:registry protocol="zookeeper" address="192.168.3.71:2181" />
    -->

    <!-- 使用multicast廣播注冊(cè)中心暴露服務(wù)地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    
    <!-- 用dubbo協(xié)議在20880端口暴露服務(wù) -->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!-- 和本地bean一樣實(shí)現(xiàn)服務(wù) -->
    <bean id="pmsUserFacade" class="wusc.edu.facade.user.service.impl.PmsUserFacadeImpl"/>

    <!-- 用戶服務(wù)接口 -->
    <dubbo:service interface="wusc.edu.facade.user.service.PmsUserFacade" ref="pmsUserFacade"/>

服務(wù)消費(fèi)者

     <!-- 消費(fèi)方應(yīng)用名,用于計(jì)算依賴關(guān)系领突,不是匹配條件暖璧,不要與提供方一樣 -->
    <dubbo:application name="edu-web-boss"/>

    <!-- 使用zookeeper注冊(cè)中心暴露服務(wù)地址 -->
    <!-- 注冊(cè)中心地址-->
    <!--<dubbo:registry protocol="zookeeper" address="192.168.3.71:2181" />-->

    <!-- 使用multicast廣播注冊(cè)中心暴露服務(wù)地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234"/>

    <!-- 用戶服務(wù)接口 -->
    <dubbo:reference interface="wusc.edu.facade.user.service.PmsUserFacade" id="pmsUserFacade" check="false"/>

配置重試次數(shù),最好只用于讀的重試君旦,寫(xiě)操作可能會(huì)引起多次寫(xiě)入 下面三個(gè)任意一個(gè)配置就行 默認(rèn)retries="0"

  • <dubbo:service retries="2" />
  • <dubbo:reference retries="2" />
  • <dubbo:reference>
    <dubbo:method name="findFoo" retries="2" />
    </dubbo:reference>

注冊(cè)中心

image.png

流程:
1.服務(wù)提供者啟動(dòng)時(shí)向/dubbo/com.foo.BarService/providers目錄下寫(xiě)入U(xiǎn)RL
2.服務(wù)消費(fèi)者啟動(dòng)時(shí)訂閱/dubbo/com.foo.BarService/providers目錄下的URL向/dubbo/com.foo.BarService/consumers目錄下寫(xiě)入自己的URL
3.監(jiān)控中心啟動(dòng)時(shí)訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費(fèi)者URL

Dubbo負(fù)載均衡

  1. Random LoadBalance
    隨機(jī)澎办,按權(quán)重設(shè)置隨機(jī)概率。
    在一個(gè)截面上碰撞的概率高金砍,但調(diào)用量越大分布越均勻局蚀,而且按概率使用權(quán)重后也比較均勻,有利于動(dòng)態(tài)調(diào)整提供者權(quán)重恕稠。
  2. RoundRobin LoadBalance
    輪循琅绅,按公約后的權(quán)重設(shè)置輪循比率。
    存在慢的提供者累積請(qǐng)求問(wèn)題鹅巍,比如:第二臺(tái)機(jī)器很慢千扶,但沒(méi)掛,當(dāng)請(qǐng)求調(diào)到第二臺(tái)時(shí)就卡在那昆著,久而久之县貌,所有請(qǐng)求都卡在調(diào)到第二臺(tái)上术陶。
  3. LeastActive LoadBalance
    最少活躍調(diào)用數(shù)凑懂,相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計(jì)數(shù)差梧宫。
    使慢的提供者收到更少請(qǐng)求接谨,因?yàn)樵铰奶峁┱叩恼{(diào)用前后計(jì)數(shù)差會(huì)越大摆碉。
  4. ConsistentHash LoadBalance
    一致性Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者脓豪。
    當(dāng)某一臺(tái)提供者掛時(shí)巷帝,原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn)扫夜,平攤到其它提供者楞泼,不會(huì)引起劇烈變動(dòng)。算法參見(jiàn):http://en.wikipedia.org/wiki/Consistent_hashing笤闯。
    缺省只對(duì)第一個(gè)參數(shù)Hash堕阔,如果要修改,請(qǐng)配置<dubbo:parameter key="hash.arguments" value="0,1" />
    缺省用160份虛擬節(jié)點(diǎn)颗味,如果要修改超陆,請(qǐng)配置<dubbo:parameter key="hash.nodes" value="320" />
<dubbo:service interface="..." loadbalance="roundrobin" />

<dubbo:reference interface="..." loadbalance="roundrobin" />

<dubbo:service interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

<dubbo:reference interface="...">
    <dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:reference>

Dubbo多協(xié)議配置

不同服務(wù)在性能上適用不同協(xié)議進(jìn)行傳輸,比如大數(shù)據(jù)用短連接協(xié)議浦马,小數(shù)據(jù)大并發(fā)用長(zhǎng)連接協(xié)議时呀。

    <!-- 多協(xié)議配置 -->
   <dubbo:protocol name="dubbo" port="20880" />
   <dubbo:protocol name="rmi" port="1099" />

   <!-- 使用dubbo協(xié)議暴露服務(wù) -->
   <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
   <!-- 使用rmi協(xié)議暴露服務(wù) -->
   <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" />
   <!-- 使用多個(gè)協(xié)議暴露服務(wù) -->
   <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />

Dubbo多注冊(cè)中心

     <!-- 多注冊(cè)中心配置 -->
    <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" />
    <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" />

    <!-- 向多個(gè)注冊(cè)中心注冊(cè) -->
    <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" />

一個(gè)接口多種實(shí)現(xiàn)時(shí)


  <dubbo:service group="feedback" interface="com.xxx.IndexService" />
  <dubbo:service group="member" interface="com.xxx.IndexService" />
  
  <dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
  <dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />
  <!--任意組:(2.2.0以上版本支持,總是只調(diào)一個(gè)可用組的實(shí)現(xiàn))-->
  <dubbo:reference id="barService" interface="com.foo.BarService" group="*" />

多版本

當(dāng)一個(gè)接口實(shí)現(xiàn)晶默,出現(xiàn)不兼容升級(jí)時(shí)谨娜,可以用版本號(hào)過(guò)渡,版本號(hào)不同的服務(wù)相互間不引用磺陡。
在低壓力時(shí)間段瞧预,先升級(jí)一半提供者為新版本
再將所有消費(fèi)者升級(jí)為新版本
然后將剩下的一半提供者升級(jí)為新版本

  <dubbo:service interface="com.foo.BarService" version="1.0.0" />
  <dubbo:service interface="com.foo.BarService" version="2.0.0" />

  <dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
  <dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仅政,隨后出現(xiàn)的幾起案子垢油,更是在濱河造成了極大的恐慌,老刑警劉巖圆丹,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滩愁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辫封,警方通過(guò)查閱死者的電腦和手機(jī)硝枉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)倦微,“玉大人妻味,你說(shuō)我怎么就攤上這事⌒栏#” “怎么了责球?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雏逾,道長(zhǎng)嘉裤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任栖博,我火速辦了婚禮屑宠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仇让。我一直安慰自己典奉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布丧叽。 她就那樣靜靜地躺著秋柄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠢正。 梳的紋絲不亂的頭發(fā)上骇笔,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音嚣崭,去河邊找鬼笨触。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雹舀,可吹牛的內(nèi)容都是我干的芦劣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼说榆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虚吟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起签财,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤串慰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后唱蒸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體邦鲫,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年神汹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庆捺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屁魏,死狀恐怖滔以,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氓拼,我是刑警寧澤你画,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布抵碟,位于F島的核電站,受9級(jí)特大地震影響撬即,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呈队,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一剥槐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宪摧,春花似錦粒竖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沿彭,卻和暖如春朽砰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喉刘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工瞧柔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睦裳。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓造锅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親廉邑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哥蔚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容