1.dubbo概述
①iiDubbo是一款高性能、輕量1級的開源java Rpc分布式服務框架。
②核心功能:
◉ 面向接口的遠程過程調用
◉ 集群容錯和負載均衡
◉ 服務自動注冊與發現
③特點:
◉ 使用分層的架構模式,使得各個層次之間實現最大限度的解耦。
◉ 將服務抽象為服務提供者(Provider)與服務消費者(Consumer)兩個角色。
2.dubbo組件及其說明
① Provider : 暴漏服務的服務提供方
② Consumer : 調用遠程服務的服務消方
③ Registry : 服務注冊與發現中心
④ Monitor : 統計服務的調用次數與調用時間的監控中心
⑤ Container : 服務運行容器
3.dubbo組件調用關系
①Container容器負責加載,運行服務提供者。
②服務提供者Provider將自身服務注冊到注冊中心Registr。
③服務消費者向注冊中心訂閱服務,注冊中心返回服務提供者的地址列表給服務消費者,如果服務提供者有變更,注冊中心將基於長連接推送變更數據給服務消費者。
④服務消費者從返回的地址列表中,基於軟負載均衡,選一台提供者進行調用,如果調用失敗,在選擇另一台調用。
⑤服務消費者和服務提供者,在內存中調用次數與調用時間,定時每分鍾發送一次統計數據到監控中心。
4.dubbo核心功能詳解
(1)dubbo是怎樣實現面向接口的遠程過程調用的?
通過注冊中心,dubbo將服務提供者與服務消費者聯通起來,服務提供者暴漏服務,服務消費者引入提供者的依賴以及簡單的配置,就可進行調用。
(2)為什么消費者通過接口就能調用到提供者的實現類?
提供者在向注冊中心注冊服務時,會通過配置的方式,將接口的實現類所在的位置暴漏出來。
xml:
<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
注解:
dubbo:
## Base packages to scan Dubbo Component:@com.alibaba.dubbo.config.annotation.Service
scan:
basePackages: com.funtl.myshop.service.user.provider.api.impl
(3) 集群容錯是什么?
①背景
當消費者調用某個提供者時,由於網絡的原因,調用失敗了,我們可以配置服務消費者的重試策略,可能第二次的調用是成功的。但是如果是因為提供者的節點發生故障,而引起的調用失敗,我們就得使用集群容錯模式,調用其他可用的節點,這就提高了服務的可用性。
②集群容錯架構圖
③各節點關系
◉ Invoker : 提供者的一個可調用接口的抽象,包含提供者的ip以及接口信息。
◉ Directory : 包含多個Invoker,可以看作List<Invoker>,Directory的值是動態的,會隨着注冊中心向消費者推送的服務列表而變更。
◉ Cluster : 將Directory中的多個Invoker偽裝成一個Invoker,對上層透明,偽裝過程包含了容錯邏輯,調用失敗后,重試另一個。
◉ Router : 負責從多個Invoker中按照路由規則選出子集,比如讀寫分離,應用隔離等;
◉ LoadBalance : 從多個Invoker中選出一個用於本次調用,選的過程,包含負載均衡算法,調用失敗后,重新選擇。
(4)dubbo支持的6種集群容錯模式
① Failover Cluster
這種模式是dubbo集群容錯默認的模式選擇,調用失敗時,會自動切換,重新嘗試調用其它節點上的可用服務。對於一些冪等性操作可以使用該模式,如讀操作。可以知道的是,重復調用必然會帶來相應端的延遲,可以通過 retries="2"
來設定重試次數(不含第一次)。
配置:
<dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0" cluster="failover" retries="2" timeout="100" ref="chatRoomOnlineUserCounterService" protocol="dubbo" > <dubbo:method name="queryRoomUserCount" timeout="80" retries="2" /> </dubbo:service>
② Failfast Cluster
這種模式稱為快速失敗模式,調用只執行一次,失敗則立即報錯。這種模式適用於非冪等性操作,如寫操作。比如交易系統,我們要下訂單,如果一次失敗,就讓他失敗。通常服務消費方控制是否重新發起下訂單操作請求。
③ Failsafe Cluster
這種模式稱為失敗安全模式。如果調用失敗,不是直接忽略失敗的調用,而是記錄下失敗的調用到日志文件,以便后續審計。
④ Failback Cluster
失敗自動恢復,后台記錄失敗請求,定時重發。通常用於消息通知操作。
⑤ Forking Cluster
並行調用多個服務器,只要一個返回成功即可。通常用於實時性較高的讀操作,但需浪費更多的服務資源。
⑥ Broadcast Cluster
廣播調用所有提供者,逐個調用,任意一台報錯則報錯,通常用於通知所有提供者更新緩存或日志等本地資源信息。
(5)dubbo提供的負載均衡
dubbo內置了4中負載均衡策略:
①Random LoadBalance : 隨機策略,配置值為random。可以設置權重,有利於充分利用服務器資源。配置高的機器可以設置權重大些,配置低的設置小些。
②RoundRobin LoadBalance : 輪詢策略,配置值為roundrobin。
③LeastActive LoadBalance :配置值為leastactive。根據請求調用的次數計數,處理請求更慢的節點會收到更少的請求。
④ConsistenHash LoadBalance : 一致性Hash策略。相同調用參數的請求會發送到同一個服務提供方節點上,如果某個節點發生故障無法提供服務,則會基於一致性Hash算法映射到其他服務節點上。