天天看點

Spring Boot和 Spring Cloud的差別;單體架構與微服務架構的差別以及優缺點

Spring Boot 簡介

Spring Boot是由Pivotal團隊提供的全新架構,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該架構使用了特定的方式來進行配置,進而使開發人員不再需要定義樣闆化的配置。通過這種方式,Spring Boot緻力于在蓬勃發展的快速應用開發領域(rapid application development)成為上司者

特點:

  • Spring Boot可以建立獨立的Spring應用程式;
  • 内嵌了如Tomcat,Jetty和Undertow這樣的容器,也就是說可以直接跑起來,用不着再做部署工作了。
  • 無需再像Spring那樣搞一堆繁瑣的xml檔案的配置;
  • 可以自動配置Spring;
  • 提供了一些現有的功能,如表單資料驗證以及一些外部配置這樣的一些第三方功能;
  • 提供的POM可以簡化Maven的配置;
  • 非常簡潔的安全政策內建
  • Spring Boot 使監控變簡單,Spring Boot 自帶監控元件,使用 Actuator 輕松監控服務各項狀态。
  • Spring Boot 使部署變簡單,Spring Boot 本身内嵌啟動容器,僅僅需要一個指令即可啟動項目,結合 Jenkins 、Docker 自動化運維非常容易實作。
  • Spring Boot 使配置變簡單,Spring Boot 提供了豐富的 Starters,內建主流開源産品往往隻需要簡單的配置即可。

Spring Cloud 簡介

Spring Cloud是一系列架構的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud并沒有重複制造輪子,它隻是将目前各家公司開發的比較成熟、經得起實際考驗的服務架構組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實作原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

Spring Cloud 和 Spring Boot 的對比差別:

  • Spring boot 是 Spring 的一套快速配置腳手架,可以基于spring boot 快速開發單個微服務;Spring Cloud是一個基于Spring Boot實作的雲應用開發工具;
  • Spring boot專注于快速、友善內建的單個個體,Spring Cloud是關注全局的服務治理架構;
  • spring boot使用了預設大于配置的理念,很多內建方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基于Spring boot來實作。
  • Spring boot可以離開Spring Cloud獨立使用開發項目,但是Spring Cloud離不開Spring boot,屬于依賴的關系。

Spring Boot 是單體應用,包含實作所有功能的程式,但是Spring Cloud是分布式微服務應用。

下面是Spring Cloud的一張全景圖,Spring Cloud = Spring Boot + 分布式元件(不知道這樣等号合不合适)

Spring Boot和 Spring Cloud的差別;單體架構與微服務架構的差別以及優缺點

單體架構與分布式微服務架構的對比:

單體架構:

通俗地講,“單體應用(monolith application)”就是将應用程式的所有功能都打包成一個獨立的單元,可以是JAR、EXE、BIN或其它歸檔格式。

Spring Boot 完整的部署了一個項目,項目所有功能都在單個項目中做了實作。

單體架構的優點

  • 便于開發:隻需借助IDE的開發,調試功能即可完成,開發簡單直接,集中式管理, 基本不會重複開發
  • 易于測試:隻需要通過單元測試或浏覽器即可完成測試
  • 易于部署:打包成單一可執行jar包或者war包,執行包即可完成部署
  • 功能都在本地,沒有分布式的管理開銷和調用開銷

單體架構的缺點

  • 複雜性高,如果業務很複雜,代碼維護難,代碼功能耦合在一起,新人不知道何從下手
  • 部署不靈活:建構時間長,任何小修改必須重新建構整個項目
  • 擴充能力受限,伸縮性差(系統運作在單個伺服器上,比較難擴充,無法滿足高并發情況下的業務需求)
  • 代碼難以被修改和重構,因為單體架構代碼耦合度會比較高
  • 不利于多人開發,容易發生沖突
  • 單點故障問題,一旦某個功能挂了,所有功能都無法使用

單體架構的适用場景

  • 單個團隊維護的業務功能簡單的系統(性能要求不高,單個伺服器也能負載)

微服務架構

Spring Cloud屬于分布式微服務架構。微服務架構風格是一種将一個單一應用程式拆分為許多小型服務的方法,這樣一來,每個小開發團隊單獨維護一個小型服務的運作(提升每個團隊的專注度,服務間的互動由團隊間協商決定),便于團隊協作,同時避免了單點故障問題。

每個服務運作在自己的程序中,所有微服務獨立運作,共同建構起整個系統,服務間通信采用輕量級通信機制(通常用HTTP傳送JSON資料完成程序間的通信,REST API)。

這些服務圍繞業務能力建構并且可通過全自動部署機制獨立部署。這些服務采用集中式的管理,每個服務可用不同的語言開發,使用不同的資料存儲技術,進而達到異構。

微服務的優點

  • 單個拆分出來的微服務更加容易開發、維護
  • 獨立部署:由于微服務具備獨立的運作程序,是以每個微服務也可以獨立部署,并且單個拆分出來的微服務啟動較快
  • 并且修改某個微服務的時候,隻用重新部署單個服務,比較容易部署
  • 技術棧不受限,多個服務可以分别使用不同的技術,隻需要保證服務互動正常就行
  • 按需伸縮,便于添加伺服器提高性能(因為本來就是分布式的)
  • 擴充性高,我們需要什麼功能直接增加服務就好了
  • 容錯性能好:單個服務出了故障,那麼bug也會僅僅停留在某個服務中,不會影響其他服務的正常使用。

微服務的缺點

  • 微服務架構帶來過多的運維操作, 可能需要團隊具備一定的 DevOps 技巧.
  • 分布式系統可能複雜難以管理。因為分布部署跟蹤問題難。當服務數量增加,管理複雜性增加。

微服務的适用場景

  • 大型、複雜的項目
  • 有快速疊代的需求
  • 通路壓力大

微服務拆分:

  • 職責劃分(按照業務功能做劃分,比如專門維護支付功能業務或者專門維護秒殺業務,通過功能的不同來劃分業務)
  • 通用性劃分(将通用的東西專門劃分出去,比如分布式系統裡面的配置中心專門用來維護多個機器使用的配置,存儲系統專門使用IO性能比較好的伺服器來部署存儲業務)

微服務拆分粒度:

References:

  • ​​https://baike.baidu.com/item/Spring%20Boot/20249767?fr=aladdin​​
  • ​​https://baike.baidu.com/item/spring%20cloud​​

繼續閱讀