淺析Spring boot與Spring cloud 之間的關係
有些童鞋剛接觸這塊 ,理解不是很深刻會經常問道這樣類似的問題,下面我就簡單講解一下Spring boot與Spring cloud 之間的關係!
淺析spring boot 和spring cloud的關係:
Spring boot 是 Spring 的一套快速配置腳手架,可以基於spring boot 快速開發單個微服務,Spring Boot,看名字就知道是Spring的引導,就是用於啟動Spring的,使得Spring的學習和使用變得快速無痛。不僅適合替換原有的工程結構,更適合微服務開發。
Spring Cloud基於Spring Boot,為微服務體系開發中的架構問題,提供了一整套的解決方案——服務註冊與發現,服務消費,服務保護與熔斷,閘道器,分散式呼叫追蹤,分散式配置管理等。
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具;Spring boot專注於快速、方便整合的單個個體,Spring Cloud是關注全域性的服務治理框架;spring boot使用了預設大於配置的理念,很多整合方案已經幫你選擇好了,能不配置就不配置,Spring Cloud很大的一部分是基於Spring boot來實現。
學過Spring的都知道,Spring開發有非常頭疼的三點:
以啟動一個帶Hibernate的Spring MVC為例。
1. 依賴太多了,而且要注意版本相容。這個應用,要新增10-20個依賴,Spring相關的包10多個,然後是Hibernate包,Spring與Hibernate整合包,日誌包,json包一堆,而且要注意版本相容性。
2. 配置太多了,要配置註解驅動,要配置資料庫連線池,要配置Hibernate,要配置事務管理器,要配置Spring MVC的資源對映,要在web.xml中配置啟動Spring和Spring MVC等
3.部署和執行麻煩。要部署到tomcat裡面。不能直接用java命令執行。
太多重複和大家都一樣的配置了。
Spring Boot的哲學就是約定大於配置。既然很多東西都是一樣的,為什麼還要去配置。
1. 通過starter和依賴管理解決依賴問題。
2. 通過自動配置,解決配置複雜問題。
3. 通過內嵌web容器,由應用啟動tomcat,而不是tomcat啟動應用,來解決部署執行問題。
Spring Cloud體系就比較複雜了。基本可以理解為通過Spring Boot的三大魔法,將各種元件整合在一起,非常簡單易用。
淺析spring boot 和spring cloud的關係:
你可以把spring boot的官方的包分為兩類,一種是為了搭建一個服務用的,比如hibernate jpa,比如 message。另外一種含有cloud關鍵字的,是為了各個spring boot之前管理和使用的包。
因為當把叢集、CI等方法集中進來一起考慮的時候,這件事情就複雜了。
多個小有服務整合成的大服務,要有一個訊息匯流排來用於互相通知和呼叫,要有一個服務發現程式來管理某個小服務上線可用,同時在服務離線時也要能處理,各個小服務要儘量各自獨立,還要考慮服務的依賴性,叢集的負載均衡,配置檔案的分離。
再把CI和Docker拿進來一起考慮的話,更亂。
但我認為這樣完成的一個服務是更具有可插拔性,更容易維護的。而且遵循了上面的cloud方案的話,在服務的健壯性上面也很強。
寫到這裡對於新接觸的我認為可以先從單獨的spring boot程式開始入門,當要新增一個新功能時,考慮拆分成另外服務。兩個程式間可以通過 jmx或是 其它訊息中介軟體或是rest通訊。最後實現了一個各自獨立的功能叢集。
總結一句:Spring boot可以離開Spring Cloud獨立使用開發專案,但是Spring Cloud離不開Spring boot,屬於依賴的關係。