Dubbo:https://github.com/apache/incubator-dubbo
http://dubbo.apache.org/en-us/
分佈式服務治理框架,soa基礎框架
解決多項目間服務的互相調用
或者說是一個微服務架構
早期 MVC分層
dao(數據庫支持)
service(服務層)
controller(控制層)
dubbo
dao(數據庫支持)
service(服務層)————————>將兩者打成jar包,統一對外提供服務
==================
controller(控制層)————————>war(tomcat),調用服務
注意,爲了簡便後邊用jar表示服務提供方,用war表示服務消費方
對於jar包分佈式放置,保證HA。同時設置權重,做負載均衡。
(Dubbox:噹噹網版本https://github.com/remoting/dubbox)
核心部分:
- 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
- 集羣容錯:提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。
- 自動發現:基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
Dubbo的好處:
1.透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
2.軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
3. 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,並且能夠平滑添加或刪除服務提供者。
4. Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。
節點角色說明
節點 |
角色說明 |
Provider |
暴露服務的服務提供方,前邊說的jar包 |
Consumer |
調用遠程服務的服務消費方,前邊的war包 |
Registry |
服務註冊與發現的註冊中心 |
Monitor |
統計服務的調用次數和調用時間的監控中心 |
Container |
服務運行容器 |
Jar並不直接對wai提供服務,先到Registry上註冊,war去Registry上邊找,通常用zookeeper做Registry,Monitor不常用,常用admin配置。
用法:
本地服務 Spring 配置
local.xml:
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” />
<bean id=“xxxAction” class=“com.xxx.XxxAction”>
<property name=“xxxService” ref=“xxxService” />
</bean>
遠程服務 Spring 配置
在本地服務的基礎上,只需做簡單配置,即可完成遠程化:
將上面的 local.xml 配置拆分成兩份,將服務定義部分放在服務提供方 remote-provider.xml,將服務引用部分放在服務消費方 remote-consumer.xml。
並在提供方增加暴露服務配置 <dubbo:service>,在消費方增加引用服務配置 <dubbo:reference>。
remote-provider.xml:
<!-- 和本地服務一樣實現遠程服務 -->
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” />
<!-- 增加暴露遠程服務配置 -->
<dubbo:service interface=“com.xxx.XxxService” ref=“xxxService” />
remote-consumer.xml:
<!-- 增加引用遠程服務配置 -->
<dubbo:reference id=“xxxService” interface=“com.xxx.XxxService” />
<!-- 和本地服務一樣使用遠程服務 -->
<bean id=“xxxAction” class=“com.xxx.XxxAction”>
<property name=“xxxService” ref=“xxxService” />
</bean>