一、什麼是dubbo?
dubbo是一個分佈式服務框架,用於提高性能和透明化的rpc遠程服務調用方案,以及soa服務治理方案。
核心:
1、遠程通訊:
提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求”
只要簡單配置,就能像調用本地方法一樣調用遠程方法。
2、集羣容錯:
失敗容錯,軟負載均衡
3、自動發現:
服務自動註冊與發現,基於註冊中心目錄服務,使服務提供方可以平滑增加或減少機器
二、架構圖:
Provider: 服務提供方
Consumer:服務消費方
Registry:註冊中心
Monitor:監控中心,統計服務調用次數和時間
Container:服務運行容器
1、服務容器啓動、加載、運行服務提供者
2、服務提供者向註冊中心註冊
3、服務消費者啓動,訂閱所需服務
4、註冊中心返回服務提供者列表給消費者,如果有變更,註冊中心
將基於長連接推送變更數據給消費者
5、服務消費者基於軟負載均衡算法,從提供者列表中選一臺提供者進行調用,
如果失敗,再選另外一臺調用
6、服務提供者跟消費者,在內存中累計調用次數和時間,定時發送統計數給監控中心
三、Dubbo服務的運行方式
1.使用Servlet容易運行(Tomcat Jetty等) 不可取
缺點:增加複雜性(端口、管理) 浪費資源(內存)
2.自建Main方法類來運行(Spring容器) 不建議(本地調試可用)
缺點:Dubbo本身提供的高級特性沒用上,自己編寫的啓動類可能有缺陷
3.使用Dubbo框架提供的Main方法類來運行(Spring容器) 建議使用
優點:框架本身提供(com.alibaba.dubbo.container.Main) 可實現優雅關機(ShutdownHook)
注意點:spring-context.xml <import resource="classpath:spring/spring-xxx.xml"/>
四、Dubbo主要配置
1、提供方 provider.xml
<!-- 提供方應用信息,用於計算依賴關係 -->
<dubbo:application name="demo-provider" />
<!-- 使用zookeeper註冊中心暴露服務地址 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!-- 用dubbo協議在20880端口暴露服務 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 用戶服務接口 -->
<dubbo:service interface="com.demo.service.UserService" ref="userService" />
2、消費方 consumer.xml
<!--消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣 -->
<dubbo:application name="demo-consumer"/>
<!--zookeeper註冊中心 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!--使用multicast廣播註冊中心暴露的服務地址 -->
<!--<dubbo:registryaddress="multicast://10.57.41.19:1234" /> -->
<!-- 生成遠程服務代理,可以和本地bean一樣使用demoService,
默認check="true",如果爲false,則可以先啓動消費方不報錯
-->
<dubbo:reference id="userService" interface="com.demo.service.UserService" />
五、Dubbo管理控制檯
Dubbo管控臺可以對註冊到zookeeper註冊中心的服務或服務消費者進行管理
一般把包放置/webapps目錄下
六、Dubbo協議
Dubbo允許配置多協議,不同服務支持不同協議或者同一服務同時支持多種協議
比如大數據用短連接協議,小數據大併發用長連接協議
1、Dubbo
Dubbo缺省使用dubbo協議,單一長連接和NIO異步通訊,適用於小數據大併發,消費
服務機器數量遠大於提供者情況,不合適大數據量,比如傳文件,視頻等
2、RMI
短連接,jdk序列化,適用:傳入傳出參數數據包大小混合,消費者與提供者個數差不多。可傳文件
3、Hessian
底層http通訊,適用:傳入傳出參數數據包較大,提供者大於消費者,可傳文件
4、其他
http、webservice、thrift、mencached、redis