Dubbo是一個分佈式服務架構,致力於提供高性能和透明化的PRC遠程服務調用方案,以及SOA(程序不一樣單元和功能經過約定的接口聯繫起來)服務治理方案。git
soa架構:
面向服務的架構,它將應用程序的不一樣功能單元(稱爲服務)經過這些服務之間定義良好的接口和契約聯繫起來。接口是採用中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操做系統和編程語言。這使得構建在各類這樣的系統中的服務能夠以一種統一和通用的方式進行交互。
如何實現遠程通訊:github
底層傳輸協議 | 傳輸速度 | 特色 | 共同點 | 適用場景 | |
socket | UDP或TCP | 最快 | 開發步驟繁瑣 | 被多種操做系統/開發語言支持 | socket適用於對傳輸速度和執行效率要求高的場合。如高併發、大流量的Client - Server通訊。 |
Rest WebService | HTTP | 通常 | 非標準 | (同上) | Rest WebService適用於開發專用的系統或功能,或者移動客戶端(手機/平板等)與服務器的通訊。 Rest WebService的數據傳輸量比傳統WebService要小,有利於節約流量。 |
傳統WebService | SOAP | 最慢 | 標準,通用 | 標準,通用 | 傳統WebService適用於開發傳統的web項目或者通用功能(如天氣預報、手機號歸屬地查詢等便民服務)。 它是四種遠程調用技術中在互聯網上應用最爲普遍的。 |
當服務增多,須要管理服務,提升機器利用率,資源調度和治理中心(SOA)是關鍵
Dubbo就是資源調度和治理中心的管理工具
web
Container: 服務運行容器。
註冊中心
註冊中心負責服務地址的註冊與查找,至關於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,建議使用zookeeper註冊中心。
Zookeeper是Apacahe Hadoop的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲Dubbo服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用
Zookeeper的安裝:
第一步:安裝jdk
第二步:解壓縮zookeeper壓縮包
第三步:將conf文件夾下zoo_sample.cfg複製一份,更名爲zoo.cfg
第四步:修改配置dataDir屬性,指定一個真實目錄spring
Dubbo基於spring的schema擴展進行加載
單一工程中的spring配置apache
<bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <bean id="xxxAction" class="com.xxx.XxxAction"> <property name="xxxService" ref="xxxService" /> </bean>
遠程服務
將local.xml配置拆分紅兩份,將服務定義部分放在服務提供方remote-provider.xml,將服務引用部分放在服務消費方remote-consumer.xml。
而後提供方暴露服務:
<beans xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation= http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd> <!-- 和本地服務同樣實現遠程服務 --> <bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <!-- 使用dubbo發佈服務 --> <!-- 提供方應用信息,用於計算依賴關係 --> <dubbo:application name="hello-world-app" /> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" /> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 聲明須要暴露的服務接口 --> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" /> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" /> <beans>
消費方引用服務:
<dubbo:application name="hello-world-app"/> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/> <!-- 增長引用遠程服務配置 --> <dubbo:reference id="xxxService" interface="com.xxx.XxxService" /> <!-- 和本地服務同樣使用遠程服務 --> <bean id="xxxAction" class="com.xxx.XxxAction"> <property name="xxxService" ref="xxxService" /> </bean>
maven添加Dubbo依賴:緩存
<!-- dubbo相關 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <!-- 排除依賴 --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency>