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