一、Dubbo

1. Dubbo簡介

Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可透過高效能的RPC實現服務的輸出和輸入功能,可以和Spring框架無縫整合。

Dubbo是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。

現已發展成為Apache的頂級孵化開源專案,詳見官網:

2. Dubbo組織架構圖

面試官:請比較一下SpringCloud與Dubbo

官網的dubbo組織架構圖

詳細介紹

Registry:服務註冊與發現中心,作為服務提供者和消費者註冊與發現的中心。

Provider:服務提供者,在註冊中心註冊作為服務提供的一方,釋出服務到服務註冊中心。

Consumer:服務消費者,透過註冊中心協調,訂閱可用的已註冊的服務。

Container:服務執行容器,獨立的容器類似於tomcat/jboss的作用,作為服務執行的容器。

Monitor:dubbo的監控中心,用來顯示介面暴露、註冊情況,也可以看介面的呼叫明細,呼叫時間等。

3. Dubbo的優勢

單一應用架構,當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的 資料訪問框架(ORM)是關鍵。

垂直應用架構,當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。此時,用於加速前端頁面開發的 Web框架(MVC)是關鍵。

分散式服務架構,當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的 分散式服務框架(RPC)是關鍵。

流動計算架構當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。此時,用於提高機器利用率的 資源排程和治理中心(SOA)是關鍵。

二、SpringCloud

1. SpringCloud簡介

SpringCloud是一系列框架的有序集合。它基於SpringBoot的便利性融合了一整套實現微服務的框架並提供了服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等元件。

2. SpringCloud組織架構

面試官:請比較一下SpringCloud與Dubbo

簡單SpringCloud組織架構圖

Spring Cloud子專案包括:

Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠端伺服器,目前支援本地儲存、Git以及Subversion。

Spring Cloud Bus:事件、訊息匯流排,用於在叢集(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。

Spring Cloud Netflix:針對多種Netflix元件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層伺服器的故障轉移。

Netflix Hystrix:容錯管理工具,旨在透過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。

Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。

Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態型別化屬性、執行緒安全配置操作、輪詢框架、回撥機制等功能。

Spring Cloud for Cloud Foundry:透過Oauth2協議繫結服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。

Spring Cloud Sleuth:日誌收集工具包,封裝了Dapper,Zipkin和HTrace操作。

Spring Cloud Data Flow:大資料操作工具,透過命令列方式操作資料流。

Spring Cloud Security:安全工具包,為你的應用程式新增安全控制,主要是指OAuth2。

Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫整合。

Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。

Spring Cloud Stream:資料流操作開發包,封裝了與Redis,Rabbit、Kafka等傳送接收訊息。

Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令列方式快速建立雲元件。

3. SpringCloud特點

約定優於配置

開箱即用、快速啟動

適用於各種環境

輕量級的元件

元件支援豐富,功能齊全

三、Dubbo與SpringCloud的比較

1. Dubbo與SpringCloud的核心要素比較

面試官:請比較一下SpringCloud與Dubbo

核心要素

2. 整體比較

Dubbo由於是二進位制的傳輸,佔用頻寬會更少

SpringCloud是Http協議傳輸,頻寬會比較多,同時使用http協議一般會使用JSON報文,消耗會更大

Dubbo的開發難度較大,原因是Dubbo的jar包依賴問題很多大型工程無法解決

SpringCloud的介面協議約定比較自由且鬆散,需要有強有力的行政措施來限制介面無序升級

Dubbo的註冊中心可以選擇Zookeeper,Redis等多種,SpringCloud的註冊中心只能用eureka或者自研