本人博客:技術棧
SpringCloud 簡介
儘管SpringCloud帶有 ‘Cloud’ 的字樣,但是並不是雲計算解決方案,而是在Spring Boot基礎上構建的,用於快速構建分佈式系統的通用模式的工具集。
使用SpringCloud開發的應用程序非常適合在Docker或者PaaS上部署,所以又叫做雲原生應用。雲原生可以簡單理解爲面向雲環境的軟件框架。
Spring Cloud 特點
- 約定優於配置
- 適用於各種環境
- 隱藏了組件的複雜性
- 開箱即用
- 輕量級的組件
- 組件豐富
- 選型中立、豐富
- 靈活
學習SpringCloud 技術儲備
SpringCloud並不是面向零基礎開發人員,它有一定的學習曲線。 - 語言基礎:SpringCloud是基於java語言的工具套件,一定要有java基礎。
- SpringBoot:SpringCloud是基於SpringBoot構建的,因此它延續了SpringBoot的契約模式以及開發方式。
- 項目管理與構建工具: 目前業界比較主流的項目管理與構建工具有Maven和Gradle等,我個人使用的是Maven
SpringCloud/SpringBoot版本兼容性 - Angel版本基於SpringBoot1.2.x構建,在一些場景下,與SpringBoot1.3.x及以上版本不兼容。
- Brixton版本基於SpringBoot1.3.x構建,也可使用1.4.x進行測試,與SpringBoot1.2.x不兼容。
- Camden版本基於SpringBoot1.4.x構建,也可使用1.5.x進行測試。
- Dalston版本基於SpringBoot1.5.x構建,不兼容SpringBoot2.0.x。
- Edgware版本基於SpringBoot1.5.x構建,不兼容SpringBoot2.0.x。
- Finchley版本基於SpringBoot2.0.x構建,不兼容SpringBoot1.x。
個人在使用springCloud構建微服務框架的時候感覺還是比較簡單的,相對於使用阿里雲的Dubbo,SpringCloud提供了很多的組件,有自己的註冊中心,Dubbo使用zookeeper做自己的註冊中心,SpringCloud有自己的網關、配置中心、服務跟蹤、消息總線等,Dubbo是沒有的,相對於SpringCloud的斷路器HystrixDubbo也不完善。
Dubbo | Spring Cloud | |
---|---|---|
服務註冊中心 | Zookeeper | Spring Cloud Netflix Eureka |
服務調用方式 | RPC | REST API |
服務監控 | Dubbo-monitor | Spring Boot Admin |
斷路器 | 不完善 | Spring Cloud Netflix Hystrix |
服務網關 | 無 | Spring Cloud Netflix Zuul |
分佈式配置 | 無 | Spring Cloud Config |
服務跟蹤 | 無 | Spring Cloud Sleuth |
消息總線 | 無 | Spring Cloud Bus |
數據流 | 無 | Spring Cloud Stream |
批量任務 | 無 | Spring Cloud Task |
最大的區別:Spring Cloud拋棄了Dubbo 的RPC通信,採用的是基於HTTP的REST方式。
嚴格來說,這兩種方式各有優劣。雖然在一定程度上來說,後者犧牲了服務調用的性能,但也避免了上面提到的原生RPC帶來的問題。而且REST相比RPC更爲靈活,服務提供方和調用方的依賴只依靠一紙契約,不存在代碼級別的強依賴,這在強調快速演化的微服務環境下,顯得更爲合適。
總結:
Dubbo和Spring Cloud並不是完全的競爭關係,兩者所解決的問題域不一樣:Dubbo的定位始終是一款RPC框架,而Spring Cloud的目的是微服務架構下的一站式解決方案。
非要比較的話,Dubbo可以類比到Netflix OSS技術棧,而Spring Cloud集成了Netflix OSS作爲分佈式服務治理解決方案,但除此之外Spring Cloud還提供了包括config、stream、security、sleuth等分佈式服務解決方案。
當前由於RPC協議、註冊中心元數據不匹配等問題,在面臨微服務基礎框架選型時Dubbo與Spring Cloud只能二選一,這也是兩者總拿來做對比的原因。
Dubbo之後會積極尋求適配到Spring Cloud生態,比如作爲SpringCloud的二進制通訊方案來發揮Dubbo的性能優勢,或者Dubbo通過模塊化以及對http的支持適配到Spring Cloud