dubbo和spring cloud作爲當下比較流行的兩種開發框架,相信在最初的學習或者開發選型時會糾結于于學習哪個框架。下邊就來從橫向和縱向分別對比一下這兩者之間的異同,以便對這兩種框架有更深入的理解。
在對比之前,我們先來看看這兩者之間分別有什麼特點:
Dubbo:
Dubbo是一個阿里巴巴開源出來的一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。其核心部分包含:
遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
集羣容錯:提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。
自動發現:基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
Spring cloud:
Spring Cloud爲開發者提供了快速構建分佈式系統的通用模型的工具(包括配置管理、服務發現、熔斷器、智能路由、微代理、控制總線、一次性令牌、全局鎖、領導選舉、分佈式會話、集羣狀態等)。 主要項目包括:
Spring Cloud Config:由Git存儲庫支持的集中式外部配置管理。配置資源直接映射到Spring Environment,但是如果需要可以被非Spring應用程序使用。
Spring Cloud Netflix:與各種Netflix OSS組件(Eureka,Hystrix,Zuul,Archaius等)集成。
Spring Cloud Bus:用於將服務和服務實例與分佈式消息傳遞聯繫起來的事件總線。用於在集羣中傳播狀態更改(例如配置更改事件)。
Spring Cloud for Cloudfoundry:將您的應用程序與Pivotal Cloudfoundry集成。提供服務發現實現,還可以輕鬆實現通過SSO和OAuth 2保護資源,還可以創建Cloudfoundry服務代理。
Spring Cloud - Cloud Foundry Service Broker:提供構建管理一個Cloud Foundry中服務的服務代理的起點。
Spring Cloud Cluster:領導選舉和通用狀態模型(基於ZooKeeper,Redis,Hazelcast,Consul的抽象和實現)。
Spring Cloud Consul:結合Hashicorp Consul的服務發現和配置管理
Spring Cloud Security:在Zuul代理中爲負載平衡的OAuth 2休眠客戶端和認證頭中繼提供支持。
Spring Cloud Sleuth:適用於Spring Cloud應用程序的分佈式跟蹤,與Zipkin,HTrace和基於日誌(例如ELK)跟蹤兼容。
Spring Cloud Data Flow:針對現代運行時的可組合微服務應用程序的雲本地編排服務。易於使用的DSL,拖放式GUI和REST-API一起簡化了基於微服務的數據管道的整體編排。
Spring Cloud Stream:輕量級事件驅動的微服務框架,可快速構建可連接到外部系統的應用程序。使用Apache Kafka或RabbitMQ在Spring Boot應用程序之間發送和接收消息的簡單聲明式模型。
Spring Cloud Stream Application Starters:Spring Cloud任務應用程序啓動器是Spring Boot應用程序,可能是任何進程,包括不會永遠運行的Spring Batch作業,並且它們在有限時間的數據處理之後結束/停止。
Spring Cloud ZooKeeper:ZooKeeper的服務發現和配置管理。
Spring Cloud for Amazon Web Services:輕鬆集成託管的Amazon的Web Services服務。它通過使用Spring的idioms和APIs便捷集成AWS服務,例如緩存或消息API。開發人員可以圍繞託管服務,不必關心基礎架構來構建應用。
Spring Cloud Connectors:使PaaS應用程序在各種平臺上輕鬆連接到後端服務,如數據庫和消息代理(以前稱爲“Spring Cloud”的項目)。
Spring Cloud Starters:作爲基於Spring Boot的啓動項目,降低依賴管理(在Angel.SR2後,不在作爲獨立項目)。
Spring Cloud CLI:插件支持基於Groovy預言快速創建Spring Cloud的組件應用。
從上可以發現,兩者的模式比較接近,都涉及到了服務的提供方、註冊中心和服務的消費方。
縱向對比看下兩者的區別:
核心要素 | Dubbo | Spring Cloud |
---|---|---|
服務註冊中心 | Zookeeper、Redis | Spring Cloud Netflix Eureka |
服務調用方式 | RPC | REST API |
服務網關 | 無 | Spring Cloud Netflix Zuul |
斷路器 | 不完善 | Spring Cloud Netflix Hysrix |
分佈式配置 | 無 | Spring Cloud Config |
分佈式追蹤系統 | 無 | Spring Cloud Sleuth |
消息總線 | 無 | Spring Cloud Bus |
數據流 | 無 | Spring Cloud Stream 基於Redis,Rabbit,Kafka實現的消息微服務 |
批量任務 | 無 | Spring Cloud Task |
Dubbo只是實現了服務治理,而Spring Cloud子項目分別覆蓋了微服務架構下的衆多部件,而服務治理只是其中的一個方面。Dubbo提供了各種Filter,對於上述中“無”的要素,可以通過擴展Filter來完善,而這又平添了使用Dubbo的開發及配置難度。
Spring Cloud是一系列框架的有序集合,通過springboot風格屏蔽了複雜的配置和原理實現,留出可供開發人員易懂、易部署和易維護的開發工具包。
具體的項目開發及參考可以結合公司現有的框架和項目前景做一個綜合考量。
參考:
https://blog.csdn.net/javaxuexi123/article/details/79500619
https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc&isFailFlag=1