天天看點

Dubbo學習(四) dubbo的特點,8種通信協定之對比

(1) 連通性:

注冊中心負責服務位址的注冊與查找,相當于目錄服務,服務提供者和消費者隻在啟動時與注冊中心互動,注冊中心不轉發請求,壓力較小

監控中心負責統計各服務調用次數,調用時間等,統計先在記憶體彙總後每分鐘一次發送到監控中心伺服器,并以報表展示

服務提供者向注冊中心注冊其提供的服務,并彙報調用時間到監控中心,此時間不包含網絡開銷

服務消費者向注冊中心擷取服務提供者位址清單,并根據負載算法直接調用提供者,同時彙報調用時間到監控中心,此時間包含網絡開銷

注冊中心,服務提供者,服務消費者三者之間均為長連接配接,監控中心除外

注冊中心通過長連接配接感覺服務提供者的存在,服務提供者當機,注冊中心将立即推送事件通知消費者

注冊中心和監控中心全部當機,不影響已運作的提供者和消費者,消費者在本地緩存了提供者清單

注冊中心和監控中心都是可選的,服務消費者可以直連服務提供者

(2) 健狀性:

監控中心宕掉不影響使用,隻是丢失部分采樣資料

資料庫宕掉後,注冊中心仍能通過緩存提供服務清單查詢,但不能注冊新服務

注冊中心對等叢集,任意一台宕掉後,将自動切換到另一台

注冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地緩存通訊

服務提供者無狀态,任意一台宕掉後,不影響使用

服務提供者全部宕掉後,服務消費者應用将無法使用,并無限次重連等待服務提供者恢複

(3) 伸縮性:

注冊中心為對等叢集,可動态增加機器部署執行個體,所有用戶端将自動發現新的注冊中心

服務提供者無狀态,可動态增加機器部署執行個體,注冊中心将推送新的服務提供者資訊給消費者

(4) 更新性:

當服務叢集規模進一步擴大,帶動IT治理結構進一步更新,需要實作動态部署,進行流動計算,現有分布式服務架構不會帶來阻力:

Dubbo支援的協定

在通信過程中,不同的服務等級一般對應着不同的服務品質,那麼選擇合适的協定便是一件非常重要的事情。你可以根據你應用的建立來選擇。例如,使用RMI協定,一般會受到防火牆的限制,是以對于外部與内部進行通信的場景,就不要使用RMI協定,而是基于HTTP協定或者Hessian協定。Dubbo支援8種左右的協定,如下所示:

(1) dubbo:// Dubbo協定

(2) rmi:// RMI協定

(3) hessian:// Hessian協定

(4) http:// HTTP協定

(5) webservice:// WebService協定

(6) thrift:// Thrift協定

(7) memcached:// Memcached協定

(8)redis:// Redis協定

在通信過程中,不同的服務等級一般對應着不同的服務品質,那麼選擇合适的協定便是一件非常重要的事情。你可以根據你應用的建立來選擇。

例如,使用RMI協定,一般會受到防火牆的限制,是以對于外部與内部進行通信的場景,就不要使用RMI協定,而是基于HTTP協定或者Hessian協定。 

部分協定的特點和使用場景如下:

1、dubbo協定

Dubbo預設協定采用單一長連接配接和NIO異步通訊,适合于小資料量大并發的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。

 2、RMI

RMI協定采用JDK标準的java.rmi.*實作,采用阻塞式短連接配接和JDK标準序列化方式

 3、hessian

Hessian協定用于內建Hessian的服務,Hessian底層采用Http通訊,采用Servlet暴露服務,Dubbo預設内嵌Jetty作為伺服器實作

4、http

采用Spring的HttpInvoker實作 

5、webservice

基于CXF的frontend-simple和transports-http實作 

6、thrif

Thrift是Facebook捐給Apache的一個RPC架構,目前 dubbo 支援的 thrift 協定是對 thrift 原生協定的擴充,在原生協定的基礎上添加了一些額外的頭資訊,比如service name,magic number等。

參考:dubbo通信協定之對比