SpringCloud(一)SpringCloud的簡單概述以及與Dubbo對比
SpringCloud概述
一、回顧微服務
什麼是微服務?微服務(Microservice Architecture)是近幾年流行的一種架構思想,目前而言,對於微服務,業界沒有一個統一的標準的定義。
通常而言,微服務架構是一種架構模式,或者說是一種架構風格,它提倡將單一的應用程式劃分為一組小的服務,每個服務執行在其獨立的自己的程序內,服務之間相互協調相互配置,為使用者提供最終價值。服務之間採用輕量級的通訊機制互相溝通,每個服務都圍繞著具體的業務進行構建,並且能夠被獨立的部署到生產環境中。
微服務架構的四個核心問題:
- 服務很多,客戶端該如何訪問? —— API 閘道器、zuul元件
- 這麼多服務?服務之間如何通訊? —— HTTP、RPC
- 這麼多服務?如何治理? —— 註冊和發現,zookeeper
- 服務掛了怎麼辦? —— 熔斷機制
二、SpringCloud 入門概述
2.1 什麼是SpringCloud
官網:https://spring.io/projects/spring-cloud#learn
Spring Cloud 是一套完整的微服務解決方案,基於 Spring Boot 框架,準確的說,它不是一個框架,而是一個大的容器,它將市面上較好的微服務框架整合進來,從而簡化了開發者的程式碼量。
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務發現、服務閘道器、服務路由、鏈路追蹤
Spring Cloud 是一個由眾多獨立子專案組成的大型綜合專案,每個子專案有不同的發行節奏,都維護著自己的釋出版本號。Spring Cloud通過一個資源清單BOM(Bill of Materials)來管理每個版本的子專案清單。為避免與子專案的釋出號混淆,所以沒有采用版本號的方式,而是通過命名的方式。(命名方式採用倫敦地鐵站的名稱,同時根據字母表的順序來對應版本時間順序)
Spring Cloud 並不重複造輪子,而是將市面上開發得比較好的模組整合進去,進行封裝,從而減少了各模組的開發成本。換句話說:Spring Cloud 提供了構建分散式系統所需的“全家桶”。
2.2 Spring Cloud 優缺點
其主要優點有:
- 集大成者,Spring Cloud 包含了微服務架構的方方面面。
- 約定優於配置,基於註解,沒有配置檔案。
- 輕量級元件,Spring Cloud 整合的元件大多比較輕量級,且都是各自領域的佼佼者。
- 開發簡便,Spring Cloud 對各個元件進行了大量的封裝,從而簡化了開發。
- 開發靈活,Spring Cloud 的元件都是解耦的,開發人員可以靈活按需選擇元件。
接下來,我們看下它的缺點:
- 專案結構複雜,每一個元件或者每一個服務都需要建立一個專案。
- 部署門檻高,專案部署需要配合 Docker 等容器技術進行叢集部署,而要想深入瞭解 Docker,學習成本高。
Spring Cloud 的優勢是顯而易見的。因此對於想研究微服務架構的學者來說,學習 Spring Cloud 是一個不錯的選擇。
2.3 SpringCloud 和 SpringBoot
- SpringBoot 專注於快速方便的開發單個個體微服務
- SpringCloud 是關注全域性的微服務協調調整治理框架,它將 SpringBoot 開發的一個個單體微服務整合並管理起來,併為各個微服務之間提供:配置管理、服務發現、斷路器、路由、微代理、事件匯流排、決策精選、分散式會話等等整合服務。
- SpringBoot 可以離開 SpringCloud 獨立使用開發專案,但是 SpringCloud 離不開 SpringBoot,屬於依賴關係。
總結:SpringBoot 專注於快速、方便的開發單個個體微服務;SpringCloud 是關注全域性的微服務協調調整治理框架
2.4 Dubbo和SpringCloud
Dubbo | Spring Cloud | |
---|---|---|
服務註冊中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服務呼叫方式 | RPC | REST API |
服務監控 | Dubbo-monitor | SpringBoot Admin |
斷路器 | 不完善 | Spring Cloud Netfilx Hystrix |
服務閘道器 | 無 | Spring Cloud Netfilx Zuul |
分散式配置 | 無 | Spring Cloud Config |
服務跟蹤 | 無 | Spring Cloud Sleuth |
訊息匯流排 | 無 | Spring Cloud Bus |
資料流 | 無 | Spring Cloud Stream |
批量任務 | 無 | Spring Cloud Task |
最大區別:SpringCloud 拋棄了Dubbo的RPC通訊,採用的是基於HTTP的REST方式。
嚴格來講,兩種方式各有優劣。雖然一定程度上說,後者犧牲了服務呼叫的效能,但也避免了原生RPC帶來的問題,而且REST比RPC更加靈活,服務提供方和呼叫方法的依賴只依靠一紙契約,不存在程式碼級別的強依賴,這在強調快速演化的微服務環境下顯得更加合適。
2.5 重要文件(中文)
-
Spring Cloud Netflix:https://www.springcloud.cc/spring-cloud-netflix.html
-
SpringCloud:https://www.springcloud.cc/spring-cloud-dalston.html