Spring boot與Spring cloud 是什麼關係?
如題
Spring Boot就是一個內嵌Web伺服器(tomcat/jetty)的可執行程序的框架。你開發的web應用不需要作為war包部署到web伺服器中,而是作為一個可執行程序,啟動時把Web伺服器配置好,載入起來。
Spring Boot比較適合微服務部署方式,不再是把一堆應用放到一個Web伺服器下,重啟Web伺服器會影響到其他應用,而是每個應用獨立使用一個Web伺服器,重啟動和更新都很容易。
Spring Cloud是一套微服務開發和治理框架,來自Netflex的OSS,包含了微服務運行的功能,比如遠程過程調用,動態服務發現,負載均衡,限流等。小處說是一個快速上手開發的微架構開發包。通過自動配置功能加快程序開發速度。
傳統意義上,我們開始一個項目整個開發環境就要搭建一個很長的時間,期間如果加入更多的特性時還要更麻煩,spring boot把大量的常見組件都組合了起來,比如 hibernate jdbc mongodb jmx等等很多很多,只要引入相關的組件基本上就是零配置就可以用了。
大處說:
下面我來以我正在寫的一個服務來講解什麼我所理解的微服務,我現在在做一個基於websocket的實時通訊產品。我使用spring boot的 stomp實現,很方便的就搭建了一個含有用戶註冊和在線消息發送功能的一個服務,相信我代碼不超過500行。之後,這個服務要為我們另外一組人開發的微信客戶系統做後端通信層的服務,我為了微信服務與通訊服務的相互調用,加入了rest和RabbitMQ的組件做通訊效率的測試。之後寫了另外一個服務admin去集中監控和管理這個消息服務和微信服務的。最後還寫了一個服務去統一收集日誌。寫到這裡看明白了嗎?我理解的微服務的理念就是把軟體的功能盡量的拆分模塊化小型化,專註於完成一個功能,不做大而全。集成了多個功能的大而全的服務在穩定性、可維護性、升級的方便性、開發人員的上手的難度、上面都不如小功能的組件。
你可以把spring boot的官方的包分為兩類,一種是為了搭建一個服務用的,比如hibernate jpa,比如 message。另外一種含有cloud關鍵字的,是為了各個spring boot之前管理和使用的包。
因為當把集群、CI等方法集中進來一起考慮的時候,這件事情就複雜了。
多個小有服務整合成的大服務,要有一個消息匯流排來用於互相通知和調用,要有一個服務發現程序來管理某個小服務上線可用,同時在服務離線時也要能處理,各個小服務要盡量各自獨立,還要考慮服務的依賴性,集群的負載均衡,配置文件的分離。
再把CI和Docker拿進來一起考慮的話,更亂。
但我認為這樣完成的一個服務是更具有可插拔性,更容易維護的。而且遵循了上面的cloud方案的話,在服務的健壯性上面也很強。
寫到這裡對於新接觸的我認為可以先從單獨的spring boot程序開始入門,當要添加一個新功能時,考慮拆分成另外服務。兩個程序間可以通過 jmx或是 其它消息中間件或是rest通訊。最後實現了一個各自獨立的功能集群。Spring Boot,看名字就知道是Spring的引導,就是用於啟動Spring的,使得Spring的學習和使用變得快速無痛。不僅適合替換原有的工程結構,更適合微服務開發。
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 的一套快速配置腳手架,可以基於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 -&> spring boot &> spring cloud 這樣的關係。
對了可以關注我的博客keep pure more smile,springboot和springcloud系列文章都寫一些。
謝邀,說實話,這兩個都沒用過,spring boot 下個項目會用,作為app的服務端框架,spring boot 我理解就是把spring spring mvc spring data jpa 等等的一些常用的常用的基礎框架組合起來,提供默認的配置,然後提供可插拔的設計,就是各種starter,來方便開發者使用這一系列的技術,套用官方的一句話,spring 家族發展到今天,已經很龐大了,作為一個開發者,如果想要使用spring 家族一系列的技術,需要一個一個的搞配置,然後還有個版本兼容性問題,其實挺麻煩的,偶爾也會有小坑出現,其實蠻影響開發進度,spring boot 就是來解決這個問題,提供了一個解決方案吧,可以先不關心如何配置,可以快速的啟動開發,進行業務邏輯編寫,各種需要的技術,加入starter就配置好了,直接使用,可以說追求開箱即用的效果吧,srping cloud 看名稱,就是雲啊,現在流行雲技術啊,spring boot 可以支持你快速的開發出restful 風格的微服務架構,但是這還不夠啊,還要上雲,所以有了spring cloud,至於spring cloud 具體的技術細節,還沒研究,也沒有應用,等我用到了,再回來補充吧,先這些~
2016-10-10
最近使用spring boot 搭建了新項目框架,遇到了一些小問題,都可以解決,感覺把應用打包成jar然後運行真的是很方便,構建成docker鏡像然後運行也是很簡單,先這樣,spring cloud還沒用到,用到的時候再說
2017-7-21
應用spring boot開發速度真的是提升很多,最近感覺用spring boot開發比較6了,由於可能要拆分服務,最近開始看spring cloud,跑了幾個小demo,搭建速度很快,遇到小問題百度也能夠解決,什麼?你們用谷歌,不好意思,英語不好!!!要搞spring cloud,覺得要有三個條件吧,1項目有需求 2 spring boot玩的很6 3 對微服務架構有一定的研究
我的個人Springcloud專欄 http://blog.csdn.net/column/details/15197.html ,大家多多關注,謝謝。
spring cloud是基於spring boot的。
Spring Cloud builds on Spring Boot by providing a bunch of libraries that enhance the behaviour of an application when added to the classpath.
Spring CloudSpring cloud 是一套微服務框架
Spring boot 是 Spring 的一套快速配置腳手架
Spring cloud 基於 Spring boot 這套快速腳手架,加快初始配置時間
如果對 Spring 理解夠深的話,不用 Spring boot 也能玩轉,就是太繁瑣了。配置太多了
spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制匯流排、全局鎖、決策競選、分散式會話和集群狀態管理等操作提供了一種簡單的開發方式。spring boot 的優點是可以快速啟動,快速構建應用程序,而不需要太多的配置文件。spring cloud 是分散式開發的解決方案,基於spring boot,在spring boot做較少的配置,
便可成為 spring cloud 中的一個微服務。
歡迎加入【Spring Boot Cloud 交流群】:http://jq.qq.com/?_wv=1027k=40umhEo 交流更多關於Spring Boot 和Spring Cloud 技術交流樓主千萬不要被上面的答主誤導,認為springboot就是一個帶著web容器的框架,這個太小瞧springboot,boot的英文翻譯是引導,引導什麼呢?所以請樓主從@EnableAutoConfiguration這個註解開始看源碼,以及meta-inf下面的spring.factories的實現原理。
cloud是基於boot引導功能的框架,他把netflix神器們集成了進來了。
spring 是一個容器性質的框架,主要基於配置文件管理對象,spring boot 是對spring 的一個繼承,或者說簡化spring 的使用,開發起來無需被配置困擾,可以專註業務開發。spring cloud 是對spring boot 開發的項目進行構建的過程。
spring boot 我理解就是把spring spring mvc spring data jpa 等等的一些常用的常用的基礎框架組合起來,提供默認的配置,然後提供可插拔的設計,就是各種starter,來方便開發者使用這一系列的技術,套用官方的一句話,spring 家族發展到今天,已經很龐大了,作為一個開發者,如果想要使用spring 家族一系列的技術,需要一個一個的搞配置,然後還有個版本兼容性問題,其實挺麻煩的,偶爾也會有小坑出現,其實蠻影響開發進度,spring boot 就是來解決這個問題,提供了一個解決方案吧,可以先不關心如何配置,可以快速的啟動開發,進行業務邏輯編寫,各種需要的技術,加入starter就配置好了,直接使用,可以說追求開箱即用的效果吧,srping cloud 看名稱,就是雲,現在流行雲技術,spring boot 可以支持你快速的開發出restful 風格的微服務架構,但是這還不夠啊,還要上雲,所以有了spring cloud。
spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制匯流排、全局鎖、決策競選、分散式會話和集群狀態管理等操作提供了一種簡單的開發方式
boot的名字就知道了 他的主要責任在於引導 至於怎麼引導 就要查看一下偉大的@enable autoconfiguration 這個註解 只要你引入個pom 它的功能就能被正確載入,樓主不好奇么
最基礎的都是spring,然後在這個基礎上spring boot做了一些自動配置和實現,然後又在spring boot的基礎上加入了分散式負載均衡等功能,這才有了spring cloud
Spring cloud是微服務開發套件。springboot=spring+springmvcspringcloud=springboot+ribbon+註冊中心+熔斷器+...
Spring Boot
簡化了基於Spring的應用開發,你只需要"run"就能創建一個獨立的,產品級別的Spring應用。
為Spring平台及第三方庫提供開箱即用的設置,這樣你就可以有條不紊地開始。
多數Spring Boot應用只需要很少的Spring配置。
你可以使用Spring Boot創建Java應用,並使用 java -jar 啟動它或採用傳統的war部署方式。
也提供了一個運行"spring腳本"的命令行工具。
主要的目標:
- 為所有Spring開發提供一個從根本上更快,且隨處可得的入門體驗。
- 開箱即用,但通過不採用默認設置可以快速擺脫這種方式。
- 提供一系列大型項目常用的非功能性特徵,比如:內嵌伺服器,安全,指標,
- 健康檢測,外部化配置。
- 絕對沒有代碼生成,也不需要XML配置。
-----------------------------------------------------------------------------------------------------
Spring Cloud
微服務架構集大成者,雲計算最佳業務實踐。
為開發人員提供了快速構建分散式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智能路由,微代理,控制匯流排)。
分散式系統的協調樣板模式,使用Spring Cloud,開發人員可以快速實施這些模式的服務和應用程序。
在任何分散式環境中運行良好,包括開發人員自己的筆記本電腦,裸機數據中心,以及Cloud Foundry等託管平台。
最近在學習spring cloud 這方面的東西,有么有什麼好的教程或者書籍視頻之類的,求推薦
推薦閱讀:
TAG:Spring | SpringBoot | SpringCloud |