簡單了解Apache Dubbo


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算法映射到其他服務節點上。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM