采用Dubbo?還是Spring Cloud?
實施微服務的首要條件就是選擇適合團隊的微服務框架。
目前市場上微服務的框架,不管是開源的還是收費的,都有很多,比如Dubbo、Spring Cloud、Tars、Helidon、SOFAStack、gRPC、Thrift、Brpc、Motan等。在選擇框架時需要考慮如下技術點。
◎ 服務發(fā)布訂閱:是自動發(fā)現注冊,還是手動在線注冊。
◎ 服務路由形式:框架中支持的服務路由(比如常用的隨機路由)是否滿足我們的需求,或者是否支持自定義路由。
◎ 集群容錯:集群容錯所支持的方式,比如快速失敗、失敗自動切換等常用的容錯方式。
◎ 調用方式:服務的調用方式是否支持同步、異步以及并行調用。
◎ 通信協議:通信協議是否滿足業(yè)務需求,是否支持自定義協議。
◎ 序列化方式:框架所支持的序列化方式是二進制序列化還是文本方式序列化。
那么在框架選擇上,糾結于到底是采用Dubbo,還是采用Spring Cloud?
Dubbo是阿里巴巴(即阿里巴巴集團)開源的一款高性能、輕量級的開源優(yōu)秀Java版RPC框架,可使應用通過高性能的RPC實現服務的輸出/輸入功能,可以和Spring框架無縫集成。
Dubbo有三大核心能力:?
(1)面向接口的遠程方法調用
(2)提供容錯和多種負載均衡策略
(3)服務自動注冊和發(fā)現功能
Spring Cloud是Spring家族的產品,專注于企業(yè)級開源框架的研發(fā),它利用Spring Boot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎設施的開發(fā)。比如,服務發(fā)現注冊、配置中心、消息總線、負載均衡、熔斷器、數據監(jiān)控等特性都可以用Spring Boot風格做到一鍵部署和啟動。下面我們從總體架構及編程方式方面對Dubbo和Spring Cloud進行詳細對比,以便確定到底采用哪種框架。
總體架構對比
Dubbo架構
Dubbo架構的概況如圖1-7所示,由Consumer、Provider、Registry、Container和Monitor這5部分組成。
◎ Consumer:調用遠程服務的服務消費方(或稱為服務消費者)。
◎ Provider:暴露服務的服務提供方(或稱為服務提供者),可以通過jar或者容器的方式啟動服務。
◎ Registry:服務注冊中心和發(fā)現中心。
◎ Container:運行服務的容器。
◎ Monitor:調用時間監(jiān)控中心,統(tǒng)計服務和調用次數。
?Spring Cloud架構
Spring Cloud架構的概況如圖1-8所示,由Consumer、Provider及Eureka Server這3部分組成。
◎ Provider:暴露服務的提供方。
◎ Consumer:調用遠程服務的服務消費方。
◎ Eureka Server:服務注冊中心和服務發(fā)現中心。?
編程方式對比
Dubbo的服務發(fā)布和調用流程如下。
(1)先定義接口及DTO參數對象。
(2)實現接口中所定義的方法。
(3)通過XML或者注解方式發(fā)布Dubbo服務。
(4)服務消費者在Maven中依賴接口的jar包,通過接口調用服務。
Spring Cloud的服務發(fā)布和調用流程如下。
(1)定義API接口文檔以及Feign的接口。
(2)服務提供者發(fā)布Rest接口。
(3)服務消費者組織接口文檔中的參數,通過Feign完成接口調用。