dubbo基礎功能介紹與使用_第1頁
dubbo基礎功能介紹與使用_第2頁
dubbo基礎功能介紹與使用_第3頁
dubbo基礎功能介紹與使用_第4頁
dubbo基礎功能介紹與使用_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Dubbo基礎培訓功能介紹與使用大綱Dubbo簡單介紹Dubbo-RPC基本功能Dubbo-RPC高級功能(省略)Dubbo如何使用第2頁/共37頁Dubbo背景單一應用架構(gòu)當網(wǎng)站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節(jié)點和成本。此時,用于簡化增刪改查工作量的數(shù)據(jù)訪問框架(ORM)是關(guān)鍵。垂直應用架構(gòu)當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。此時,用于加速前端頁面開發(fā)的Web框架(MVC)

是關(guān)鍵。分布式服務架構(gòu)當垂直應用越來越多,應用之間交互不可避免,將核心業(yè)務抽取出來,作為獨立的服務,逐漸形成穩(wěn)定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用于提高業(yè)務復用及整合的分布式服務框架(RPC)是關(guān)鍵。流動計算架構(gòu)當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現(xiàn),此時需增加一個調(diào)度中心基于訪問壓力實時管理集群容量,提高集群利用率。此時,用于提高機器利用率的資源調(diào)度和治理中心(SOA)是關(guān)鍵。第3頁/共37頁Dubbo是什么Dubbo是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調(diào)用方案,以及SOA服務治理方案。基于注冊中心模式實現(xiàn)RPC遠程服務調(diào)用,告別WebService模式。其核心部分包含:遠程通訊:提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。集群容錯:提供基于接口方法的透明遠程過程調(diào)用,包括多協(xié)議支持,以及軟負載均衡,失敗容錯,地址路由,動態(tài)配置等集群支持。自動發(fā)現(xiàn):基于注冊中心目錄服務,使服務消費方能動態(tài)的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。第4頁/共37頁Dubbo如何使用本地服務遠程服務<beanid=“xxxService”class=“com.xxx.XxxServiceImpl”/><beanid=“xxxAction”class=“com.xxx.XxxAction”>

<propertyname=“xxxService”ref=“xxxService”/></bean><beanid=“xxxService”class=“com.xxx.XxxServiceImpl”/><!--和本地服務一樣實現(xiàn)遠程服務--><dubbo:serviceinterface=“com.xxx.XxxService”ref=“xxxService”/><!--增加暴露遠程服務配置--><dubbo:referenceid=“xxxService”interface=“com.xxx.XxxService”/><!--增加引用遠程服務配置-->

<beanid=“xxxAction”class=“com.xxx.XxxAction”><!--和本地服務一樣使用遠程服務-->

<propertyname=“xxxService”ref=“xxxService”/></bean>服務提供方:服務消費方:第5頁/共37頁Dubbo架構(gòu)調(diào)用關(guān)系說明:0.服務容器負責啟動,加載,運行服務提供者。1.服務提供者在啟動時,向注冊中心注冊自己提供的服務。2.服務消費者在啟動時,向注冊中心訂閱自己所需的服務。3.注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。4.服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調(diào)用,如果調(diào)用失敗,再選另一臺調(diào)用。5.服務消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心。節(jié)點角色說明:Provider:

暴露服務的服務提供方。Consumer:

調(diào)用遠程服務的服務消費方。Registry:

服務注冊與發(fā)現(xiàn)的注冊中心。Monitor:

統(tǒng)計服務的調(diào)用次調(diào)和調(diào)用時間的監(jiān)控中心。Container:

服務運行容器。第6頁/共37頁Dubbo基本原理第7頁/共37頁Dubbo優(yōu)缺點優(yōu)點:1、使用簡單方便2、統(tǒng)一的服務調(diào)用地址3、能進行軟負載均衡,降低對F5硬件負載均衡器的依賴,也能減少部分成本4、連通性:注冊中心,服務提供者,服務消費者三者之間均為長連接,監(jiān)控中心除外注冊中心和監(jiān)控中心全部宕機,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表注冊中心和監(jiān)控中心都是可選的,服務消費者可以直連服務提供者5、健壯性:監(jiān)控中心宕掉不影響使用,只是丟失部分采樣數(shù)據(jù)注冊中心對等集群,任意一臺宕掉后,將自動切換到另一臺注冊中心全部宕掉后,服務提供者和服務消費者仍能通過本地緩存通訊服務提供者無狀態(tài),任意一臺宕掉后,不影響使用服務提供者全部宕掉后,服務消費者應用將無法使用,并無限次重連等待服務提供者恢復缺點:只支持JAVA語言第8頁/共37頁Dubbo-RPC基本功能篇

SOA因你而簡單第9頁/共37頁Dubbo-RPC基本功能配置配置繼承可配置可編程Gracefulshutdown優(yōu)雅停機多注冊中心注冊中心集群多協(xié)議不同服務不同協(xié)議同一服務多協(xié)議本地服務調(diào)用集群&容錯集群原理容錯規(guī)則服務匹配服務分組、多版本指定調(diào)用只訂閱第10頁/共37頁基本功能-配置繼承圖中以timeout為例,顯示了配置的查找順序,其它retries,loadbalance,actives等類似。方法級優(yōu)先,接口級次之,全局配置再次之。如果級別一樣,則消費方優(yōu)先,提供方次之。建議由服務提供方設置超時,因為一個方法需要執(zhí)行多長時間,服務提供方更清楚,如果一個消費方同時引用多個服務,就不需要關(guān)心每個服務的超時設置。第11頁/共37頁基本功能-可編程可配置-暴露服務第12頁/共37頁基本功能-可編程可配置-引用服務第13頁/共37頁基本功能-服務分組當一個接口有多種實現(xiàn)時,可以用group區(qū)分<dubbo:servicegroup="feedback"interface="com.xxx.IndexService"/><dubbo:servicegroup="member"interface="com.xxx.IndexService"/><!–總是只調(diào)一個可用組的實現(xiàn)--><dubbo:referenceid="barService"interface="com.foo.BarService"group="*"/>服務消費方:<dubbo:referenceid="feedbackIndexService"group="feedback"interface="com.xxx.IndexService"/><dubbo:referenceid="memberIndexService"group="member"interface="com.xxx.IndexService"/>服務提供方:第14頁/共37頁基本功能-多版本當一個接口實現(xiàn),出現(xiàn)不兼容升級時,可以用版本號過渡,版本號不同的服務相互間不引用<dubbo:serviceinterface="com.foo.BarService"version="1.0.0"/><dubbo:serviceinterface="com.foo.BarService"version="2.0.0"/><!–不區(qū)分版本--><dubbo:referenceid="barService"interface="com.foo.BarService"version="*"/>服務提供方:服務消費方:<dubbo:referenceid="barService"interface="com.foo.BarService"version="1.0.0"/><dubbo:referenceid="barService"interface="com.foo.BarService"version="2.0.0"/>第15頁/共37頁基本功能-指定調(diào)用在開發(fā)及測試環(huán)境下,經(jīng)常需要繞過注冊中心,只測試指定服務提供者,這時候可能需要點對點直連。點對點直聯(lián)方式,將以服務接口為單位,忽略注冊中心的提供者列表。A接口配置點對點,不影響B(tài)接口從注冊中心獲取列表。注意:為了避免復雜化線上環(huán)境,不要在線上使用這個功能,只應在測試階段使用。第16頁/共37頁基本功能-只訂閱共用注冊中心,開發(fā)人員機器上的服務提供者被誤調(diào),影響其他開發(fā)人員(開發(fā)、測試環(huán)境)<dubbo:registryregister=“false”/>第17頁/共37頁基本功能-集群&容錯負載均衡算法:第18頁/共37頁基本功能-集群&容錯集群容錯方式:第19頁/共37頁基本功能-多協(xié)議數(shù)據(jù)序列化格式:數(shù)據(jù)傳輸協(xié)議:網(wǎng)絡傳輸類型:第20頁/共37頁基本功能-多協(xié)議不同服務不同協(xié)議比如:不同服務在性能上適用不同協(xié)議進行傳輸,比如大數(shù)據(jù)用短連接協(xié)議,小數(shù)據(jù)大并發(fā)用長連接協(xié)議。同一服務多協(xié)議比如:需要與http客戶端互操作<!--多協(xié)議配置--><dubbo:protocolname="dubbo"port="20880"/><dubbo:protocolname="rmi"port="1099"/><!--使用dubbo協(xié)議暴露服務--><dubbo:serviceinterface="com.alibaba.hello.api.HelloService"version="1.0.0"ref="helloService"protocol="dubbo"/><!--使用rmi協(xié)議暴露服務--><dubbo:serviceinterface="com.alibaba.hello.api.DemoService"version="1.0.0"ref="demoService"protocol="rmi"/><!--多協(xié)議配置--><dubbo:protocolname="dubbo"port="20880"/><dubbo:protocolname="hessian"port="8080"/>

<!--使用多個協(xié)議暴露服務--><dubbo:serviceid="helloService"interface="com.alibaba.hello.api.HelloService"version="1.0.0"protocol="dubbo,hessian"/>第21頁/共37頁基本功能-多注冊中心注冊中心:第22頁/共37頁基本功能-多注冊中心一個服務注冊到一個注冊中心,也可以注冊到多個注冊中心在實際應用時,可以針對服務做分類,有的服務注冊到多個注冊中心,有的服務可能只需注冊到一個注冊中心。<!--多注冊中心配置--><dubbo:registryid="hangzhouRegistry"address="50:9090"/><dubbo:registryid="qingdaoRegistry"address="51:9010"default="false"/>

<!--向多個注冊中心注冊--><dubbo:serviceinterface="com.alibaba.hello.api.HelloService"version="1.0.0"ref="helloService"registry="hangzhouRegistry,qingdaoRegistry"/><!--向一個注冊中心注冊--><dubbo:serviceinterface="com.alibaba.hello.api.DemoService"version="1.0.0"ref="demoService"registry="hangzhouRegistry"/><!--多注冊中心配置--><dubbo:registryid="hangzhouRegistry"address="50:9090"/><dubbo:registryid="qingdaoRegistry"address="51:9010"default="false"/>

<!–引用的服務在多個注冊中心--><dubbo:referenceid=“helloService"interface="com.alibaba.hello.api.HelloService"version="1.0.0"registry="hangzhouRegistry,qingdaoRegistry"/><!–引用的服務在一個注冊中心--><dubbo:referenceid=“demoService"interface="com.alibaba.hello.api.DemoService"version="1.0.0"registry="hangzhouRegistry"/>第23頁/共37頁基本功能-Gracefulshutdown優(yōu)雅停機Dubbo是通過JDK的ShutdownHook來完成優(yōu)雅停機的,所以如果用戶使用"kill-9PID"等強制關(guān)閉指令,是不會執(zhí)行優(yōu)雅停機的,只有通過"killPID"時,才會執(zhí)行。第24頁/共37頁Dubbo如何使用

SOA因你而簡單第25頁/共37頁依賴必須依賴:JDK1.5+缺省依賴:log4j.jar和commons-logging.jar日志輸出包。javassist.jar字節(jié)碼生成。如果<dubbo:providerproxy="jdk"/>或<dubbo:consumerproxy="jdk"/>,以及<dubbo:applicationcompiler="jdk"/>,則不需要。spring.jar配置解析。如果用ServiceConfig和ReferenceConfig的API調(diào)用,則不需要。netty.jar網(wǎng)絡傳輸。如果<dubbo:protocolserver="mina"/>或<dubbo:protocolserver="grizzly"/>,則換成mina.jar或grizzly.jar。如果<protocolname="rmi"/>,則不需要。第26頁/共37頁Zookeeper集群安裝與配置1、下載安裝包:/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz2、解壓安裝包到${ZOOKEEPER_HOME}/server1/zookeeper-3.4.6目錄3、進入${ZOOKEEPER_HOME}/server1/zookeeper-3.4.6/conf中創(chuàng)建一個zoo.cfg文件,其中內(nèi)容如下:tickTime=2000initLimit=5syncLimit=2dataDir=D:/home/programFiles/zookeeper/server1/datadataLogDir=D:/home/programFiles/zookeeper/server1/dataLogclientPort=2181server.1=:2888:3888server.2=:2889:3889server.3=:2890:38904、在${ZOOKEEPER_HOME}/server1目錄下增加data、dataLog兩個目錄,data目錄下增加一個名為myid的文件(文件中的值為集群節(jié)點的唯一標識,與zoo.cfg文件中的server.X對應),myid的文件內(nèi)容如下:15、對${ZOOKEEPER_HOME}/server1目錄復制2份為:${ZOOKEEPER_HOME}/server2${ZOOKEEPER_HOME}/server36、對server2、server3目錄下的zoo.cfg和myid兩個文件做修改,修改內(nèi)容為上面第3、4步中紅色部分7、啟動腳本為:

${ZOOKEEPER_HOME}/server1/zookeeper-3.4.6/bin/zkServer.cmd${ZOOKEEPER_HOME}/server2/zookeeper-3.4.6/bin/zkServer.cmd${ZOOKEEPER_HOME}/server3/zookeeper-3.4.6/bin/zkServer.cmd第27頁/共37頁工程構(gòu)建-pom.xml1、使用Zookeeper做注冊中心2、服務提供方和消費方均需引入test_dubbo_api工程第28頁/共37頁Eclipse工程test_dubbo_api:服務接口API工程test_dubbo_provider:服務提供方工程Test_dubbo_consumer:服務消費方工程第29頁/共37頁工程構(gòu)建-服務接口API工程packagecom.tydic.dubbo;publicinterfaceLoginService{/***登錄*@paramusername*/voidlogin(Stringusername);}//LoginService.java:第30頁/共37頁工程構(gòu)建-服務提供方工程packagecom.tydic.dubbo;importorg.springframework.stereotype.Service;@Service("loginService")publicclassLoginServiceImplimplementsLoginService{privatestaticintcount=0;publicvoidlogin(Stringusername){count++;System.out.println("第"

+count+"次調(diào)用login(),username="+username);}}//LoginServiceImpl.java:第31頁/共37頁工程構(gòu)建-服務提供方工程packagecom.tydic.dubbo;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassProviderMain{publicstaticvoidmain(String[]args)throwsException{ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{"spring-dubbo-provider.xml"});context.start();System.out.println("服務提供方啟動完成");while(true){Thread.sleep(10000);}}}//ProviderMain.java:第32頁/共37頁工程構(gòu)建-服務提供方工程<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xmlns:dubbo="/schema/dubbo"xmlns:context="/schema/context"default-lazy-init="false"xmlns="/schema/beans"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/tx/schema/tx/spring-tx-3.1.xsd/schema/jee/schema/jee/spring-jee-3.1.xsd/schema/dubbo/schema/dubbo/dubbo.xsd/schema/context/schema/context/spring-context-3.1.xsd"><!--提供方應用信息,用于計算依賴關(guān)系--><dubbo:applicationname="test_dubbo_provider"/><!--在注冊中心暴露服務地址(zookeeper)--><dubbo:registryaddress="zookeeper://03:2181;zookeeper://03:2182;zookeeper://03:2183"check="false"register="true"subscribe="false"/><!--在注冊中心暴露服務地址(multicast)<dubbo:registryaddress="multicast://:1234"/>--><!--dubbo協(xié)議在20880端口暴露服務,可省略--><dubbo:protocolname="dubbo"port="20880"/><!--提供方代理實現(xiàn)方式,可省略--><dubbo:providerproxy="jdk"/><!--消費方代理實現(xiàn)方式,可省略--><dubbo:consumerproxy="jdk"/><!--配置注解掃描路徑--><context:component-scanbase-package="com.tydic.dubbo"/><!--聲明需要暴露的服務接口--><dubbo:serviceinterface="com.tydic.dubbo.LoginService"ref="loginService"/></beans>//spring-dubbo-provider.xml:第33頁/共37頁工程構(gòu)建-服務消費方配置<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xmlns:dubbo="/schema/dubbo"xmlns:context="/schema/context"default-lazy-init="false"xmlns="/schema/beans"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/tx/schema/tx/spring-tx-3.1.xsd/schema/jee/schema/jee/spring-jee-3.1.xsd/schema/dubbo/schema/dubbo/dubbo.xsd/schema/context/schema/context/spring-context-3.1.xsd"><!--消費方應用名,用于計算依賴關(guān)系,不是匹配條件,不要與提供方一樣--><dubbo:applicationname="test_dubbo_consumer"/><!--配置在注冊中心暴露的服務地址(zookeeper)--><dubbo:registryaddress="zookeeper://03:2181;zookeeper://03:2182;zookeeper://03:2183"check="false"subscribe="true"/><!--配置在注冊中心暴露的服務地址(multicast)<dubbo:registryaddress="multicast://:1234"/>--><!--提供方代理實現(xiàn)方式,可省略--><dubbo:providerproxy="jdk"/><!--消費方代理實現(xiàn)方式,可省略--><dubbo:consumerproxy="jdk"/><!--配置注解掃描路徑--><context:component-scanbase-package="com.tydic.dubbo"/><!--要引用的遠程服務代理。loadbalance:負載均衡策略,可選值:random,roundrobin,leastactive,分別表示:隨機,輪循,最少活躍調(diào)用--><dubbo:referenceinterface="com.tydic.dubbo.LoginService"id="loginService"loadbalance="random"/></beans>//sprin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論